多分類問題轉換成二分類問題的一個途徑,來自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%