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


#105

看这么多小伙伴,也试了试。果然需要一定的方法来,不然很麻烦。。。

先留个坑把。后面自我总结总结。

QQ截图20171006121147


说下心路历程:

先是对label求对数,和缺失较多的特征删除后,加了一层layer。没有章法的调参后,效果也不太好,最好的也是0.13左右。(这不行啊,怎么也得达到base line,不然这个“调得一手好参”徽章不就得不到了)

然后重新刷了一遍教材,仍然是一层layer,改了几个超参。效果可以稳定在12-13之间了。

主要循序这样的思路:

1.因为模型影响很大,所以先确定下来你的网络。譬如加个一层layer,那么再确定个units。这时候就不要改了;

2.这时候选个小一点的num_echos和k,目的是能尽快拿到结果,给个第一印象;

3.learning_rate影响你的收敛速度和稳定,基于上面num_echos和k我们取的不大。所以可以第一时间调整lr(我个人调整的逻辑是让loss曲线变得平滑一些)。

4.确定好lr,再调整调整wd(这时候一般出现过拟合了,调大wd;不行再加dropout)。最后设置几个num_echos,看看能不能进一步降低test loss。


刚刚想起看过沐神的《大数据:“人工特征工程+线性模型”的尽头》,觉得如果进一步刷分的话,还是要靠一定的先验知识将样本数据精简变为feature。

毕竟样本这么少,可能模型做到的只是记住feature,而不能达到自我学习(所以可能layer的层数并不需要很多)。那么人工干预的话(因为这是比赛,我觉得可以首先人为判断某一feature对于label的影响大小到底如何)来筛选feature。

其次再通过统计的方法来从上面feature中选出key feature。而且或许这些key feature之间也有关系可以表达之类的。。

最后通过模型将这些key feature表达出我们想要的结果,就像沐神说的,关键点在于1.能否收敛;2.模型的output在一段时间内是稳定的。所以如果能调出稳定在0.11~0.12的的模型,我觉得做这个比赛就很有意义了。也希望上面的大神也给我们讲讲你们的心路历程。:joy:


[最高0.9853! @zzc1995,分数持续更新中] 动手玩Kaggle比赛------使用Gluon对原始图像文件分类(CIFAR-10) 讨论区
#106

把今天的额度用完了,不过有一次只微调了wd,竟然又上升了一些。


#107

早上刚过可以提交的时间点,就迫不及待地试一下:发现一点点特征工程的效果竟然如此之大~


#108

你再跑一遍说不定就超了。。。


#109

在之前的基础上,试着drop几个NA值比较多的字段,提交的效果反而不好。
于是还是回过头来试着微调一下wd,因为毕竟train loss跟cv loss还是有些gap。
提交结果验证微调的思路是正确的~


#110

其实我保持0.11481记录挺久了,:smile:。这下被超了,都有空再调。


#111

恭喜恭喜!
@qingfengsuiyu2016 你的记录刚刚被 @pitt 超了~ 你们都好厉害啊


#112

你一开始成绩就特别好,加油啊


#113

赞,有空分享下你总结吧


#114

慢慢来


#115


国庆最后一天刚玩,借鉴了贴里大神的调参思路,名次确实提高好多呀


#116

国庆回家木有电脑,刚回来就试了试,加大隐藏节点数,调整了学习率和wd,效果很明显。
不知为何,按照前面的一些思路对价格取对数效果并不理想。
破了0.12大关,开森 :rofl:


下午又试了试,调大了wd,又刷新了自己的记录。
数据预处理全部都是采用文档给的,只调了网络和超参数,这样比较符合调参的概念。数据预处理就属于另一方面了


#117

遵从Ng的教导
1.先看Training error和Human level 之间的gap及bias的大小,bias比较大的话可训练复杂的网络或者选用更好的算法,所以我加了个200个节点的神经层,并选用relu为激活函数。同时调整学习率。
2.variance比较大的话,采用正则化,weight decay 或者dropout,也可以early stopping(Ng并不是很推荐这种方法,不正交化)。基于此,我加大了wd,减小了epoch,勉勉强强调到下面的水平。小伙伴们随便一调就到0.11的水平真是太厉害了。

之后,看到上面对数据预处理的方法,也试了下对房价取对数,train loss和test loss还可以
test loss

但是,神奇的事情发生了,我提交结果,显示loss非常非常非常大,有9.多,试了好几次直到今天次数用完都是9.多,小伙伴们能不能给我解释下到底发生了什么吗?难道是我假期把运气都败光了吗。。。


#118

你预测的时候忘了取指数重新改回正常尺度了吧。另外取对数后learning rate需要改小一点。


#119

你取完对数,在最后出结果的时候,是不是忘了乘回来了。没乘回来肯定错啊


#120

结果要加个exp。。。


#121

取对数后lr要小很多,对wd也很敏感,也要小很多


#122

而且,这里的loss也别激动。。(好吧,我承认我当时也挺鸡冻)

总而言之,你既然将label先对数化了,那么在get_rmse_log函数里把log去掉(当然前面的clipped_preds也没啥用了)。不然,显示的误差没有参看意义。例如,lonelykid大神他们弄的0.11位成绩,估计用get_rmse_log统计loss,估计只有0.03~0.04


#123

感谢各位,了解了,今天调得有点晕了,先回去睡了,明天继续。


#124


继续调整了下网络结构,学习率,分数又上去了,真的是在炼丹~~