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

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

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


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

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

0.10太难进了

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

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

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


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

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

调参总结

房价预测是个回归问题。

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

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

但是不能使得训练误差和测试误差相差太大,这样就算使用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比赛调参就先告一段落!
大家有什么好的调参思路和技术请直接回复我。

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


两个月前的最好成绩。
当时排名800多,现在已经时1600开外了。。。
想知道排名1-29的,Score都是0.00000的是什么鬼。。。

努力调进了0.11的大门~


主要学习了上面贴子说的,增加隐藏层,减小epochs,lr,增大wd。然后就是慢慢的调试合适的参数,附上今天的submit记录:rofl:

想请教一下为什么我把loss用rmse替代之后反而结果变差了好多:tired_face:


请问这一行代码怎么理解?

numeric_features = all_features.dtypes[all_features.dtypes != ‘object’].index
这句是选取连续数值的索引吗?这里是怎么选择的呢?关键第一个.dtypes没看懂。

简单点的理解就是,找出都是数值类型的列。

群里的大大们,初始化 net.initialize() 括号里什么都没有,是不是就是w=0,b=0 的意思?

这一章定义的k折交叉验证函数取出来的数据集是不是固定的?

train loss 和 valid loss总是有一定距离,怎样可以有效的缩小呢?


加了隐藏层,调低了学习率,加大权重