這是一篇筆記堕虹,課程來自Coursera上的
How to Win a Data Science Competition: Learn from Top Kagglers
本篇可以算是頂級Kaggler大佬們朱巨,經(jīng)過上百場比賽總結(jié)的心得和技巧刻盐。對準備開始參加數(shù)據(jù)挖掘競賽的新人們極其有用捅位,可以為你節(jié)省不少時間骤肛。
大部分內(nèi)容我已經(jīng)通過意會翻譯成中文了诱咏,限于小編我的視野,可能會出現(xiàn)些誤解既绕,有問題望指正啄刹。
Tips and tricks
如果覺得排版不適,可以下載notebook文件閱讀岸更。
https://github.com/wmpscc/DataMiningNotesAndPractice
Practical guide
經(jīng)驗之談鸵膏,這將節(jié)省你大量時間。
Before you enter a competition
當我們想?yún)⒓颖荣悤r怎炊,先確定你的目標和試著估計你的參與可以得到什么。
- 你可能想了解有關(guān)這個問題的更多信息
- 你可能希望熟悉新的軟件工具包
- 你可能想要嘗試去獲取獎牌
這些目標中的每一個都將影響您選擇參加的競賽。
如果您想了解更多有趣的問題评肆,您可能希望在論壇上進行廣泛討論债查。例如,如果您對數(shù)據(jù)科學(xué)瓜挽,醫(yī)學(xué)應(yīng)用感興趣盹廷, 您可以嘗試在2017年數(shù)據(jù)科學(xué)碗中預(yù)測肺癌。
如果您想熟悉新的軟件工具久橙,您可能希望比賽有必要的教程俄占。 例如,如果您想學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)庫淆衷。您可以選擇任何具有自然保護特征缸榄,有監(jiān)督學(xué)習(xí)的圖像比賽。
如果你想嘗試得到獎牌祝拯,您可能想要檢查參與者有多少次提交機會甚带。 如果人們有超過一百個提交的點數(shù),這可能是明顯的問題或驗證困難的明顯標志佳头。如果排在前列的人很少鹰贵,這通常意味這應(yīng)該有一個非平凡的方法來參加這場比賽,或者只有少數(shù)人發(fā)現(xiàn)了它康嘉。除此之外碉输,你還需要關(guān)注一下排在前列團隊的規(guī)模,如果他是一個人亭珍,那么你要是聚集一支優(yōu)秀的團隊腊瑟,勝算會大一些。
After you enter a competition:
- 1.組織你的想法
一旦熟悉了數(shù)據(jù)块蚌,開始寫下你以后想要嘗試的方法闰非。什么東西可以在這里工作?你可能采取什么方法峭范。
完成后财松,去論壇閱讀帖子和話題高相關(guān)度的內(nèi)容。強烈建議你參與論壇上的討論纱控,您可以在論壇上獲得大量信息并結(jié)識新朋友辆毡。
- 2.挑選一些重要的、有前途的想法
在初始管道準備好之后甜害,你提出了一些想法舶掖,你可能想要開始改進你的解決方案
您可能希望將想法排序,將最重要和最有希望的首先實施尔店≌H粒或者可以將它們歸類到各自主題中主慰,例如特征生成、驗證鲫售、度量優(yōu)化等共螺。
- 3.嘗試去理解為什么它會或不會工作
現(xiàn)在選擇一個想法并實施它,嘗試在途中獲得一些簡介情竹。特別是藐不,試著理解為什么某些東西有效或無效。從某種意義上講秦效,分析工作的能力和在你嘗試自己的想法時得出的結(jié)論將使您走上正確的軌道雏蛮,去揭示隱藏的數(shù)據(jù)模式和泄露。
After you enter a competition:Everything is a hyperparameter
我喜歡按照這些原則對所有參數(shù)進行排序:
- 1.重要性
將參數(shù)從重要到不重要排序阱州,這些可能取決于數(shù)據(jù)結(jié)構(gòu)挑秉、目標、度量等等 - 2.可行性
例如Rate參數(shù)很容易調(diào)整贡耽,但這可能永遠需要調(diào)整 - 3.理解
評價參數(shù)衷模,我知道它在做什么或不知道。這里重要的是要了解每個參數(shù)在整個管道中的變化蒲赂。
注意:改變一個參數(shù)可能影響整個管道
Data loading
一開始就對資源做一些優(yōu)化阱冶,將節(jié)省大量時間和計算資源。
- 從經(jīng)典的處理方法開始然后將csv/txt文件轉(zhuǎn)為hdf5/npy文件以更快的加載
我通常從基本數(shù)據(jù)預(yù)處理開始滥嘴,如標簽木蹬,編碼,標簽恢復(fù)若皱,使用額外的數(shù)據(jù)镊叁。然后,我將結(jié)果數(shù)據(jù)轉(zhuǎn)儲為HDF5或npy格式走触。
HDF5是Pandas的數(shù)據(jù)幀晦譬,npy存儲非bit數(shù)組。運行試驗通常需要大量重啟內(nèi)核互广,這將導(dǎo)致重新加載所有數(shù)據(jù)敛腌,加載csv文件可能需要幾分鐘,從HDF5或npy格式加載數(shù)據(jù)只需幾秒鐘即可完成惫皱。
- 將64位陣列轉(zhuǎn)為32位像樊,節(jié)省兩倍內(nèi)存
默認情況下,Pandas以64位陣列存儲數(shù)據(jù)旅敷,這在大多數(shù)情況下是不必要的生棍。將所有內(nèi)容向下轉(zhuǎn)換為32位將節(jié)省兩倍的內(nèi)存
- 大數(shù)據(jù)集可以被分塊處理
Pandas支持即時的數(shù)據(jù)重新鏈接。因此媳谁,大多數(shù)數(shù)據(jù)集可以在沒有大量內(nèi)存的情況下處理涂滴。例如您可以簡單的對訓(xùn)練集進行拆分來驗證你的模型,而不是使用完整數(shù)據(jù)來做交叉驗證氢妈。
Performance evaluation
并不總是需要進行廣泛的驗證
從最快的模型開始-LightGBM
我通常從LightGBM開始粹污,找到一些相當不錯的參數(shù)段多,并評估我的特征的性能首量。
不要從SVM、隨機森林进苍、神經(jīng)網(wǎng)絡(luò)開始加缘,你會浪費太多時間等待它們的訓(xùn)練。只有當我對特征工程感到滿意時觉啊,才會轉(zhuǎn)向去調(diào)整模型拣宏、采樣和stacking。
Fast and dirty always better
在某些方面杠人,我將我的方法描述為“fast and dirty”勋乾,總是更好。
- 不要過于關(guān)注代碼質(zhì)量
關(guān)注真正重要的事——數(shù)據(jù)嗡善。做數(shù)據(jù)探索辑莫,嘗試不同的特征。谷歌特定領(lǐng)域的知識罩引。您的代碼是次要的各吨。創(chuàng)建不必要的類和個人框架可能只會讓事情更難以改變,這會導(dǎo)致浪費你的時間袁铐,所以要保持簡單合理揭蜒。
- 把事情簡單化:只保留重要的東西
不要跟蹤每個小變化
- 如果你對計算資源感到不爽-那就去租一臺服務(wù)器
最后,如果您對給定的計算資源感到非常不舒服剔桨,不要掙扎數(shù)周屉更,只需租一臺更大的服務(wù)器。
Initial pipeline
從簡單甚至原始的解決方案開始
用完整的管道調(diào)試
這種解決方案的主要目的不是建立一個好的模型洒缀,而是從數(shù)據(jù)的最開始到我們將提交文件寫成確定的格式瑰谜,建立完整的調(diào)試管道。我建議你從構(gòu)建初始管道開始帝洪,通常你可以在kernel中找到組織者提供的baseline解決方案似舵。我建議你仔細閱讀并自己寫。
- “從見到到復(fù)雜”
另外葱峡,我建議你在其他方面遵循從簡單到復(fù)雜的方法砚哗。例如我更喜歡隨機森林而不是GBDT,至少隨機森林工作得非撑檗龋快蛛芥,幾乎不需要調(diào)整混合參數(shù)提鸟。
Best Practices from Software Development
- 使用好的變量名
無論你多么聰明,如果你的變量名起的不好仅淑,你肯定會對它感到困惑称勋,這是遲早會發(fā)生的。
讓你的研究可重復(fù)
固定所有隨機種子
準確記下功能的生成方式
將代碼存儲在版本控制系統(tǒng)下涯竟,例如git赡鲜。
很多時候,你需要回退你的模型到兩星期前做模型集成庐船。復(fù)用代碼
在訓(xùn)練和測試階段使用相同的代碼非常重要银酬。例如,為了保證它們以一致的方式訓(xùn)練筐钟,應(yīng)該使用相同的代碼準備和轉(zhuǎn)換特征揩瞪。這地方一般很難察覺到,所以最好小心點篓冲。我建議將可重用代碼移動到單獨的函數(shù)中李破,甚至是單獨的模塊。
Read papers
- 這可以獲取到ML相關(guān)的電子
- 例如壹将,如何去優(yōu)化AUC
- 便于熟悉相關(guān)領(lǐng)域問題
- 尤其對特征生成有用
My pipeline
Read forums and examine kernels first
There are always discussions happening!
Start with EDA and a baseline
To make sure the data is loaded correctly
To check if validation is stable
I ad features in bulks
At start I create all the features I can make up
I evaluate many features at once(not "add one and evaluate")
Hyperparameters optimization
First find the parameters to overfit train dataset
And then try to trim model
Code organization:keeping it clean
Very important to have reproducible results!
Keep important code clean
Long execution history leads to mistakes
Your notebooks can become a total mess
s = qq.sum(1)
ss = s[:,3]/qq.var()
sss = ss[0]
注意代碼質(zhì)量
-
One notebook per submission(and use git)
Before creating a submission restart the kernel
Use "Restart and run all" button