iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 30
0

由各個課程講師提供參賽各階段的心法

1. 選擇比賽, 瞭解 Kaggle 的類別 --- 作者自己整理

2. Before you enter a competition --- Alexander Guschin

3. Data loading --- Dmitry Altukhov

4. Performance evaluation --- Dmitry Altukhov

5. Initial pipeline --- Mikhail Trofimov

6. Best Practices from Software Development --- Mikhail Trofimov

7. Code organization --- Dmitry Ulyanov


1. 選擇想要參加的比賽, 先瞭解 Kaggle 的類別

Kaggle Blog 會有得勝者及一些大神的專訪, 可以參考有興趣類別的成功經驗.

類別 說明
Featured 來自企業界的題目, 像目前有 Lyft
Research 來自學術機構或者是較為學術面研究的問題
Recruitment reward 是面試機會, 或就業博覽會與合作企業的直達應徵機會
Getting started 提供給剛起步的, 像 titanic 資料集
Masters 顧名思義, 大師級競賽, 採邀請制, 沒開放報名
Playground 公開資料集或生活相關有趣的
Analytics 深入分析的較高層次題目, 例如洛杉磯就業, NFL球員安全

2. Before you enter a competition

  1. Importance. 整理並排序參數, 從最重要到最無用的, 會跟 data structure, target, metric 有關.
  2. Feasibility. 評估最容易調的參數到那種要調到天荒地老的
  3. Understanding. 評估從自己最了解到完全不瞭解的參數, 因為不管接下來要增加特徵或改變占比比率, 或 CNN 的階層數量, 理解並掌握參數的狀況是很有用的 (changing one parameter can affect the whole pipeline)

3. Data loading

  • 基本格式處理, labeling, coding, category recovery, 然後將 csv/txt files 轉成 hdf5/npy 以加速上傳/下載時間 (hdf5 for pandas, npy for non-bit arrays).
  • 因為 Pandas 預設 64-bit 陣列儲存, 其實不必要, 可以轉成 32 位元以節省記憶體資源
  • Large datasets can be processed in chunks - 數據集大的可以切塊, Pandas 可以支援將資料即時連接起來, 不然跑一次大筆完整資料就又要等到天荒地老.

4. Performance evaluation

  • 不一定每次都要用到 cross validation, 有時基本作法切成 train/test 就足夠
  • Start with fastest models - 這邊是推薦用 LightGBM 去找到好特徵跟快速評估特徵的表現, early stoping 是在這時 (初期)可以採用的, 只有在特徵工程後才會調整模, 用 stacking, NN..等
    https://ithelp.ithome.com.tw/upload/images/20190929/20108719M8UHEkX5IE.png
    截圖自 Coursera
  • Fast and dirty always better - 意思是專注在最重要的, 就是探索資料本身, 用 EDA 去挖掘不同的特徵, 找出產業或該項專業的 domain-specific knowledge, 語法在此刻是次重要事項. EDA 很重要 !!! 如果一直處於很擔心電腦資源跑不動, 就去租伺服器吧

5. Initial pipeline

  • 從簡單甚至原始的解決方案開始
  • 建構自己的 pipeline, 重點不是建模而是解決方案的整體架構設計, 包括初期資料處理, 預測結果的檔案格式寄送, 在競賽資料的 kernel 或 organizer 提供的, 都可以找到 baseline 解決方案
  • “From simple to complex” : 從簡單到複雜, 寧願從 Random Forest 開始, 而不是 Gradient Boosted Decision Trees, 再一步步到比較複雜的方法.

6. Best Practices from Software Development

  • Use good variable names : 使用好的變數名字, 不然到最後自己也搞混
  • Keep your research reproducible / 保持所有東西都可重製. 包括 : Fix random seed ; 寫下所有特徵生成的過程 ; 使用版控 (VCS, for example, git)
  • Reuse code / 使用同樣的程式碼, 特別在 train/test 要使用相同程式碼, 前後才能一致, 因此建議另外存起來.
  • Read papers : (1) 可以技術方面的專業知識, 例如 how to optimize AUC; (2) 可以了解問題本質, 尤其在幫助找到特徵, 例如微軟的手機競賽, 就是讀了手機相關 papaer 才可以增加跟找到好特徵.

7. Code organization:

  • keeping it clean
  • test/val
  • macros
  • custom library

keeping it clean

  • 結果要能複製, 程式碼就要整齊收好, 才不會辛苦半天居然複製不出已經完成的, 重新來很磨人. 盡量不要覆蓋, 而是當要修改時複製到新的筆記本再改
  • 不要把新, 舊所有的 code 擠在同一個 notebook, 參數不變的情況下容易有 bug
  • 每個新的 submission 就開新的 notebook (use git)

test/val

  • 競賽提供的 training 跟 test 的 dataset, 存在本機檔案與當初競賽下載來的格式保持一致
train = pd.read_csv('data/train.csv')
test = pd.read_csv(/data/test.csv)
from sklearn.model_selection import train_test_split

# train set into new train and validation
train_train, train_val = train_test_split(train, random_state=660)

# save to disk
train_train.to_csv('data/val/train.csv')
train_val.to_csv('data/val/val.csv')
  • 在 notebook 最上面, 置頂放的是 train/test 的路徑, 方便在轉換成原競賽檔案train/test 後 submission 隨時取用
train_path = 'data/val/train.csv'
test_path = 'data/val/val.csv'
  • To retrain models on the whole dataset and get predictions for test set just change. 改個路徑就可用了
train_path = 'data/train.csv'
test_path = 'data/test.csv'

use macros for a frequent code : 狄哥覺得每次 import numpy..蠻麻煩的, 只要幾個簡單的符號敲打出 macro 名, 就可以使用 macro, 很便利

https://ithelp.ithome.com.tw/upload/images/20190929/20108719bO9QTfdYtb.png
https://ithelp.ithome.com.tw/upload/images/20190929/20108719twfzIJXgNy.png


use a library with frequent operations implemented – Out-of-fold predictions : 自建常用的函式庫, 建模的 training code, 可以節省找尋跟呼叫的時間, 請參考下列例子.

– Averaging
– I can specify a classifier by it’s name

param = {
   'C' : 1.2,
}
res = trylib(train_2lv, y_train, 
             'lsvc', param,
             one = False, skf_seed = 660, skf = 4,
             test_mode='whole', x_test=test_2lv.res

狄哥 (Dmitry Ulyanov) 的 pipeline 分享 (一字不漏)

步驟 說明
Read forums and examine kernels first There are always discussions happening!
Start with EDA and a baseline (1) To make sure the data is loaded correctly; (2) To check if validation is stable
I add features in bulks (1) At start I create all the features I can make up; (2) I evaluate many features at once (not “add one and evaluate”)
Hyperparameters optimization (1) First find the parameters to overfit train dataset; (2) And then try to trim model

補充資料及連結

Far0n's framework for Kaggle competitions "kaggletils"
https://github.com/Far0n/kaggletils

28 Jupyter Notebook tips, tricks and shortcuts
https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/


上一篇
[Day 29] ensembling - stacknet 及瑪博(Marios Michailidis)大神級秘訣分享
系列文
跟top kaggler學習如何贏得資料分析競賽 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言