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