記我的第一次Kaggle比賽

Author: Shiyi001 && Bobbbb

眾所周知,Kaggle是一個全球知名的大數據競賽。能在Kaggle比賽中獲得一個好的名次,是對一個data scientist最好的肯定。現在,我就把自己參加Kaggle的經歷寫下來,希望能幫到各位Kagglers。

PS 本文假設讀者對 Machine Learning 的基本概念和常見模型已經有一定了解。 Enjoy Reading!

我參加的是Kaggle的Quora Question Pairs比賽,共3394支隊伍參賽。最后我們隊獲得了135名(top 4%)的好成績。在此,我們將自己參加比賽的具體流程和心路歷程記錄下來。完整代碼及心得體會在PPshrimpGo/Quora-Kaggle

數據分析 && 數據預處理

在參加比賽后,我們要先對數據進行分析。由于數據量很大,光靠肉眼顯然是不夠的。在此,我們需要使用一些數據分析工具以及可視化工具,如pandas,matplotlib, seaborn等。

對數據做初步的分析非常有意義,比如對于分類問題中的特征按特征觀察數據的分布,可以直觀的看出這個特征是否有足夠的“區分度”。

一個直觀的可視化展示也非常有助于進行思考和挖掘數據分布上特征。

通常我們拿到是數據并不是“完美”的,會存在各種各樣的情況。針對不同情況,我們需要做出不同的處理。如空值處理,就存在不同的方法。

除了數據本身存在的問題,我們為了更好地提取特征和訓練模型,也需要對數據進行特殊處理(數據清洗)。例如在本次比賽中,很多隊伍選擇將連在一起的詞拆開(What's -> What is),替換原句中的非英文單詞等(印度語 -> 英語)。

數據清洗的在比賽中可能起到很關鍵的作用,異常值的剔除和一些空值的補足會給特征提取減弱噪聲,加速模型的構建。通常數據清洗的手段有以下:

  • 補充空值
  • 剔除異常值
  • 數據的轉化

具體的方法在如何在 Kaggle 首戰中進入前 10%博客中有詳細介紹,在此不再贅述。

特征工程

一場Kaggle比賽,最重要的就是特征工程。一個良好的特征給預測結果帶來的提升是顯而易見的。很多人在做特征工程時很容易沒有頭緒,下面我就說一說我們在這次比賽中的特征提取思路。

首先,由于Quora Question Pairs屬于自然語言處理的文本相似性問題。在考慮問題的時候,我們從兩方面進行思考:

1 傳統文本特征
2 詞向量特征

在這兩個方向,我們挖掘了30+個特征,獲得了大約0.30的Public LB Score。

在這一部分工作做完之后,我們接下來做了另外兩部分工作。

1 研究最新的關于文本相似性的論文,從論文中獲取靈感。并且,我們將論文中的一些算法實現,并將其加入我們的特征。
2 查看Kaggle上面的Kernel和discussion。Kaggle是一個非常活躍和樂于分享的社區,很多人都愿意把自己的思路放上來供大家參考。

從這兩部分工作中,我們又獲得了許多特征,包括了兩個一度被認為是leaky的magic feature(這兩個特征幫我們提升了接近0.1)。加上以上特征,我們的Public LB Score來到了0.15左右。

在這一部分,建議大家挖掘特征方向可以思維開闊一些,有時候順著別人的思路,會走的比較深,比如本次比賽的magic feature從基于圖的角度出發,挖掘到了特征,賽后看到top n的經驗分享,很多人在此基礎上,挖掘了更多基于圖的特征,取得了不錯的效果。

還有一個就是特征間的多項式組合,比如兩個句子的長度,可以求他們的差值,也可以求他們的和等等。還有不同特征間的相互組合,常常會起較為出色的效果。

模型融合

在之前的特征工程中,我們一直是使用的xgboost作為單模型跑。融合階段,我們決定使用stacking方法。

Stacking
相比 Blending,Stacking 能更好地利用訓練數據。以 5-Fold Stacking 為例,它的基本原理如圖所示:

Stacking

整個過程很像 Cross Validation。首先將訓練數據分為 5 份,接下來一共 5 個迭代,每次迭代時,將 4 份數據作為 Training Set 對每個 Base Model 進行訓練,然后在剩下一份 Hold-out Set 上進行預測。同時也要將其在測試數據上的預測保存下來。這樣,每個 Base Model 在每次迭代時會對訓練數據的其中 1 份做出預測,對測試數據的全部做出預測。5 個迭代都完成以后我們就獲得了一個 #訓練數據行數 x #Base Model 數量 的矩陣,這個矩陣接下來就作為第二層的 Model 的訓練數據。當第二層的 Model 訓練完以后,將之前保存的 Base Model 對測試數據的預測(因為每個 Base Model 被訓練了 5 次,對測試數據的全體做了 5 次預測,所以對這 5 次求一個平均值,從而得到一個形狀與第二層訓練數據相同的矩陣)拿出來讓它進行預測,就得到最后的輸出。

Base Model 選擇如下:

  • xgboost(0.14),
  • LoesticRegression(0.19),
  • RandomForestClassifier(0.19),
  • GradientBoostingClassifier(0.19),
  • MLPClassifier(0.20)
  • LSTM(0.20)

經過5折stacking,我們發現效果居然還不如單模型xgboost。What a sad story!
經過一番思考,我們認為由于不同的模型使用了相同的特征做分類,模型的diversity不足,于是在最后一天,采取了對每個fold隨機采樣百分之70的特征進行stacking,此番操作減小了base model的水平,所以最后結果并沒有太大提升。

最后由于時間不足,我們最后選擇0.5Xgboost + 0.5LSTM草草了事。

賽后總結

  • 1 因盡早進行特征管理,后期有些特征并不能起到作用甚至會有反作用??梢詥为毮贸鲞@部分特征去做一些事情,特征間的多項式組合沒有考慮。
  • 2 不要一頭扎進單模型,盡早對其他模型進行調參,后期時間很可能不夠
  • 3 及早進行stacking,可以提前發現問題并解決。
  • 4 建立自己的PipeLine。
  • 5 對DL的方法應該早早考慮和實驗。

引用參考

如何在 Kaggle 首戰中進入前 10%
在此特別感謝引用博客作者dnc11994學長和小松stuart大叔在比賽期間的問題解答。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容