unrolling mult-classes to two-classes

多分類問題轉換成二分類問題的一個途徑,來自opencv sample on boost


N分類問題中,樣本總數爲T,每個樣本維度爲M, 一行一個樣本,則

樣本數組sample = Mat(T,M)

類別數組cls = Mat(T,1) ,

以下的代碼進行unrolling


new_sample = Mat(T*N,M+1)

new_cls = Mat(T*N,1)

for (int t = 0; t < T; t++)
{ 

     for (int n = 0; n < N; n++)
    {
        new_sample(t * N + n,0:M) = sample(t,0:M); //前M維直接從原始樣本複製
        new_sample(t * N + n, M + 1) = n; //最後一個新增維度是當前類別數目
        new_cls(t * N + n,0) = cls(t,0) == n; //0 or 1
    }
    

}

對於boost,訓練時需要指定新增的一個維度是CV_VAR_CATEGORICAL



預測階段,對於每一個樣本,要嘗試N次,每次用一個類別擴充該樣本特徵,然後用訓練出來的分類器預測這個擴充後的樣本是0 or 1,達到分類的目的


但是在char ocr測試中,這種方法的recalling比bpnet低了接近30%

發佈了256 篇原創文章 · 獲贊 10 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章