這是一篇筆記,課程來自Coursera上的
How to Win a Data Science Competition: Learn from Top Kagglers本篇可以算是頂級Kaggler大佬們,經(jīng)過上百場比賽總結(jié)的心得和技巧。對準(zhǔn)備開始參加數(shù)據(jù)挖掘競賽的新人們極其有用,可以為你節(jié)省不少時間。
大部分內(nèi)容我已經(jīng)通過意會翻譯成中文了,限于小編我的視野,可能會出現(xiàn)些誤解,有問題望指正。
Tips and tricks
如果覺得排版不適,可以下載notebook文件閱讀。
https://github.com/wmpscc/DataMiningNotesAndPractice
Practical guide
經(jīng)驗(yàn)之談,這將節(jié)省你大量時間。
Before you enter a competition
當(dāng)我們想?yún)⒓颖荣悤r,先確定你的目標(biāo)和試著估計(jì)你的參與可以得到什么。
- 你可能想了解有關(guān)這個問題的更多信息
- 你可能希望熟悉新的軟件工具包
- 你可能想要嘗試去獲取獎牌
這些目標(biāo)中的每一個都將影響您選擇參加的競賽。
如果您想了解更多有趣的問題,您可能希望在論壇上進(jìn)行廣泛討論。例如,如果您對數(shù)據(jù)科學(xué),醫(yī)學(xué)應(yīng)用感興趣, 您可以嘗試在2017年數(shù)據(jù)科學(xué)碗中預(yù)測肺癌。
如果您想熟悉新的軟件工具,您可能希望比賽有必要的教程。 例如,如果您想學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)庫。您可以選擇任何具有自然保護(hù)特征,有監(jiān)督學(xué)習(xí)的圖像比賽。
如果你想嘗試得到獎牌,您可能想要檢查參與者有多少次提交機(jī)會。 如果人們有超過一百個提交的點(diǎn)數(shù),這可能是明顯的問題或驗(yàn)證困難的明顯標(biāo)志。如果排在前列的人很少,這通常意味這應(yīng)該有一個非平凡的方法來參加這場比賽,或者只有少數(shù)人發(fā)現(xiàn)了它。除此之外,你還需要關(guān)注一下排在前列團(tuán)隊(duì)的規(guī)模,如果他是一個人,那么你要是聚集一支優(yōu)秀的團(tuán)隊(duì),勝算會大一些。
After you enter a competition:
- 1.組織你的想法
一旦熟悉了數(shù)據(jù),開始寫下你以后想要嘗試的方法。什么東西可以在這里工作?你可能采取什么方法。
完成后,去論壇閱讀帖子和話題高相關(guān)度的內(nèi)容。強(qiáng)烈建議你參與論壇上的討論,您可以在論壇上獲得大量信息并結(jié)識新朋友。
- 2.挑選一些重要的、有前途的想法
在初始管道準(zhǔn)備好之后,你提出了一些想法,你可能想要開始改進(jìn)你的解決方案
您可能希望將想法排序,將最重要和最有希望的首先實(shí)施?;蛘呖梢詫⑺鼈儦w類到各自主題中,例如特征生成、驗(yàn)證、度量優(yōu)化等。
- 3.嘗試去理解為什么它會或不會工作
現(xiàn)在選擇一個想法并實(shí)施它,嘗試在途中獲得一些簡介。特別是,試著理解為什么某些東西有效或無效。從某種意義上講,分析工作的能力和在你嘗試自己的想法時得出的結(jié)論將使您走上正確的軌道,去揭示隱藏的數(shù)據(jù)模式和泄露。
After you enter a competition:Everything is a hyperparameter
我喜歡按照這些原則對所有參數(shù)進(jìn)行排序:
- 1.重要性
將參數(shù)從重要到不重要排序,這些可能取決于數(shù)據(jù)結(jié)構(gòu)、目標(biāo)、度量等等 - 2.可行性
例如Rate參數(shù)很容易調(diào)整,但這可能永遠(yuǎn)需要調(diào)整 - 3.理解
評價參數(shù),我知道它在做什么或不知道。這里重要的是要了解每個參數(shù)在整個管道中的變化。
注意:改變一個參數(shù)可能影響整個管道
Data loading
一開始就對資源做一些優(yōu)化,將節(jié)省大量時間和計(jì)算資源。
- 從經(jīng)典的處理方法開始然后將csv/txt文件轉(zhuǎn)為hdf5/npy文件以更快的加載
我通常從基本數(shù)據(jù)預(yù)處理開始,如標(biāo)簽,編碼,標(biāo)簽恢復(fù),使用額外的數(shù)據(jù)。然后,我將結(jié)果數(shù)據(jù)轉(zhuǎn)儲為HDF5或npy格式。
HDF5是Pandas的數(shù)據(jù)幀,npy存儲非bit數(shù)組。運(yùn)行試驗(yàn)通常需要大量重啟內(nèi)核,這將導(dǎo)致重新加載所有數(shù)據(jù),加載csv文件可能需要幾分鐘,從HDF5或npy格式加載數(shù)據(jù)只需幾秒鐘即可完成。
- 將64位陣列轉(zhuǎn)為32位,節(jié)省兩倍內(nèi)存
默認(rèn)情況下,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)練集進(jìn)行拆分來驗(yàn)證你的模型,而不是使用完整數(shù)據(jù)來做交叉驗(yàn)證。
Performance evaluation
并不總是需要進(jìn)行廣泛的驗(yàn)證
從最快的模型開始-LightGBM
我通常從LightGBM開始,找到一些相當(dāng)不錯的參數(shù),并評估我的特征的性能。
不要從SVM、隨機(jī)森林、神經(jīng)網(wǎng)絡(luò)開始,你會浪費(fèi)太多時間等待它們的訓(xùn)練。只有當(dāng)我對特征工程感到滿意時,才會轉(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)致浪費(fèi)你的時間,所以要保持簡單合理。
- 把事情簡單化:只保留重要的東西
不要跟蹤每個小變化
- 如果你對計(jì)算資源感到不爽-那就去租一臺服務(wù)器
最后,如果您對給定的計(jì)算資源感到非常不舒服,不要掙扎數(shù)周,只需租一臺更大的服務(wù)器。
Initial pipeline
從簡單甚至原始的解決方案開始
用完整的管道調(diào)試
這種解決方案的主要目的不是建立一個好的模型,而是從數(shù)據(jù)的最開始到我們將提交文件寫成確定的格式,建立完整的調(diào)試管道。我建議你從構(gòu)建初始管道開始,通常你可以在kernel中找到組織者提供的baseline解決方案。我建議你仔細(xì)閱讀并自己寫。
- “從見到到復(fù)雜”
另外,我建議你在其他方面遵循從簡單到復(fù)雜的方法。例如我更喜歡隨機(jī)森林而不是GBDT,至少隨機(jī)森林工作得非???,幾乎不需要調(diào)整混合參數(shù)。
Best Practices from Software Development
- 使用好的變量名
無論你多么聰明,如果你的變量名起的不好,你肯定會對它感到困惑,這是遲早會發(fā)生的。
讓你的研究可重復(fù)
固定所有隨機(jī)種子
準(zhǔn)確記下功能的生成方式
將代碼存儲在版本控制系統(tǒng)下,例如git。
很多時候,你需要回退你的模型到兩星期前做模型集成。復(fù)用代碼
在訓(xùn)練和測試階段使用相同的代碼非常重要。例如,為了保證它們以一致的方式訓(xùn)練,應(yīng)該使用相同的代碼準(zhǔn)備和轉(zhuǎn)換特征。這地方一般很難察覺到,所以最好小心點(diǎn)。我建議將可重用代碼移動到單獨(dú)的函數(shù)中,甚至是單獨(dú)的模塊。
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)
notebook.png Before creating a submission restart the kernel
Use "Restart and run all" button

