Re: [闲聊] 菜鸟上Kaggle: 房价预测

楼主: pipidog (如果狗狗飞上天)   2018-03-07 04:33:23
※ 引述《OnePiecePR (OPPR)》之铭言:
: 这里有人玩 Kaggle 吗?
: 其实我还没认真坐坐下来学Python,也没其他程式经验。
: 只是朋友说Kaggle 很好玩,可以当作学 Python 的目标,建议每两周作一题,我就挑战
: 看看。
: 我做的是很久的题目,1460 笔房价资料,每笔资料79个特性。
: 训练后,要估另外1459笔资料回传让网站系统估算成绩。
: 我先花了四五天,整理资料(我以前 Excel 还可以),然后朋友丢一个 Lasso Regressi
: on给我,我马上套用,算一个结果就上传... 以为这样就算完成一题。
: 结果被打抢,Error message 我没看清楚。
: 那一版真的很差,预估值误差 rmse 将近35000。
: 再花了一周时间,重新再整一次资料,边研究别人的方法,大致加了两招:XGB 跟 K fol
: d 误差降低到15000 左右。我想大概是我的极限了。
: 过程中一直用的 bumpy,pandas,一下子 array, 一下子 dataframe, 花了不少时间处理
: ,应该乖乖坐下来搞懂才是。
一点想法:
1. 1460笔资料,却有79的feature,似乎太多了.你听过维度诅咒吗? 建议先作特征
选取,挑出最重要的20个feature(或者更少? 这你得试试看才知道)来作训练:
*你说你选择用Lasso Regression,不知是有目的的这样作还是随便挑的,因为Lasso
其实就是在loss里面加入了L1惩罚,L1会导致线性拟合的时候很多参数被强迫变
成0.这意味着你也认为这79个feature里面,其实只有几个是真正重要的.如果是
这样,何不一开始就先试著作特征选取? (事实上有时候Lasso就是拿来做特征选
取之用)
http://scikit-learn.org/stable/modules/feature_selection.html
2. 如果资料只有1千多笔,而网站又提供的另外的测试集了,建议训练时就不要再分
测试跟训练了. 你直接对全部的资料用corss-validation来判断模型表现,找出
好的超参数后,就拿全部资料训练模型就好.才一千多笔还分测试跟训练,贵了一点.
http://scikit-learn.org/stable/modules/cross_validation.html
3. 你的数据可能非线性程度高,用Lasso自然不好,试试看SVM(支援向量机)?
一般如果是回归问题,kernal多选用Radial basis function
http://scikit-learn.org/stable/modules/svm.html#regression
4. 没有一个模型不能解决的事情,如果有,就给它一堆模型! 所以你可以考虑ensemble
learning,例如random forest, adaboost,..,etc.多数情况下会比用单一模型好.
http://scikit-learn.org/stable/modules/ensemble.html
5. 最后找个网站,把pandas练熟,这东西没弄熟,洗资料会搞得你很痛苦.
https://ithelp.ithome.com.tw/users/20103511/ironman/1077?page=2
看一下14,15天.
* 最后,处理数据占90%的时间,训练模型只占10%,这是很正常的...越脏的事情越花时间
,不要觉得奇怪.
作者: aszx4510 (wind)   2018-03-07 05:58:00
感谢教学 获益良多
作者: stoltzman (......)   2018-03-07 07:18:00
感谢大大分享!获益良多!
作者: vfgce (小兵)   2018-03-07 07:30:00
kaggle的测试集,通常不附target..没办法用cross-validationemsemble learning通常也没有比单一模型好很多..pandas真的要好好学,但sklearn最大问题在于对类别属性的处理不佳.pandas已经有category,但sklearn还无法使用目前只有Y能够以分类处理,X的部分都转成int,然后被转成
楼主: pipidog (如果狗狗飞上天)   2018-03-07 07:43:00
v大,同意,sklearn跟pandas真的整合度很糟糕...但可见未来似乎也不太可能改善,只能靠耐心处理了
作者: vfgce (小兵)   2018-03-07 07:44:00
flaot去处理了.这是颇不合理的处理方式....用过R的大概知道我说的是什么..这部分希望sklearn能否直接支援pandas就方便多了.
作者: Luluemiko (露露)   2018-03-07 09:33:00
作者: leo021566 (大禹)   2018-03-07 11:32:00
作者: goldflower (金色小黄花)   2018-03-07 15:58:00
ensemble现在应该一堆都直接无脑XGBoost了XD
作者: neil987 (R5大小姐-EX人品崩坏)   2018-03-07 16:03:00
不妨玩玩看PCA
作者: EGsux (天龙人)   2018-03-07 16:20:00
比较好处理 category好的方法就是 one hot 然后pca了 但是category类用来做 regression也不要太期待accuracytest set当然没 target比赛就是那样 要用 training 来做cv
作者: vfgce (小兵)   2018-03-07 17:07:00
所以你有一堆数值和类别混合的data,用python做真的会想XXXR内建有factor类别,套件也多能配合,用起来方便多了.明明sklearn是一个丰富的PACKAGE,当初怎没将这个考虑进去.用上决策树的感受特别明显.ONE HOT 也不是万灵丹,当属性含有很多类别时,会制造出更多属性,整个属性维度又更大.R内建的FACOTR,套件大多考虑到这一层,用起来方便多了.或许SKLEARN 只考虑到配合NUMPY使用,但这问题应该还多人都遇到了. 希望后面的版正能修正这个问题...
作者: cc9i (正直与善良)   2018-03-07 21:23:00
脏 这体会有同感
作者: fischcheng (布阿送)   2018-03-08 04:38:00
受教啦,感谢!
作者: Raymond0710 (雷门)   2018-03-08 08:28:00
作者: f496328mm (为什么会流泪)   2018-03-08 10:51:00
提供一个关于 category 转换的方法在kaggle上用过, 效果不错https://goo.gl/LqCNjP
作者: bestchiao (呼拉拉)   2018-03-08 16:09:00
感谢上面f大分享 很详细
楼主: pipidog (如果狗狗飞上天)   2018-03-17 03:41:00
细读f大的分享受,发现受用无穷!

Links booklink

Contact Us: admin [ a t ] ucptt.com