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

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

任務介紹

  • 利用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這種劃分方式,切分出測試集,並以測試集的分數做爲模型真實的得分。若是隻是在xgboost階段劃分驗證集,有兩個問題:
    1. 此驗證集在前面一層stacking中參與了訓練過程,容易形成過擬合。
    2. 驗證集應該和測試集的處理過程保持一致。而測試集是十折模型相加取平均的,驗證集只是某一折模型的預測結果,不公平,沒有指導價值。
  • 不過無所謂了,雖然模型過擬合了,可是最後的成績好像是小組第二。

後記

  • 由於數據的特徵已是抽取後的特徵,因此不適合用CNN再作分類器,不過能夠採用多層前向殘差網絡設計模型。這種模型仍是很簡單的,調參功底極大影響最終的成績。
相關文章
相關標籤/搜索