svm的多類分類問題

         最近在看SVM用於說話人識別,需要對訓練語音進行正負類區分,從而訓練合適的分類面。現在把自己看的東西大致總結一下,如果有錯的,或者不明白的,請指出,謝謝!

         傳統的SVM使用與說話人確認,因爲SVM是一個二分類,而確認也是一個二分問題,“接受”或“拒絕”。將目標說話人作爲正類,選取合適的冒認者集合作爲負類,從而來訓練合適的分類面。

         而對於辨認問題,一般來說,多類分類問題可以分爲兩種情況:

1、“一對一”的方式

      分別選取兩個不同類別構成一個SVM子分類器,這樣對於K個類別來說,共有(k*(k-1)/2)個分類器。在構造i和j的分類器時,可以將類別i的訓練樣本置爲1,j的樣本置爲-1來進行訓練。

     在進行測試的時候,使用最多的就是Friedman提出的投票策略:將測試數據x對所有的分類器分別進行測試,若由

得到x屬於第i類,則第i類加1,屬於j類,則第j類投票加1.累計各類別的得分,選擇得分最高者所對應的類別爲測試數據的類別。

      例如說:我們有6個說話人的數據,分別作爲6類,我們分別做(類1、類2),(類1、類3),。。。(類5、類6)總共15個SVM分類面,現在有一個測試說話人X,將其分別送入15個SVM分類面,假如說,在(類1、類2)屬於類1,在(類1、類3)中屬於類1,在(類1,類4)中屬於類一,在(類1、類5)中屬於類1,在(類1、類6)中屬於類1,那麼它屬於類1的投票數是5,如果屬於其他類別數不大於5時,那麼X就屬於類1.

     這種方式的優點是:增加語音的情況下,我們不需要重新訓練所有的SVM,只需要重新訓練和增加語音樣本相關的分類器。在訓練單個模型時,相對速度較快。

                        缺點是:所需構造和測試的二值分類器的數量關於k成二次函數增長,總訓練時間和測試時間相對較慢。

提醒:用一對一的方式訓練SVM時,如果每個類別只有一句語音時,在訓練SVM分類面時不要進行標準化。

       從“一對一”的方式出發,出現了有向無環圖(Directed Acyclic Graph)的分類方法,訓練過程如“一對一”類似,但測試具體過程如下圖:

這種方法減小了測試的數據量,提高了速度。

2、“一對多"的方式

        最早實現SVM對多類別進行分類就是此種方法,思想是將多個類別轉化成兩類來實現。在訓練時,對於k個類別的樣本數據,需要訓練k個SVM二類分類器,在構造第i個SVM子分類的樣本數據標記爲正類,其他不屬於i類別的樣本數據標記爲負類。測試時,對測試數據分別計算各判別函數值,如果只有一個分類器輸出正值,那麼可直接判決結果爲相應分類器編號,否則選取判別函數值最大所對應的類別爲測試數據的類別。

優點:訓練k個分類器,個數較少,其分類速度相對較快。

缺點:每個分類器的訓練都是將全部的樣本作爲訓練樣本,這樣在求解二次規劃問題時,訓練速度會隨着訓練樣本的數量的增加而急劇減慢;同時由於負類樣本的數據要遠遠大於正類樣本的數據,從而出現了樣本不對稱的情況,且這種情況隨着訓練數據的增加而趨向嚴重。解決不對稱的問題可以引入不同的懲罰因子,對樣本點來說較少的正類採用較大的懲罰因子C。還有就是當有新的類別加進來時,需要對所有的模型進行重新訓練。

     由於訓練數據的不平衡性,在實際情況下,我們應該合理的選擇冒認者模型,選擇出距離分類面較近的 少些樣本來進行訓練。

     從冒認話者集中選取冒認者的方法:一是基於語音的方法,將冒認者話集的冒認語音與該目標說話人的GMM模型進行匹配,性中找到s個具有較大似然度評分的話者語音作爲該目標說話人的冒認話者;二是將目標說話人與冒認話者分別訓練GMM模型,然後隨機選取K條次序固定的語音作爲測試語音,然後將這K條測試語音通過目標模型的GMM和所有的冒認話者的GMM模型,得到的評分可以組成多個K維矢量,通過計算矢量間的歐氏距離來獲得最優的冒認話者。

        在“一對多”的方式中,也可以爲訓練語音尋找一個公共的冒認話者集,而這個冒認話者集儘可能包含多種環境情況。這樣訓練得到的分類面相當於某個目標說話人與一羣固定的冒認者之間的區分情況。

        從“一對多”的方法又衍生出基於決策樹的分類:

        首先將所有類別分爲兩個類別,再將子類進一步劃分爲兩個次級子類,如此循環下去,直到所有的節點都只包含一個單獨的類別爲止,此節點也是二叉樹樹種的葉子。該分類將原有的分類問題同樣分解成了一系列的兩類分類問題,其中兩個子類間的分類函數採用SVM。如下圖表示:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章