[最佳0.11353! @a1041134926,奖励详见2楼,分数持续更新中] 实战Kaggle比赛:房价预测 讨论区


#297

哇,我真的是,什么都不调 直接输出的结果达到了4~6,调了半天,降到了0.3~0.4.。。。。看你们都是0.12,我怕是个魔鬼吧


#298

标红线的这行代码写错了:

应该改为:

all_features[numeric_features] = all_features[numeric_features].fillna(0)


#299

已更正,谢谢


#300

代码与注释: https://github.com/LaoLiulaoliu/MachineLearning/tree/master/kaggle


#301


一番折腾,第二次提交,成功TOP7%:v:


#302


今天的次数用完,越调越低了:joy:


#303


感觉主要就是调小了lr,其他参数参照了楼上的进行了改动结果还行,看到第一吓尿我了


#304

第一次提交,0.12812.
在train上面0.09以内,但是k-fold验证一直是0.14左右,提交试了下在test上反而还要比validation低一点。
加了hidden 32,用relu。
然后k, num_epochs, lr, weight_decay, batch_size = 5, 100, 0.05, 10, 64
试了下增大weight decay,但是缓解过拟合效果不好。不知道一般这个参数是多大空间比较合适。


#305

厉害,decay好高。。。。我的decay都是十以内的调,我也去试试更大的


#306

最近我遇到一个疑惑,就是K折交叉验证。
k折交叉验证是训练k个网络求k次结果的平均,还是训练一个网络求k次结果的平均呢?我觉得是前者,但我看别人的代码都是后者,我疑惑如果用一个网络训练k次那不就把所有数据都训练了吗? 应该是k个网络每个网络都训练k-1份数据测试1份数据才对,这才能保证每个网络都有一份数据没见过。 但是如果是这样模型该怎么保存?是保存k个模型吗?每次预测都要预测k次然后取平均? 哪位大佬能解释一下啊。


#307

其实K折并不是为了训练模型,而是为了调出最合适的超参数以及模型结构。

本节中的K是5,它一共训练了五次,每次都训练出一个模型(都是独立于其他次数训练出来的模型)。最终打印的结果也只是为了看出该次超参数和模型结构是不是足够好。

因为你仔细观察可以发现,每次训练完后开始下一折的训练前,都会把权重重新初始化,所以不会有之前训练的影响在里面了。

因此,实际上等你找到最适合的超参数和模型时,你最好把所有的训练样本都丢进来重新训练一次,然后再把测试集拿进来预测结果,然后提交才合理。


#308

但是本节每一折都是相同的网络结构初了参数不一样,但并没有改变超参数啊。而且这个也没保存前面模型的参数,如果前面的效果好也没保存啊。说白了,我认为就是5种不重复[1,k-1]组合的测试训练集,训练了5种模型网络结构一样,超参数一样,参数不一样的模型啊。只不过本节并没有保存前面的模型。


#310

调了好几次,暂时算是最好成绩吧


即使训练误差更低,但是实际成绩并不好,是过拟合造成的影响?
%E6%9C%80%E7%BB%88%E6%B5%8B%E8%AF%95


#311

感觉avg valid rmse到0.13左右就是极限了…


#312

0.10太难进了


#313

得到的data包括训练特征,训练标签,测试特征,测试标签,加*号是把这个元组拆成这4部分。


#314

平方损失函数前面有个1/2,我是这么理解的。


#315

疯狂用pytorch调了一天参数,开始有点感觉,不过有更多地方不解。
这是我目前最好的效果


我用单层网络的最好结果是0.13536.
双层网络的最好结果就是这个——0.13176
但是稍加wd,整体train rmse=0.12, 最后提交错误率高达0.45…

没有什么好的解法和解决思路了
将房价y对数化和将损失函数设置为对数均方根误差,我的误差都很大,直接就17了,上头,郁闷,没有成功。


#316

调参总结

房价预测是个回归问题。

我在调整网络结构的时候,发现深层网络没有宽度网络效果好,因此房价预测可能存在很多无效的特征,导致深层网络拟合困难,因此想要进一步提高模型特征,需要做特征工程

调参的思路是尽可能降低训练误差,此时再用过拟合技术减少测试误差

但是不能使得训练误差和测试误差相差太大,这样就算使用dropout和weight_decay也不能解决整个网络过拟合问题,也会导致在最终的测试集上效果爆炸

pytorch关键源码

def get_net():
    net = nn.Sequential(
        nn.Linear(train_features.shape[-1], 2048),
        nn.ReLU(),
        nn.Linear(2048, 1)
    )
    return net
k, num_epochs, lr, weight_decay, batch_size = 5, 100, 1, 100, 64


那么本次kaggle比赛调参就先告一段落!
大家有什么好的调参思路和技术请直接回复我。


#318

GPU训练的话,在初始化net的时候显示设置了GPU,同时训练的时候也把数据copy到GPU上了,但是那个log_rmse,不知道怎么设置,我注释了就可以正常训练了,但是这样就没法看准确率了,但是那个我记得 当把ndarray转为numpy.ndarray的时候,会自动转到CPU上,这里有点迷,不知道怎么弄,有没有大佬知道一下呀,非常感谢各位啦