作者aaaba (小强)
看板deeplearning
标题[转录] [闲聊] 菜鸟上Kaggle: 房价预测
时间Sat Mar 10 08:45:57 2018
作者: pipidog (如果狗狗飞上天) 看板: Python
标题: Re: [闲聊] 菜鸟上Kaggle: 房价预测
时间: Wed Mar 7 04:33:23 2018
※ 引述《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%,这是很正常的...越脏的事情越花时间
,不要觉得奇怪.
--
★人生中最温暖的夏天是在纽约的冬天★
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 73.66.168.95
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1520368414.A.CE9.html
※ 编辑: pipidog (73.66.168.95), 03/07/2018 04:51:15
1F:推 aszx4510: 感谢教学 获益良多 03/07 05:58
2F:推 stoltzman: 感谢大大分享!获益良多! 03/07 07:18
3F:推 vfgce: kaggle的测试集,通常不附target..没办法用cross-validation 03/07 07:30
4F:→ vfgce: emsemble learning通常也没有比单一模型好很多.. 03/07 07:32
5F:推 vfgce: pandas真的要好好学,但sklearn最大问题在於对类别属性的 03/07 07:37
6F:→ vfgce: 处理不佳. 03/07 07:37
7F:→ vfgce: pandas已经有category,但sklearn还无法使用 03/07 07:39
8F:→ vfgce: 目前只有Y能够以分类处理,X的部分都转成int,然後被转成 03/07 07:42
9F:→ pipidog: v大,同意,sklearn跟pandas真的整合度很糟糕... 03/07 07:43
10F:→ pipidog: 但可见未来似乎也不太可能改善,只能靠耐心处理了 03/07 07:43
11F:→ vfgce: flaot去处理了.这是颇不合理的处理方式.... 03/07 07:44
12F:→ vfgce: 用过R的大概知道我说的是什麽..这部分希望sklearn能否直接 03/07 07:45
13F:→ vfgce: 支援pandas就方便多了. 03/07 07:45
14F:推 Luluemiko: 推 03/07 09:33
15F:推 leo021566: 推 03/07 11:32
16F:推 goldflower: ensemble现在应该一堆都直接无脑XGBoost了XD 03/07 15:58
17F:推 neil987: 不妨玩玩看PCA 03/07 16:03
18F:推 EGsux: 比较好处理 category好的方法就是 one hot 然後pca了 但是 03/07 16:20
19F:→ EGsux: category类用来做 regression也不要太期待accuracy 03/07 16:20
20F:推 EGsux: test set当然没 target比赛就是那样 要用 training 来做cv 03/07 17:03
21F:推 vfgce: 所以你有一堆数值和类别混合的data,用python做真的会想XXX 03/07 17:07
22F:→ vfgce: R内建有factor类别,套件也多能配合,用起来方便多了. 03/07 17:08
23F:推 vfgce: 明明sklearn是一个丰富的PACKAGE,当初怎没将这个考虑进去. 03/07 17:21
24F:推 vfgce: 用上决策树的感受特别明显. 03/07 17:23
25F:→ vfgce: ONE HOT 也不是万灵丹,当属性含有很多类别时,会制造出更多 03/07 17:25
26F:推 vfgce: 属性,整个属性维度又更大. 03/07 17:29
27F:→ vfgce: R内建的FACOTR,套件大多考虑到这一层,用起来方便多了. 03/07 17:31
28F:→ vfgce: 或许SKLEARN 只考虑到配合NUMPY使用,但这问题应该还多人都 03/07 17:32
29F:→ vfgce: 遇到了. 希望後面的版正能修正这个问题... 03/07 17:33
30F:推 cc9i: 脏 这体会有同感 03/07 21:23
31F:推 fischcheng: 受教啦,感谢! 03/08 04:38
32F:推 Raymond0710: 推 03/08 08:28
33F:推 f496328mm: 提供一个关於 category 转换的方法 03/08 10:51
34F:→ f496328mm: 在kaggle上用过, 效果不错 03/08 10:51
36F:推 bestchiao: 感谢上面f大分享 很详细 03/08 16:09
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 101.8.6.231
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/deeplearning/M.1520642760.A.2B2.html
37F:推 NBAPredictor: 小弟不专业 但Lasso在N>P的情况使用到底有什麽意义? 03/10 13:04
38F:→ NBAPredictor: 之前面临到的情况都是P>>N才会使用到LASSO 03/10 13:05
39F:→ NBAPredictor: 且使用的都是Group Lasso 03/10 13:05
40F:→ NBAPredictor: 1460*79 直觉的作法就是拉Stepwise L2挑Feature 03/10 13:08
41F:→ NBAPredictor: 相关系数 变异数等一次统包都考虑到了 03/10 13:09
42F:→ NBAPredictor: 这篇提到Lasso有什麽特别的用法吗 03/10 13:09
43F:→ hl4: N和P分别是指什麽? 03/10 15:31
44F:推 seasa2016: 推 03/10 22:10
45F:→ f496328mm: N是data数,p是variable数 03/11 12:42
46F:推 f496328mm: lasso就只是很单纯的回归+ penalty term,并没有说p>n 03/11 12:44
47F:→ f496328mm: 才能用 03/11 12:44
48F:推 NBAPredictor: 对啊 可是不知道有什麽好处 03/11 16:47
49F:→ aaaba: 做 selection 的前提不就暗示了存在 sparsity?所以用一下 03/11 16:57
50F:→ aaaba: lasso 也是满合理的。实务上当然不会那麽理想,就是多个 03/11 16:57
51F:→ aaaba: 方法可以踹看看这样 03/11 16:57
52F:推 NBAPredictor: 也是 踹看看 03/11 17:13
53F:→ Wush978: LASSO可以压缩模型,因为参数为0的在怖署时可以删除 03/11 17:58