當前位置:
首頁 > 最新 > 應賽技巧,教你如何在Kaggle比賽中排在前1%

應賽技巧,教你如何在Kaggle比賽中排在前1%

AiTechYun

編輯:xiaoshan

網友Akira Sosa最近參加了Kaggle比賽,並在medium上分享了他的參賽經驗,以下是全文。

最近,我參加了Kaggle比賽。雖然這是我第一次參賽,但我的成績相當不錯。我想和大家分享我的方法和從比賽中學到的東西。

Statoil/C-CORE Iceberg分類器挑戰是我選擇的題目。在這次比賽中,選手們使用衛星拍攝的雷達圖像來對船隻和冰山進行分類。inc_angle作為附加信息給出。更多的細節可以在比賽的頁面上看到。

Statoil/C-CORE Iceberg分類器挑戰地址:https://www.kaggle.com/c/statoil-iceberg-classifier-challenge/

下面是我的方法和總結。

成功的方法

堆疊,混合。

Bagging。

手動特徵提取。

測試基本模型。

分集(Diversity)。

具有不同架構的多種DNN。

輸入的不同比例。

是否使用擴展。

偽標籤。

成功的方法,但我並沒有使用。

有效的漏洞利用(leak utilization)。

時間主要用在:

學習堆疊和混合。

構建堆疊和混合的源代碼。

訓練多個DNN。

在堆疊的第二階段嘗試一些分類器。

我希望進一步探索的:

探索性數據分析。

概率方法。

一些無監督技術。

我和其他上層人士之間的區別主要是有效漏洞利用。這意味著我應該更仔細地研究數據,但我卻並沒有這樣做。雖然這種技術聽起來有點棘手,但探索性數據分析技術使它成為可能,並且它是我們最重要的技術之一。

因為這是我的第一個挑戰,我花了相當多的時間寫代碼。我在Github上公開了我的代碼。

我的ml項目的初學者工具包。

工具包地址:https://github.com/akirasosa/ml-starter

讓我們來看看更多的細節。


在我參加這次比賽之前,我並不太熟悉這些技術,比如堆疊和混合。幸運的是,我在比賽的前收到了Coursera的郵件。這是《如何贏得數據科學競賽:從頂端開始學習》課程的邀請。這對我有很大的幫助,尤其是Marios第4周的課程,對我非常有幫助。我看了很多遍。

堆疊的最終架構


堆疊的重要意義在於多樣性。我使用的基本模型是簡單的CNN,有4層。通過使用CNN,我做出了6種預測模式。

CNN-4L沒有強化訓練,沒有輔助輸入。

CNN-4L沒有強化訓練,MinMax縮放輔助輸入。

CNN-4L沒有強化訓練,標準縮放輔助輸入。

CNN-4L經過強化訓練,沒有輔助輸入。

CNN-4L經過強化訓練,MinMax縮放輔助輸入。

CNN-4L經過強化訓練,標準縮放輔助輸入。

我這裡使用的輔助輸入來自於下面的內核。

Ensembling GBMs (LB .203~

內核地址:https://www.kaggle.com/cttsai/ensembling-gbms-lb-203

在這個內核中,它提取圖像的統計信息。我用不同的縮放比例將它們輸入到CNN。而且,我從線性縮放圖像中提取了更多的統計數據(原始圖像是Decibel,所以是對數縮放)。

在驗證這些效果之後,我訓練了一些更不同的架構。

CNN-4L

WRN (Wide Residual Net)

VGG16

Inception V3

MobileNets

VGG16 + MobileNets

因此,我可以得到36(= 6 * 6)的模型模式。其中一些模式在沒有數據強化的情況下不能很好地融合,所以我最後從36個模式里選擇了24個。

我意識到在早期找到一個基本模型是很重要的。CNN 4L是這個案例的基礎模型。

基本模型必須在短時間內進行訓練。通過使用基本模型,我可以對幾種實驗進行檢驗,如偽標記、線性縮放圖像、強化、輔助輸入等。


結果表明,bagging對DNN模型的泛化能力是相當有效的。這是其中一個模型Bagging的結果。

Bag的數量和對數損失

雖然我確信更多的bagging會帶來更多的收益,但是我沒有足夠的計算資源。


當我在第一階段成功地獲得了24種預測模式時,我嘗試在第二階段將它們輸入到幾個分類器中。我最後選擇了兩個分類器。

NN-1L (100 bags)

ExtraTreesClassifier (100 bags)

NN-1L在公共/私人排行榜上的對數損失分別為0.1321 / 0.1292。ExtraTreesClassifier的對數損失為0.1316 / 0.1280。由於小數據的原因,公共排行榜看起來不那麼可靠。

我只是用相同的權值0.5和0.5來求均值。該平均提交的最終對數損失為0.1306 / 0.1271。

我嘗試了一些基於梯度樹的分類器,比如XGBoost和LightGBM。他們非常適合訓練數據。雖然他們在計算機視覺上的表現很好,但在公共LB上卻不是很好,我猜可能是用錯誤的方法解讀了inc_angle的漏洞。


現在,讓我們來看看其他頂級的選手的方法。他們的解決方案給我留下了深刻的印象。

第三名的解決方案地址:https://www.kaggle.com/c/statoil-iceberg-classifier-challenge/discussion/48207

正如你所看到的,他開始的步驟和我的差不多。但是他不使用inc_angle來訓練模型。而是選擇了另一種方法,用inc_angle來計算另一種預測。因此,他得到了兩種獨立的概率。

然後,他將它們按照公式混合。

p = p1 * p2 / (p1 * p2 + (1 - p1) * (1 - p2))

第一名的解決方案地址:https://www.kaggle.com/c/statoil-iceberg-classifier-challenge/discussion/48241

這些方法在頂級選手中很常見,他們會仔細查看數據。第一名的解決方案的可視化是非常清晰的。

第一名的解決方案:可視化漏洞

>>為什麼在group2訓練樣本中重新訓練100+模型而不使用group1或兩者?

>因為我們認為這些group2的樣本分布與group1不同。對group2的訓練只會消除group1所導致的「偏差」,group1中的數據全部是冰山,從而提高了group2預測的準確性,即使是在較少圖像(約400次)的低成本中也能提高精度。

第二名的解決方案地址:https://www.kaggle.com/c/statoil-iceberg-classifier-challenge/discussion/48294

他調整CV,以防止他的模型利用inc_angle漏洞。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 ATYUN訂閱號 的精彩文章:

NASA項目利用人工智慧和區塊鏈讓宇宙飛船學會「思考」
谷歌、微軟等合作 提出了一種新的量子光子晶元量子系統結構模擬演算法

TAG:ATYUN訂閱號 |