1. 程式人生 > >圖片分類比賽總結

圖片分類比賽總結

0.拿到資料集後別急著建模型,先分析資料視覺化資料。

       在大多數機器學習任務中,我們首先要做的(也是最重要的任務)就是在使用演算法之前分析資料集。這一步驟之所以重要,是因為它能夠讓我們對資料集的複雜度有深入的瞭解,這最終將有助於演算法的設計。

       因此,我決定使用 t 分佈隨機鄰域嵌入(https://lvdmaaten.github.io/tsne/)視覺化技術來檢視圖片的分佈。t 分佈隨機鄰域嵌入(t—SNE)是一種特別適合對高維資料集進行視覺化的降維技術。這種技術可以通過「Barnes-Hut」近似演算法來實現,這使得它能夠被應用於大型的真實資料集。[14]

1.訓練集和測試集一定要打亂!!吃過大苦頭

2.先訓練出最優的單模型,再進行模型整合。別一開始就用很多個爛模型整合,浪費時間。

3.微調模型優先於重新訓練,因為你從一個預訓練模型微調迭代無數多次後(最爛情況)就相當於重新訓練。

4.先不用資料增強得到一個基準模型。再用資料增強。

       一旦準備好了對比基準,我們就需要開始對其進行改進。首先,我們可以進行資料增強處理,增加資料集中的影象數。

沒有資料,就沒有機器學習!

       現實生活中的資料集往往都是不平衡的,而模型在樣本數量較少的類別上的效能並不太好。所以,將一個具有少數樣本的類誤分類為一個樣本數量較多的類的成本通常要比將數量較多的類誤分類高得多。

由此,我們嘗試使用兩種方法來平衡資料:

       針對不平衡學習的自適應樣本合成方法(ADASYN):ADASYN 為樣本較少的類生成合成的資料,這種方法會生成更多較難學習的資料集樣本。ADASYN 的核心思想是,根據學習的困難程度,對樣本數少的類別例項使用加權分佈。ADASYN 通過兩種方法提高了對資料分佈的學習效果:(1)減少類別的不平衡所帶來的偏差。(2)自適應地將分類的決策邊界轉換為更困難的樣本。

       少數類過取樣技術(SMOTE):SMOTE 包括對少數類的過取樣和多數類的欠取樣,從而得到最佳抽樣結果。我們對少數(異常)類進行過取樣並對多數(正常)類進行欠取樣的做法可以得到比僅僅對多數類進行欠取樣更好的分類效能(在 ROC 空間中)。

5.結果視覺化

在最後一步,我們將對結果進行視覺化,看看模型對哪個類別的預測結果最好、對哪個類別的預測結果最差,並且我們還可以採取必要的措施進一步改進結果。

構造一個混淆矩陣是理解模型結果的好方法。

在機器學習領域,特別是統計分類問題中,混淆矩陣(也稱為誤差矩陣)是一個特定的表格,它能夠將演算法的效能視覺化,這種演算法通常是監督學習演算法,在非監督學習領域它通常被稱為匹配矩陣。矩陣中的每一行代表預測類別中的一個例項,而每一列則代表真實類別中的一個例項(反之亦然)。這個矩陣之所以被稱為「混淆矩陣」,是因為它能夠讓人很容易地看到系統是否混淆了兩個類(即通常將一個類錯誤標記為另一個類)。

混淆矩陣中真正的類別和預測出的類別

從混淆矩陣中我們可以看到所有的模型預測類別和真實類別不符的情況,我們可以採取措施去改進模型。例如,可以做更多的資料增強工作,試著讓模型更好地學習到分類規則。

最後,我們將驗證集與訓練資料合併,並通過已經得到的超引數,對模型進行最後一次訓練,在最終提交結果之前對測試資料集進行評估。

6.提升排名的若干技巧

一旦我們訓練好了模型,我們就用這個模型預測那些測試圖片的類別了,論壇中predict.py中的程式碼就是預測魚類的並且生成提交檔案。這裡我們給大家分享一下在機器學習和影象識別類競賽中常見的兩個技巧,簡單而有效。它們的思想都是基於平均和投票思想。其背後的原理用一句話總結就是:群眾的眼睛是雪亮的!

技巧1:同一個模型,平均多個測試樣例

這個技巧指的是,當我們訓練好某個模型後,對於某張測試圖片,我們可以使用類似資料擴增的技巧生成與改張圖片相類似的多張圖片,並把這些圖片送進我們訓練好的網路中去預測,我們取那些投票數最高的類別為最終的結果。Github倉庫中的predict_average_augmentation.py實現的就是這個想法,其效果也非常明顯。

技巧2:交叉驗證訓練多個模型

還記得我們之前說到要把三千多張圖片分為訓練集和驗證集嗎?這種劃分其實有很多種。一種常見的劃分是打亂圖片的順序,把所有的圖片平均分為K份,那麼我們就可以有K種<訓練集,驗證集>的組合,即每次取1份作為驗證集,剩餘的K-1份作為訓練集。因此,我們總共可以訓練K個模型,那麼對於每張測試圖片,我們就可以把它送入K個模型中去預測,最後選投票數最高的類別作為預測的最終結果。我們把這種方式成為“K折交叉驗證”(K-Fold Cross-Validation)。圖9表示的就是一種5折交叉驗證的資料劃分方式。

0?wx_fmt=jpeg

圖9. 五折交叉驗證

當然,技巧1和2也可以聯合在一起使用。假設我們做了5折交叉驗證,並且對於每一張測試圖片都用5次資料擴增,那麼不難計算,每一張測試圖片的投票數目就是25個。採用這種方式,我們的排名可以更進一步。