頂級Kagglers的心得和技巧

這是一篇筆記,課程來自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。

pe.png

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

wechat.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容