<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Kaggle首戰(zhàn)拿金牌總結(jié)!

          共 6013字,需瀏覽 13分鐘

           ·

          2022-06-09 13:45

          今天給大家分享一篇大佬參加Kaggle的經(jīng)驗文章,作者是一名阿里算法工程師,希望對也想玩轉(zhuǎn)Kaggle競賽的朋友有所幫助,以下為原文。

          作者:jiazhuamh | 編輯:對白的算法屋
          https://zhuanlan.zhihu.com/p/60953933

          這篇文章是我對自己第一次參加 kaggle 競賽并獲得金牌(14/4129)的一個總結(jié),談不上太多經(jīng)驗,涉及到的一些比賽規(guī)則和小技巧希望能對剛剛開始打 kaggle 比賽的小伙伴起到一些幫助。


          一. 平臺簡介

          kaggle 是全球首屈一指的數(shù)據(jù)科學、機器學習競賽和分享平臺。很多大公司作為出題方,會將問題和相關數(shù)據(jù)放在平臺上形成一個競賽,所有的 kaggle 用戶都可以參加,獲勝的團隊或個人既能拿到獎金,又能獲得獎牌,對于新手還能收獲實戰(zhàn)經(jīng)驗。如果能在 kaggle 競賽中獲得一個不錯的排名的話,對于自身履歷或面試還是有很大幫助的。但由于競爭激烈,想在榜單上拿到一個較高的排名并不容易。


          1.1 比賽介紹

          kaggle 網(wǎng)站是純英文的,剛開始的時候可能需要花點時間熟悉一下各板塊,之后多數(shù)時間我們會待在 Competition 板塊下,這個板塊包含了所有與這次比賽相關的信息和操作。


          1.2 Overview

          介紹比賽的背景信息、結(jié)果的評估指標、比賽時間線和獎金。

          剛參加一個比賽,需要花點時間了解這個比賽的領域背景,甚至需要查一些資料或閱讀一些文獻,這對后面構建特征和選擇模型很重要。我看到有很多 winners 分享經(jīng)驗說自己構建的大多數(shù)特征都是從商業(yè)(領域)層面思考得到的,所以領域的先驗知識很重要。


          另一需要注意的是比賽的時間線。比賽有一個開始時間,一個組隊截止時間和一個最終提交時間。一般一個比賽會持續(xù)幾個月,最終提交時間就是比賽結(jié)束的標志。組隊截止時間一般是比賽結(jié)束前一周,過了這個時間點就不允許再組隊了。留意好這些時間點,對你把握比賽的進度至關重要,尤其是用業(yè)余時間打比賽的上班族。很多比賽的數(shù)據(jù)量比較大,模型跑下來很耗時,如果到最后半個月才開始發(fā)力,會發(fā)現(xiàn)時間不夠用,很多想法都沒機會嘗試。有大牛分享自己的時間安排是:在比賽剛開始的時候會多花點時間做探索,把 pipeline 搭起來,接下來可以少花點時間,平時有什么想法可以直接測試,最后一個月或半個月再做集中沖刺。


          1.3 Data

          介紹數(shù)據(jù),提供數(shù)據(jù)下載。

          這個模塊需要認值閱讀,它介紹數(shù)據(jù)的產(chǎn)生方式、存儲形式、每個字段的含義等。我們很多時候是通過對數(shù)據(jù)規(guī)模或形式的判斷來決定要不要參加這個比賽。比如,數(shù)據(jù)規(guī)模很大,你沒有內(nèi)存足夠大的服務器可以hold住,可能就沒法打這個比賽;再比如,是圖像數(shù)據(jù),那就得用深度神經(jīng)網(wǎng)絡,如果對這方面不熟或者沒有GPU可用,可能也沒法打這個比賽。對新手而言,該開始可能更傾向于擇一些表格類、數(shù)據(jù)量適中的數(shù)據(jù)集。


          1.4 Kernels

          腳本區(qū)(不知道怎么翻譯,大致是這個意思)。支持 Python 語言的腳本 .py 和 .ipynb,和 R 語言的腳本 .R 和 .ipynb。

          分 public kernel 和 private kernel。public kernel是公開的,大家都可以看到,從這里可以學到非常多的東西,當然你自己也可以通過公開自己的 kernel 分享解決方案或觀點。private kernel是你自己的,別人看不見,你可以分享給組內(nèi)成員。

          為方便大家打比賽,kaggle 提供了一些運算資源。kaggle 用戶的每個 kernel 可以有 16G 的內(nèi)存和 4 核CPU,這足夠打多數(shù)比賽了。另外,最近還提供了 GPU,在新建 kernel 的時候可以選擇開啟 GPU,但當打開 GPU 時,CPU 和內(nèi)存資源會少一些,大家可以根據(jù)情況選擇使用。

          國內(nèi)用戶可能會存在一個延遲或連接不穩(wěn)定的問題,有時候甚至刷不出,這個應該是因為墻的原因,最好自己花錢搞個翻墻的代理。


          1.5 Discussion

          討論區(qū),這個區(qū)大家會分享觀點、討論問題、甚至尋找組隊隊友。

          kaggle 的分享氛圍非常好,在整個比賽進程中大家不斷地分享自己的新發(fā)現(xiàn),很多有用的信息都是在這里獲取的。對于一個新手而言,每天做好 kernel 區(qū)和 discussion區(qū)的跟蹤,有充足的時間嘗試他們的想法,應該可以獲得一個不錯的排名。比賽結(jié)束后,這個更是一個知識的盛宴,winners以及大牛會將自己獲勝用到的方法、小技巧(tricks)全部分享出來。可以說,如果認真打完一場比賽,不論排名如何,對自己都是一個質(zhì)的提升。


          1.6 Leaderboard

          排名區(qū),分 public LB 和 private LB。比賽方會將 test 數(shù)據(jù)集中一部分(比如 30%)拿出來做為 public LB 評分和排名,剩下的部分作為 private LB(也就是最終結(jié)果)的評分和排名。

          你每天都可以提交并查看自己的答案在 public LB 的得分和排名情況,在比賽結(jié)束前需要選擇兩個提交作為自己的最終答案,比賽結(jié)束后,平臺會計算你的答案的 private LB 得分并自動挑選得分高的一個作為你的最終成績。

          在討論區(qū)你會經(jīng)常聽到大家討論 CV score、LB score,指的就是你模型本地交叉驗證的得分和提交后的 public LB 得分。

          需要注意的是,public LB 得分可能會和 private LB 得分差別很大,比賽結(jié)果公布前你可能排名前十,比賽結(jié)果公布后發(fā)現(xiàn)自己跌到上千名了,這就是所謂的 shake up,很嚇人的。這次的 Elo 比賽因為異常值的原因也有很大的 shake up,大家很早就預料到了,好在我們組做了一定的準備,抗住了 shake up,從第 8 名跌倒 14 名,還算是比較幸運的。


          1.7 Rules

          比賽規(guī)則。這個很容易被新手忽略,因為都是講一些條款。很多新手甚至是大牛都在這個上面吃過虧。講兩個需要注意的地方。

          一是提交次數(shù),這里會寫明每天允許的最大提交次數(shù),一般是 5次,也有比賽時 3次的。假如一個比賽持續(xù)時間是三個月,那么總提交次數(shù)差不多就是 5×90=450 次,即便組隊,你們對的總提交次數(shù)也是這個值。假如你們對的三個成員,在比賽最后一個月打算組隊,大家已經(jīng)各自提交了200、100、50 次,是沒法組隊的,必須10天不提交,等提交次數(shù)達到 350(5×70天)。

          很多人為了躲過提交次數(shù)的限制或者“節(jié)省提交次數(shù)”,專門注冊了小號,這是很危險的,這被稱為 multiple accounts,是會被 kaggle 的反作弊系統(tǒng)偵察出來的。在比賽結(jié)束后,會先公布初步排名,然后 kaggle 平臺反作弊系統(tǒng)開始運行,大約兩三天后,凡是被判為作弊的隊伍直接從排名中移除,幾個月的努力就打水漂了!

          另一個是組外私自分享代碼和結(jié)果,這也是明令禁止的。組隊之后隊員之間可以分享,或者通過公開的 kernel或discussion區(qū)分享。同樣,如果被檢測出不同隊伍或個人間有相似的結(jié)果,也會被移除最終榜單。


          1.8 Team

          這里管理你的隊伍??梢韵騽e人發(fā)起組隊邀請,或者接受別人的邀請,當然,也可以時不時給自己隊伍改一個騷氣的名字。我們隊伍最后集齊四人之后,改名為 skynet,是電影《終結(jié)者》里人類創(chuàng)造的一個人工智能防御系統(tǒng),本來是想通過這個霸氣的名字“終結(jié)”其他人的,后來發(fā)現(xiàn)我們還是太年輕太幼稚了,差點被別人終結(jié)。


          二.?挑選比賽

          對于新手而言,我覺可以從一下幾個方面考慮。


          2.1 比賽類型

          借用 Eureka 大牛的觀點,可將 kaggle 平臺上的比賽分成挖掘、圖像、語音和 NLP 四類。其中挖掘類主要面對的是結(jié)構化數(shù)據(jù),也就是表格數(shù)據(jù),包括了各式各樣的預測問題(預測銷量、點擊率、推薦排序等)。主要的共性就是理解數(shù)據(jù),理解問題,從數(shù)據(jù)中找到有用的信息用來預測,這類問題勝負更多的是在特征上。

          對于圖像問題,可能就較少涉及到特征了。圖像問題現(xiàn)在主要用到深度學習的相關技術,基于深度學習做了很多改進或者演繹,已經(jīng)完全不需要在特征層面上去做什么了。

          對于新手而言,挖掘類問題可能更容易上手。


          2.2 數(shù)據(jù)規(guī)模

          新手盡量選擇中等規(guī)模的數(shù)據(jù),這樣數(shù)據(jù)處理和模型訓練的時間更短,方便嘗試盡可能多的方法。新手缺乏經(jīng)驗,可以通過多嘗試來彌補,但如果選擇的數(shù)據(jù)集太大,嘗試的時間成本和計算成本都很大,不管從時間還是精力層面考慮,都是很大的障礙。

          數(shù)據(jù)盡可能有豐富多樣的特征,太完美的數(shù)據(jù)集不要選。這個大家可能會比較費解,完美的數(shù)據(jù)集不是更方便嗎?沒有缺失值,都是數(shù)值特征,多方便。其實不然,越是這樣的數(shù)據(jù)集,可供新手發(fā)揮的余地就越小,你會發(fā)現(xiàn)你唯一能做的就是把數(shù)據(jù)喂給模型,結(jié)果是怎樣就是怎樣了,甚至不知道如何改進、提升。所以,盡量選擇有缺失值、有很多類別特征的數(shù)據(jù)集,這樣你可以借鑒前人經(jīng)驗對這些特征做各種變換、嘗試,時不時能收獲一些小驚喜,甚至最后還能取得一個不錯的成績。


          三. 如何打好一個比賽

          起這樣一個標題有點大言不慚,可能需要一個身經(jīng)百戰(zhàn)的 Grand Master 來回答這個問題。我這里想分享的是作為一個菜鳥,怎么一步步通過學習和嘗試拿到自己的第一個獎牌。我就以這次參加的Elo Merchant Category Recommendation 為例講講自己的經(jīng)歷和感悟。


          3.1 比賽早期加入

          我是在比賽開始后不久就加入的,對于新手而言,早點加入比賽有好處,因為剛開始人不多,大牛更少(他們都是最后一個月強勢加入然后霸占榜首的),這樣你每天的嘗試都是有排名上的收獲,這對自己是一個很大的鼓舞。


          3.2 理解背景、探索數(shù)據(jù)與驗證

          比賽的背景我看了很多遍:Elo是一家信用公司,它提供了信用卡用戶的一些信息和歷史交易記錄,想通過這些數(shù)據(jù)預測用戶忠誠度。根據(jù)它的描述,我通過數(shù)據(jù)逐條驗證,發(fā)現(xiàn)有疑問的地方就會在 discussion區(qū)里提,也會發(fā)布一些公開的 kernel 驗證自己的猜測。其中有兩個比較重要的是 ① target 的預測偏差90%是異常值貢獻的,② hist_trans 和 new_trans 的一些基本信息的驗證。這些都很簡單,但對后面的模型起到了很大的幫助。


          3.3 零模型和基模型

          這算是比賽的套路了,先訓練一個baseline model, 然后在這個基礎上不斷優(yōu)化、提升。我這里要補充的一個點是“零模型”,就是不用模型去做預測,一般就用全零或者全均值去做提交。比如這次的Elo比賽,用全零提交,public LB 得分3.9x,而基模型也只有 3.8x。通過這個對比可以看到模型的效果是很差的,這其實是太多異常值導致的。這些信息對后續(xù)的處理或模型評估都很有用。

          GBDT已成為挖掘類比賽的主流算法,現(xiàn)成的包有xgboost、lightgbm、catboost,lightgbm因為速度快、準確度高脫穎而出。所以這次比賽,lightgbm 仍是主流的工具。

          當然,前期也需要盡可能多地嘗試其他模型,機器學習領域有一個“沒有免費午餐定律”,是說沒有那種模型要比其他模型都好,不同的數(shù)據(jù)集可能適合不同的模型,這個只用通過嘗試才知道。所以,打 kaggle 比賽,其實更像是不斷地做數(shù)據(jù)實驗。我早期也試了libffm、RandomForest、LinearRegression、DeepNN等


          3.4 本地評估體系

          模型評估體系沒建起來,其他任何探索都是盲目的,因為你沒法確定好壞。這個很有講究,你得判斷 public LB 和 private LB 的得分是不是一致的或高度相關的。否則你可能在接下來的幾個月中“一直努力擬合public LB”,結(jié)果卻偏離了 private LB,這就是為何大牛一直告誡我們“Trust your CV”的原因。

          這次Elo比賽,我早起發(fā)現(xiàn)了可以通過手動矯正異常值來提高 public LB 得分,后面通過統(tǒng)計分析與驗證,發(fā)現(xiàn)原來是 public Lb 中異常點比隨機水平高,這是很危險的,后來就采用了保守的做法,比賽結(jié)果公布后證實了這個想法。


          3.5 特征重要性和特征工程

          前期適當做一些調(diào)參,獲取一組相對可以的參數(shù)就可以了,不用太花太多時間調(diào)參,因為它起得作用很有限。用這組參數(shù)和基模型來輸出特征重要性。挑選重要的特征(比如top10)進行分析和構建新特征,然后測試,然后擴大范圍(比如top20)重復以上過程。

          這一步是拉開差距的關鍵,也是花最多精力的地方。在這個過程中需要不斷地關注discussion和kernel區(qū),多看別人時怎么提取特征的,多看別人的 EDA,多嘗試,說不定就有啟發(fā)你的地方。

          對于Elo比賽,前期大家模型輸出的top importance特征都是時間相關的,雖然難以解釋,但方向有了,所以我們也構建了很多時間相關的特征,事實證明,這些特征起到了重要的作用。直到后期,有位Grand Master利用他對數(shù)據(jù)神乎奇跡的轉(zhuǎn)換和驚人的洞察力揭開了忠誠度的商業(yè)含義,時間相關特征為何如此重要才得到了解釋。


          3.6 組隊

          對于新手而言,你的排名就是你組隊的籌碼。我前期發(fā)現(xiàn)異常值矯正后,排名飆升到top20,就有很多人聯(lián)系我組隊了,我在discussion區(qū)與北京一個小伙伴組隊了,沒過多久又邀請了一名在新加坡讀書的小伙伴,之后我們一直維持在top10的水平,一度長時間位于top5,差點迷失自己,直到后期大牛進入把我們擠出了top10,我們開始緊張起來,又吸收了一名韓國的朋友,慢慢回到了top10。

          我們都是第一次打比賽,不過配合得挺好的,建了微信群用英文交流,幾乎無障礙。


          3.7?模型融合

          特征工程和模型融合是打 kaggle 比賽的兩大利器,比賽后期基本就是嘗試各種模型融合了。對于模型融合,大牛的觀點:真正重要的是要有兩三個強模型和很多相關性很小的弱模型,模型多樣性很重要,弱一點也沒關系。幸運的是我們每個人手里都有一個不錯的模型,然后我又批量生成了一些弱模型,融合起來,取得了不錯的效果。


          四. 結(jié)束語

          總結(jié)得很不系統(tǒng),想到哪里就寫到哪里了,里面提到的東西可能大家早就知道了,希望能對新手有一些啟發(fā),更過干貨可以直接上 kaggle 平臺 discussion 區(qū)搜索 solutions,有數(shù)之不盡的大牛分享,干貨滿滿,Happy Kaggling!、

          往期精彩:

          ?講解視頻來了!機器學習 公式推導與代碼實現(xiàn)開錄!

          ?更新!《機器學習:公式推導與代碼實現(xiàn)》1-16章PPT下載

          《機器學習 公式推導與代碼實現(xiàn)》隨書PPT示例

          ?時隔一年!深度學習語義分割理論與代碼實踐指南.pdf第二版來了!

          ?新書首發(fā) | 《機器學習 公式推導與代碼實現(xiàn)》正式出版!

          《機器學習公式推導與代碼實現(xiàn)》將會配套PPT和視頻講解!

          瀏覽 46
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91精品老司机 | 北条麻妃一区二区三区在线播放 | 蜜乳在线网站 | 日韩AV成人 | 影音先锋嫖娼视频 |