Kaggle比賽心得

2021-02-21 LeadAI OpenLab

正文共5453個字,5張圖,預計閱讀時間14分鐘。

最近參加了兩場Kaggle比賽,收穫頗多,一直想寫篇文章總結一下。接觸Kaggle到現在不到一年,比賽成績一個銀牌(5%)一個銅牌(9%),勉強算入門了,跟大神們還有很大的距離。新學期準備找實習面試,整理一下項目經驗,於是動筆總結總結參加Kaggle比賽的個人心得體會和技巧。

先放一張成績圖和Kaggle個人主頁的連結(https://www.kaggle.com/yiyuanliu)

成績

我參加的這兩場比賽,一個是Zillow Prize:Zillow公司有一個房價預測算法Zestimate,根據房產的特徵、歷史成交數據和Zestimate預測值之間的logerror(這裡有點繞),來預測實際成交價和Zestimate預測值之間的logerror。另一個是TensorFlow Speech Recoginition Challenge:識別長度為1秒的英文語音指令,並且分為12個類,包括10個指令(yes, no, up, down, left, right, on, off, stop, go)以及未知(unknown)和靜默(silence)。

這兩個比賽,剛好屬於Kaggle社區中兩個不同類別。Zillow Prize給定了60個房產的特徵,數據量不是特別大並且有明確的特徵,適合xgboost、lgb這樣的樹模型,對機器的要求不高。而語音識別這個比賽則相反,原始數據是wav文件,實際上相當於對波形圖進行分類,不可能手動選特徵,因此這個比賽適用深度學習的各種模型。並且想要取得好成績,需要使用複雜的模型,CPU就不夠用了,需要一塊不錯的顯卡(我用的是隊友的GTX 1070ti)。

兩場比賽下來,自己總結了一些kaggle比賽的基本流程:

特徵工程

模型選擇

調參

模型融合

特徵工程是Kaggle比賽的重中之重,尤其是對於房價預測這類使用樹模型的比賽。模型大同小異,基本是由GBDT模型演化而來,而且主要用XGBoost、LightGBM等幾種開源框架。所以,模型大家都差不多,特徵就是關鍵了。


每個比賽都有獨特的背景,想要發現甚至是自己創造出重要的特徵,往往需要專業的領域知識,比如Zillow這個比賽要預測美國的房價,原始特徵有臥室數量、面積,稅收等等。想要自己通過原始特徵組合,創造出一個「magic feature」就需要了解美國的房地產業。所以,選擇一個自己熟悉領域的比賽,會比較有優勢。


比賽背景千變萬化,從數據科學的角度,還有許多通用的方法來做特徵工程。這裡列舉一些這個比賽裡用到的方法:

1、基礎預處理:對category類型的數據OneHot編碼;數值類型的數據歸一化(但是這裡用到的大多數模型都是基於決策樹的,所以不需要)

2、缺失值處理:實際數據集中有許多數據是缺失的,考慮列出每個特徵的缺失比例,比例過大的直接捨棄,否則想辦法填充。這個比例沒有什麼定式,捨棄特徵會丟掉有用信息,填充會引入噪聲,具體怎麼操作要看模型實際的表現。填充的話,基礎的是用均值、中位數等填充,更準確的方法是用算法擬合,還可以直接把缺失視為一種特殊的值(這個比賽中的許多模型就是用-1填充)。

對於樹模型來說,數據缺失並不影響樹的生成,所以xgboost會在生成樹的同時,根據training loss自動學會將遇到缺失值時分裂到左子樹還是右子樹。作者Tianqi Chen的原話:

Internally, XGBoost will automatically learn what is the best direction to go when a value is missing. Equivalently, this can be viewed as automatically "learn" what is the best imputation value for missing values based on reduction on training loss.

3、outlier: 由於各種原因,往往有一些樣本的誤差特別大,把這些樣本加入模型會引入很大的噪聲,就像很多打分的比賽會去掉最高分和最低分之後再取平均值。這個比賽中去掉這樣大誤差的outlier能帶來很大的提升。

下圖是所有樣本的logerror值,可以看到絕大部分都在0附近,去掉兩端logerror急劇上升的樣本,能讓模型更穩定。

outsider

3、相關性分析:特徵之間並不是完全獨立的,這時候可以計算correlation coefficient來確定特徵之間的兩兩關係。還可以計算每個特徵和目標值(這裡是logerror)之間的相關性,絕對值越大說明這個特徵的作用越大。

4、模型權重分析:現在大多數模型在訓練完成後都會給出獲取特徵權重的接口,這時的權重是直接反映了一個特徵在這個模型中的作用。這是判斷一個特徵是否有用的重要方法。例如,原始特徵有臥室數量和衛生間數量,我們自己創造了一個特徵房間總數(臥室數量+衛生間數量)。這時可以用這種方法判斷這個新特徵是否有效。

特徵工程在實際應用中非常有挑戰性,還有許多方法,上述只是一些皮毛。Zillow比賽裡我嘗試了許多新特徵,但最終都沒有採用。

而對於語音識別比賽來說,特徵工程就非常有限了。在語音識別領域廣泛使用的特徵是log-mel頻譜和mfcc特徵,沒有必要自己再做特徵工程。而現在火熱的端到端(end-to-end)語音識別優點就是省去特徵提取,直接使用原始波形作為神經網絡的輸入。

Kaggle比賽很重要的一點是,不可能只使用一個單一模型。在許多比賽的第一名公布的方案裡,往往有十幾個甚至幾十個不同的模型。模型融合(ensemble)實在是太重要了,模型融合的方法下文再講,但是在選擇模型的時候就要考慮到如何讓這些模型在融合後效果更好。

不管用什麼方法融合,想要模型融合之後效果好,模型之間要有多樣性。換句話說,模型之間越不相似,模型融合的效果越好。


對於Zillow這樣給定特徵,數據不是圖像音頻的比賽,主要選用樹模型。這類Kaggle比賽,首選肯定是XGBoost和LightGBM。這兩個模型都是由梯度提升樹(GBDT)演化而來的。簡而言之,就是通過梯度提升(Gradient Boost)算法訓練許多決策樹及其對應的權重,然後投票得到最終的結果。詳細的數學證明可以看林軒田老師的臺大機器學習技法課程


xgboost模型在生成決策樹時是level-wise的,即每一層上的所有節點都會一起分裂,通過max_depth來控制樹的高度從而控制模型的擬合程度。lightgbm模型則是leaf-wise的,每一次分裂會從所有葉子節點中找增益最大的節點來分裂,所以主要通過num-leaves來控制模型的擬合程度。


只用這兩個模型顯然不夠,可以調整不同的參數來獲得許多個側重點不同的xgboost(lgb)模型:不同的深度(葉子數)、不同的損失函數等等。另外,在這個比賽裡還用到了CatBoost、sklearn裡的一些模型:隨機森林、ExtraTree等。

對於語音識別這類用深度學習的比賽而言,模型選擇主要在於神經網絡的結構和不同的輸入。首先可以嘗試不同種類的網絡,比如CNN、LSTM。這裡很難說有什麼通用的技巧,在這個比賽中,CNN的效果較好,我用的所有6個模型都是以CNN為基礎的。主要用到的結構是VGGNet和SE-ResNet。

對於VGGNet,實際上並沒有完全按照論文上的模型,只是參考了思路,整個網絡都使用了同樣大小的卷積核尺寸(33)和最大池化尺寸(22)。SE(Sequeeze-and-Excitation)Block是一個挺新的結構,在2017年提出,核心思想是學習特徵權重。主要是通過global average pool以及全連接層來學習feature map的權重,然後作為scale乘到原始feature map上。然後,如下圖所示,將SE Block和ResNet結合。

SE-ResNet

在深度學習中,很多時候難以說清為什麼這個網絡結構效果好,只能根據結果來證明。這次的語音識別比賽中,一個比較有用的trick是:為了增加模型的多樣性,在每個模型卷積操作完成後分別對feature map用全局最大池化和全局平均池化,相當於抓住了不同的特徵,把一個模型變成了兩個。另外,上文提到的三種特徵:原始波形、log-mel頻譜、mfcc特徵分別作為輸入,這樣就形成了六個模型。

architecture

調參這事很複雜,有很多經驗、方法,實際的比賽中往往還是需要一些玄學。調參最常用的方法就是GridSearch和RandomSearch。GridSearch是給定每個待調參數的幾個選擇,然後排列組合出所有可能性(就像網格一樣),做Cross Validation,然後挑選出最好的那組參數組合。RandomSerach很類似,只是不直接給定參數的有限個取值可能,而是給出一個參數分布,從這個分布中隨機採樣一定個數的取值。


調參的方法理解了,那具體調什麼參數呢?Zillow Prize比賽裡,主要用的模型是XGBoost和LightGBM。下面列出一些主要用到的參數,更多的還是直接看文檔。

XGBoost:

LightGBM:

num_leaves: 葉子節點的個數

max_depth:最大深度,控制分裂的深度

learning_rate: 學習率

objective: 損失函數(mse, huber loss, fair loss等)

min_data_in_leaf: 葉子節點必須包含的最少樣本數

feature_fraction: 訓練時使用feature的比例

bagging_fraction: 訓練時使用樣本的比例

調參的時候需要理解這些參數到底是什麼意思,如果過擬合了應該增大還是減小某個參數,這樣才能有目的而不是盲目地調參。當然,想要找到最佳的參數很多時候需要一些經驗和運氣。也不需要極致追求最佳參數,大多數情況下找到一組相對不錯的參數就可以了,往往還有別的方法來提升總成績。

Zillow Prize比賽中這些單個模型的訓練時間是基本上是分鐘級別的,這樣可以有足夠的時間來進行調參。而語音識別這個比賽裡的模型需要在GPU上訓練,一個模型要訓練幾個小時,其實沒有什麼時間來仔細的調參,更多的是靠經驗來估計。

值得一提的是,語音識別比賽中遇到一個問題,所有模型在訓練集和驗證集上表現都很好,但是在提交的測試集上有15%-20%左右的差距。最後發現是測試集和給出的訓練驗證集樣本分布不同:這個比賽是12個類的分類問題,最終的驗證集上基本是均勻分布的,而給出的訓練集和驗證集上,未知(unknown)類樣本明顯多於其他類,而靜默(silence)類則只有6個音頻。最終構建餵給神經網絡的batch時,需要重新對訓練集採樣。

對於unknown和silence這兩個特殊類,他們的比例也可以算是超參數,最後根據Kaggle社區裡大神的分享,確定了10%是最佳的。

模型融合在Kaggle比賽中非常重要,同時也是一個很大的話題。這裡只記錄一下我應用的兩種比較有效的方式。

1、Averaging

Averaging是最簡單粗暴也是最好理解的模型融合方式,而且效果還挺好的。實際上就是加權平均,小學生也會計算。雖然簡單,但是非常有效。如果模型的多樣性足夠,比如有的模型擅長從稅收角度預測房價,有的模型擅長從房間數量來預測房價,把這些模型平均後,取長補短,就能獲得一個更準確泛化能力更強的模型。

每個模型的權重怎麼算?一般是根據單個模型的表現好壞來決定,可以看測試集上的表現,Kaggle比賽裡可以看LB Score,但是也不能完全看Public LB,這樣就過擬合了。Zillow Prize比賽裡我們的Public LB排到了前2%,但是最終所有測試集公布後還是回到了5%。

2、Stacking


Stacking應該是目前各類競賽中最好用的模型融合方法了。看下面這張流傳很廣的圖,其實Stacking並不難理解。

Stacking

Stacking的核心思想是把第一層模型的結果作為第二層模型的特徵,然後訓練第二層模型得到最終結果。以5-fold stacking為例,將訓練集隨機分成5份,分別用其中4份作訓練,來預測剩下的1份,同時也預測所有的測試集。這樣,一個模型訓練了五次,對訓練集的預測拼起來,正好每一個訓練集的樣本都有一個預測值。對測試集的每個樣本,則有5個預測值,求平均值作為測試集的預測值。這樣,訓練集和測試集都有一個預測值,作為第二層模型的特徵。

另外,在語音識別比賽中還學到了一種類似Stacking的巧妙模型融合方法。CNN模型在所有卷積池化操作完成得到feature後,先不做全連接,把各個模型的feature全部拼接在一起,然後作為一個全連接神經網絡的輸入,相當於stacking中的第二層模型。

Kaggle比賽對於關注數據科學的人來說肯定不陌生,參加一次比賽可以在實踐中學習,遠勝於看書看視頻。初學者可以參考這篇文章,用經典的鐵達尼號之災先練練手。很多知識只有實踐過才能真正理解。Kaggle社區非常活躍,有許多大神會分享自己的思路甚至是代碼,一起討論一起學習會有巨大的進步。比賽成績很有用,但更重要的是通過比賽學到東西!

原文連結:https://www.jianshu.com/p/47282e2fc5d7


查閱更為簡潔方便的分類文章以及最新的課程、產品信息,請移步至全新呈現的「LeadAI學院官網」:

www.leadai.org


請關注人工智慧LeadAI公眾號,查看更多專業文章

大家都在看

相關焦點

  • 1.2 Million獎金Kaggle比賽Zillow項目禁止中國人參加第二輪!
    對於從事Data Science相關工作、數據競賽的愛好者來講,Kaggle比賽並不陌生,此前我們也曾撰稿:參加kaggle競賽是怎樣一種體驗?
  • 全面拆解Kaggle經典案例,100%實戰
    對於從事機器學習行業的人來說,Kaggle比賽可能大家都耳熟能詳,它是一個流行的數據科學競賽平臺。1)用Kaggle競賽經驗彌補工作經驗不足的短板很多剛畢業的大學生,甚至是職場上已經工作一兩年的小白,由於在學校沒有把知識學透,相關的工作經驗也屈指可數,自身競爭力不足,導致求職時面臨很大壓力。
  • 秘書節實務比賽回顧
    邵澤麗二等獎李旭媚鄒賢蘭三等獎李宇楠 李穎祺李梓欣優勝獎杜鏝婷 阿依達娜·沙爾山為各位奉上選手們奮筆疾書的樣子~這是一個無聲勝有聲的比賽比賽臨近尾聲,鄭周明老師上臺為我們的選手作了精彩的點評。老師一如既往地用幽默風趣的口吻鼓勵、肯定了工作人員的努力,又以親身經歷告訴了選手們比賽中某些實用的技巧。現場掌聲陣陣、笑聲不斷。最後,鄧海濤老師也發表了對此次秘書實務大賽的看法,提出了實務大賽其實是課堂理論的實踐,有利於檢驗課堂學習成果的觀點。同時,老師也提出了此次大賽稍有不足的地方,教導我們善於總結。一場大賽華麗落幕,但我們卻在此過程中收穫豐富。
  • ​賽鴿比賽全是假的別養算了
    每當自己取得好成績的時候,會把比賽形容的含金量超高,自己沒有取得好成績的時候就會說公棚太假了,協會太黑了,天氣太差了運氣太差了。每當別人得獎了,自己就心裡不舒服,說些酸溜溜的話,什麼作弊啊,安排名次,人家運氣好啊,說白了你身邊的人獲得好成績也是你那個圈子的榮譽,不是嗎?應該放平心態,總結經驗爭取來年取得好成績!
  • 商洛晨光集團晨訓比賽精彩上演
    集團董事長郭峰志、總經理李曉群、副總經理周永康、置業公司總經理陳捍衛、購物中心總經理陳東、商貿廣場總經理李小紅、計劃融資部經理胡光孝、財務核算部經理謝小龍、人力辦公室負責人牛書全等領導出席活動並擔任比賽評委。本次晨訓比賽,總共由集團下屬的五個子公司分別組成的代表隊,共45名隊員參加。
  • 思想咖不打比賽的變強方法
    【咖咖啵嘚啵】昨天推送後,有童鞋興奮地說這作者是我par,咖咖瞬間想到了華辯圈大大黃執中的一篇舊文,不妨給大家共享~春暖花開又是辯手萌動復甦的季節,FLTRP SIDO CDA都在等著大家,去還是不去,相信看完這篇文章你會有答案
  • 2015江門旅遊飯店服務行業職業技能大賽【調酒比賽】
    比賽主辦單位:江門市旅遊局江門市人力資源和社會保障局江門市總工會江門市經濟和信息化局江門市科學技術局承辦單位:江門五邑餐飲行業協會2015江門旅遊飯店服務行業職業技能大賽分別有四項比賽;中餐宴會擺臺西餐宴會擺臺中式鋪床調酒師雞尾酒調製共有100多位選手參賽,調酒師比賽項目共有27人報名參賽.
  • 見證了一場PPT KARAOKE比賽,才知道演講也可以如此胡說八道!
    那麼讓我們一起來看看參加比賽的選手們可能遇到的一些逗比小狀況吧也許你還堅定(執著)地相信著異性戀BUTPPT比賽技術之後看看我們機智的選手們是什麼樣的感受吧這次ppt paraoke比賽對於我來說試一次全新的挑戰,它獨特的規則充分考驗我們的隨機應變能力和語言組織能力,說真的,我參加比賽是特別緊張,手都在顫抖,這可能就是對未知的一種恐懼吧,從側面也是對心理素質的一種考驗,可以說這次比賽十分有意義,也讓我能夠了解自己的能力,十分不錯!
  • 手下生風,美樂家呼叫中心舉辦打字競技比賽
    為活躍辦公室氣氛,同時也能進一步驗證、提高工作效率,增強員工培養專業技能的意識,更好地提高顧客的滿意度,美樂家在上海和南通兩地精心策劃了一場打字競技比賽,希望員工們能在平時忙碌的工作中感受到輕鬆,同時也能比拼一下大家的打字水平。為了增加比賽的趣味性,美樂家的成員們精心策劃了多個競技環節。
  • 泉州國美首屆「財務之星」技能比賽圓滿結束
    公司在2014年下半年提出「動力提速」戰略計劃,對於人員綜合能力和素質提出了更高的要求;為了提升終端團隊人員的綜合能力,打造專業化的個人核心競爭力
  • 寫literature review的一點心得
    以下僅是以本學術菜雞的現象導向型課題悟出的東西,有能力不焦慮寫完research proposal的大神希望與我分享分享心得。一、是什麼?1. 下定義——誰給出了什麼定義,不同人給出的定義有什麼不同。定義由大及小,多角度2. 問題是什麼——收集到的數據表明了什麼,分析趨勢、特點3.
  • 【決賽名單】AIA國際會計師案例分析比賽
    共有20多名同學來自於內地高校,包括:廣東財經大學、浙江財經大學、上海立信會計學院、江西財經大學、上海大學、寧波諾丁漢大學。11級、12級的同學,為了讓你們更方便地回到三水校區參加比賽,AIA國際會計師已經安排了安全舒適的豪華大巴負責接送大家到三水校區參加比賽,近期會有負責人專門聯繫你們,告知相關事宜,敬請保持通訊申通。
  • IN冠軍團隊隊服設計比賽
    各地的IN有機會穿上你的設計參加IN Walk、薪火相傳、大型服務…快把握機會,參加IN冠軍團隊隊服設計比賽!
  • 面試90分答題示範(40)某銀行舉辦業務比賽,領導重視想拿下三連冠,你負責動員,有人不想參加比賽,選一位同事作為突破口進行勸說.
    準備答題:各位考官我選擇3號同事作為溝通的突破口進行勸說,主要理由是,業務比賽,一方面考察的是員工的業務水平,另一方面考察的是團隊的協作。而老同志工作幾十年的經驗是寶貴的財富,他們業務的紮實,並不能夠以學歷來衡量。與此同時,他們的參加,在團隊管理方面,也能夠提供更多的意見,為此次比賽取得佳績,奠定基礎。
  • 指尖上的風採-五家渠國民村鎮銀行開拓者隊業務技能比賽
    為使參賽員工能夠真正賽出成績、賽出風格,行領導高度重視,四位會計主管精心準備,按照總行標準設計、制定了周密的比賽章程和後勤保障計劃。各支行行長全力配合,參賽員工們積極備戰。經過兩天晚上的激烈角逐,產生了這次比賽的團體獎:人民路支行,單項第一名分別為:漢字錄入第一名:李小慧;表式輸入第一名:劉念;百張傳票第一名:孫蓓;手工點鈔第一名:吳曉麗;機器點鈔孫敏、肖靜並列第一。
  • 談天說地講方案 方尺之間論英雄——公司舉辦「王牌投手」比賽
    為提高項目負責人投講標能力,提升公司市場開拓水平,7月11日,由公司技術質量部、工程技術中心、公司工會聯合舉辦的 「王牌投手」項目投標講標比賽在學術報告廳舉行。比賽模擬真實投標現場,在規定的時間內投手用PPT、視頻等講解項目方案的設計理念、亮點特色及公司相關技術優勢等。演講結束後,由公司領導、專業總師組成的評委組就講標內容現場發問,投手當場作答。評委組由公司總經理彭健輝、總工程師黃春暉、副總經理彭武才、副總工程師康習軍、工程技術中心主任曾鑫、建築專業總師胡國華、BIM工作室主任黃丹組成。
  • 青少年生涯規劃發展培訓心得
    我學習後的第一個心得是:認知對一個孩子的成長是至關重要的。我生活在縣級市,對於這裡的孩子他們知識面窄,見識少,缺乏溝通表達能力,老師和家長很少培養孩子這方面能力,至使孩子們上大學後,有的孩子有自卑心裡,心裡素質和抗壓能力差。我家孩子高中是在外地念的,三年後真的和這的孩子有太多的不同。
  • 飛揚新聲 我最閃亮——天朗酒管唐村酒店項目K歌比賽活動
    為活躍員工工作氛圍,豐富員工業餘文化生活,給員工提供一個展示自我才華的平臺,唐村酒店項目秉承天朗酒管公司提出的「簡單快樂在一起」的企業文化理念,特舉辦「飛揚新聲 我最閃亮」 為主題的K歌比賽活動。本次活動是唐村自營板塊合併以來的第一次集體活動,希望通過本次活動,不僅讓員工感受到酒管公司濃厚的企業文化,更給員工一個自我展示的舞臺。
  • 2020年打工心得送達!!!
    今天邀請了四位打工人,聊聊他們2020年的轉崗心得。工作崗位:公司法務換為部門人事換崗心得:學會日程規劃,在可見的              工作秩序中重拾自我。小美被調去非要害部門做了份閒職。工作崗位:隨行秘書轉為宣傳幹事換崗心得:保持閱讀與學習,專業度              總能幫助打開局面。進入新崗位對小超來說是個意外,但她迅速上手並收穫了來自領導、同事的一致認可,部門年終總結還特意提到了她。對此,小超總結說得益於始終保持的閱讀和學習習慣。