实战 Kaggle 比赛:预测房价

可能是4g的笔记本后来自己加了一根8g的内存条吧。。。

2 Likes


大佬们,这里是图片显示的错误吗? 【STIXGeneral】字体找不到? 请问有没有和我遇到同样的问题的,怎么解决呢?

没有找到如何提交到kaggle上,我好菜啊

3 Likes

我觉得是log rmse里面会对数据做截断,没法求导。

1 Like

请问权值初始化在哪儿呢
是在哪一步集成了吗?

用稀疏矩阵就可了11111111111111111111111

1 Like

我这边调出的最好结果了。。kaggle注册不了

4 Likes

跟之前准确率一样,只是方便人的观察,训练还是用之前的

1 Like

net = nn.Sequential(nn.Linear(in_features,1)) # 线性层会自动初始化权重w和b

1 Like

折1,训练log rmsenan, 验证log rmsenan
折2,训练log rmsenan, 验证log rmsenan
折3,训练log rmsenan, 验证log rmsenan
折4,训练log rmsenan, 验证log rmsenan
折5,训练log rmsenan, 验证log rmsenan
5-折验证: 平均训练log rmse: nan, 平均验证log rmse: nan

这是梯度消失了嘛,为什么我的参数都一样,我会一直梯度消失。该怎么调呢

感觉应该是梯度爆炸了,示例代码中的lr设置的是5,我不知道为什么设这么大的lr,调小点可能会好一些

1 Like

TypeError: linear(): argument ‘input’ (position 1) must be Tensor, not NoneType
不知道为啥我这里的None不能当作tensor进行运算,train_and_pred里面的train会报错,实测把None改为同等形状的空tensor就可以了
train_ls, _ = train(net, train_features, train_labels,None, None,
num_epochs, lr, weight_decay, batch_size)
# train_ls, _ = train(net, train_features, train_labels,torch.empty(train_features.shape), torch.empty(train_labels.shape),
# num_epochs, lr, weight_decay, batch_size)

在把非数值型数据转化成独热编码时,可以换成在每一列用一个数字代表一类,比如该列有三类“红”,“黄”,“蓝”,“红”用1表示,“黄”用2表示,“蓝”用3表示?

拿价格的对数作为loss函数好像结果很不好。平均验证log rmse: 8.059207 :sweat:

3 Likes

我的最好成绩是这样的:
k, num_epochs, lr, weight_decay, batch_size = 5, 100, 0.2, 25, 128
多层网络(in_features, 1024)ReLU(1024, 1), 直接loss(net(x), y)
5-折验证: 平均训练log rmse: 0.028177, 平均验证log rmse: 0.135742

另外训练集的损失可以很低,比如这个:
k, num_epochs, lr, weight_decay, batch_size = 10, 800, 0.02, 25, 128
多层网络(in_features, 1024)ReLU(1024, 1), 直接loss(net(x), y)
10-折验证: 平均训练log rmse: 0.007594, 平均验证log rmse: 0.145192
但是验证集的损失仍然在0.14左右,这是不是说明数据集还是太小了?

1 Like

我试了一下dropout,结果过拟合果然降低了,但是主要是通过升高了训练损失,而验证损失几乎没怎么改善 :joy:

1 Like

kaggle最好成绩

net = nn.Sequential(nn.Flatten(), 
                        nn.Linear(in_features, 1024),
                       nn.ReLU(),
                       nn.Linear(1024, 1))
k, num_epochs, lr, weight_decay, batch_size = 5, 100, 0.1, 35, 256
6 Likes

k, num_epochs, lr, weight_decay, batch_size = 7, 100, 0.1, 0.00001, 128
这个参数能有更好结果,kaggle的public score可以降到5.52295


有没有colab出现这个问题的,请教解决方法

/usr/local/lib/python3.9/dist-packages/matplotlib/_api/init.py in check_getitem(_mapping, **kwargs)

ValueError: ‘svg’ is not a valid value for output; supported values are ‘path’, ‘agg’, ‘macosx’

SEARCH STACK OVERFLOW

是d2l 里面這句不行, 把svg 改成png 就好了
backend_inline.set_matplotlib_formats(‘svg’)

加入下面的代碼, 把k_fold里面的d2l.plot 改為指向本地的plot就好了

from matplotlib_inline import backend_inline
def set_figsize(figsize=(3.5, 2.5)):
    """Set the figure size for matplotlib.

    Defined in :numref:`sec_calculus`"""
    backend_inline.set_matplotlib_formats('png')
    d2l.plt.rcParams['figure.figsize'] = figsize

def plot(X, Y=None, xlabel=None, ylabel=None, legend=None, xlim=None,
         ylim=None, xscale='linear', yscale='linear',
         fmts=('-', 'm--', 'g-.', 'r:'), figsize=(3.5, 2.5), axes=None):
    """Plot data points.

    Defined in :numref:`sec_calculus`"""
    if legend is None:
        legend = []

    set_figsize(figsize)
    axes = axes if axes else d2l.plt.gca()

    # Return True if `X` (tensor or list) has 1 axis
    def has_one_axis(X):
        return (hasattr(X, "ndim") and X.ndim == 1 or isinstance(X, list)
                and not hasattr(X[0], "__len__"))

    if has_one_axis(X):
        X = [X]
    if Y is None:
        X, Y = [[]] * len(X), X
    elif has_one_axis(Y):
        Y = [Y]
    if len(X) != len(Y):
        X = X * len(Y)
    axes.cla()
    for x, y, fmt in zip(X, Y, fmts):
        if len(x):
            axes.plot(x, y, fmt)
        else:
            axes.plot(y, fmt)
    d2l.set_axes(axes, xlabel, ylabel, xlim, ylim, xscale, yscale, legend)

1 Like