1. 程式人生 > >哈爾濱工業大學計算機學院-模式識別-課程總結-實驗考試

哈爾濱工業大學計算機學院-模式識別-課程總結-實驗考試

我來填坑了,最近好忙,沒有時間寫部落格,今天上午剛剛進行完本課程的實驗考試,在這裡進行簡要彙總。

任務介紹

  • 利用20000條手寫識別資料,提前訓練好分類器,考試時只需要跑預測模型即可。
  • 本質上一個分類問題,類別總數是10。
  • 本任務比較有意思的一點是,老師提供的訓練資料,是利用PCA與LDA降維得到的特徵,而不是MNIST集原始的RGB特徵。因此如果採用深度學習的方法,不適合使用CNN再次抽取特徵。

    我的模型

  • 本實驗主要採用ensemble學習的方式,對多個分類器進行整合,其中包括單模型成績很好的SVM,KNN, MLP,也有單模型效果較弱的隨機森林,GBDT模型。
  • 在進行整合學習之前,對於每一個單模型,均採用十折交叉驗證的方式進行訓練,並且使用Stacking融合策略,將每一折驗證集拼接,構成新一輪的訓練集特徵。交叉驗證得到了10個不同的單模型,用這些模型分別對測試集進行預測,最後對預測的概率取平均,得到了新一輪的測試集特徵。
  • 每個單模型生成的資料特徵維度為10維(因為一共有10個類別),之後將每個單模型對應的特徵向量進行拼接,得到了5x10維的特徵(因為一共有5個單模型),最用使用xgboost分類器進行整合學習,預測每個類別的概率值。

訓練方式

  • 從訓練集中分出一部分資料作為驗證集,用該驗證集指導模型進行收斂,並記錄下來模型達到最優情況時的迭代次數。
  • 之後不劃分驗證集,用全體訓練集進行模型訓練,達到之前記錄的迭代次數時,停止訓練。
  • 之所以採用這種方式,是因為我希望使用更多的資料進行訓練,比較適用於訓練集數目較小的情況。

實驗結果

  • 我線上下的最高得分有0.98325,但是今天進行實驗考試的時候,成績只有0.97885。我後來自己思考了一下,應該在Stacking融合階段,我只是將訓練集按照8:2劃分驗證集,Stacking會導致驗證集洩漏,使得得分虛高,正確的做法應該是8:1:1這種劃分方式,切分出測試集,並以測試集的分數作為模型真實的得分。
  • 不過無所謂了,雖然模型過擬合了,但是最後的成績好像是小組第二。

後記

  • 因為資料的特徵已經是抽取後的特徵,所以不適合用CNN再做分類器,不過可以採用多層前向殘差網路設計模型。這種模型還是很簡單的,調參功底極大影響最終的成績。