1. 程式人生 > >Kaggle正式賽首戰top3%分享,小白獻給機器學習新手

Kaggle正式賽首戰top3%分享,小白獻給機器學習新手

8月15號結束的instacart kaggle比賽首戰 top3% 69名。程式碼我就不貼了,第二第三的程式碼論壇裡都找得到。我這裡主要講方法和注意事項:

以我不深的比賽經歷,我覺得kaggle主要是一個靠特徵工程和模型調參,和模型融合的比賽

第一 論壇和kernel裡一般能夠找到開原始碼,先從得分最好的程式碼開始起步。我當時就是找到了得分最好的R程式碼,但當時我並不會R語言,所以我嘗試從頭到尾翻譯成python。 但是翻譯著翻譯著就學會R了,後來就懶得改直接用R做特徵工程了。當時執行這份程式碼就直接到了top14%,當然比賽結束還有一個月,大家也沒有認真。

第二,可以嘗試論壇裡別人的介紹的方法,kaggle可能和國內的比賽很不一樣,因為外國人非常喜歡分享,可能非常核心的東西也會分享,我當時通過著兩篇論壇文章加了非常多的特徵提升很大: 第一篇是關於word2vec的,第二篇是 How many features do you make? 這裡我獲得了大量特徵,這是我比別人的特徵工程做的好原因之一。另外還有一篇關於KDD特徵工程的論文,我記得那時我經常一邊看論文一邊用R做特徵工程。

第三,還是時刻關注論壇真的非常重要,其實instacart這個比賽是很有水平的,關注數學原理,其中F1優化本來是比賽的核心,但是在比賽快2周結束時,一個德國人把這個核心程式碼給開源了。導致前30到前200名差距只有特徵工程和模型調參,融合。我當時名次直接升到90多,後來通過特徵工程到了52名

第四 這個比賽快結束一週時,我記得當時我是52名,53名的人把自己的整個專案給開源了。而且實際上53名的程式碼的GBDT演算法可以到更好的分數,我一開始都沒有關注他的演算法,導致名次一直退到150名,比賽結束快2天時,我發現融合他的GBDT模型,分數能大幅提升。於是我融合了他的GBDT模型,然後調整融合比率,最好的時候升到40多名。但比賽快結束的時候下降到69。因為我沒有GPU環境,所以最好配置好GPU環境再用自己的特徵執行53名的GBDT已經來不及了。

第五 千萬不要多賬號,我因為多賬號,導致主號被刪除比賽了。只留下了一個top5%的小號,相當悲劇。

最後我租了一臺32核128G記憶體的伺服器,如果記憶體足夠大,你做特徵工程時會非常舒服。 其實這個比賽讓我學會了很多,最重要的是誠信,我努力了1個半月因為誠信問題沒有了榮譽,以後工作也是。跟外國人打交道,更不能有cheating behavior,我覺得是像我這樣的國人缺乏的。

另外看了我的文章你大概也知道,kaggle可以通過論壇學習方法,再花時間去試。如果你有幸碰到一個instacart這種,資料量大,CV穩定,你又有不錯的硬體,時間充裕。有吳恩達的machine learning的機器學習基礎,那麼你很可能能進前5%,當然如果不想被取消成績,千萬要講誠信,不要多賬號,只要有一個提交一樣就有可能被直接踢出比賽。

祝好