天天看點

sklearn.svm.SVC的方法decision_function_shape:ovr 或者 ovo

原文位址:http://blog.csdn.net/yiqingyang2012/article/details/53437076

  SVM算法最初是為二值分類問題設計的,當處理多類問題時,就需要構造合适的多類分類器。

  目前,構造SVM多類分類器的方法主要有兩類:一類是直接法,直接在目标函數上進行修改,将多個分類面的參數求解合并到一個最優化問題中,通過求解該最優化問題“一次性”實作多類分類。這種方法看似簡單,但其計算複雜度比較高,實作起來比較困難,隻适合用于小型問題中;另一類是間接法,主要是通過組合多個二分類器來實作多分類器的構造,常見的方法有one-against-one和one-against-all兩種。

  a.一對多法(one-versus-rest,簡稱1-v-r SVMs, OVR SVMs)。訓練時依次把某個類别的樣本歸為一類,其他剩餘的樣本歸為另一類,這樣k個類别的樣本就構造出了k個SVM。分類時将未知樣本分類為具有最大分類函數值的那類。

  假如我有四類要劃分(也就是4個Label),它們是A、B、C、D。于是我在抽取訓練集的時候,分别抽取A所對應的向量作為正集,B,C,D所對應的向量作為負集;B所對應的向量作為正集,A,C,D所對應的向量作為負集;C所對應的向量作為正集, A,B,D所對應的向量作為負集;D所對應的向量作為正集,A,B,C所對應的向量作為負集,這四個訓練集分别進行訓練,然後的得到四個訓練結果檔案,在測試的時候,把對應的測試向量分别利用這四個訓練結果檔案進行測試,最後每個測試都有一個結果f1(x),f2(x),f3(x),f4(x).于是最終的結果便是這四個值中最大的一個。

  p.s.: 這種方法有種缺陷,因為訓練集是1:M,這種情況下存在biased.因而不是很實用.

  b.一對一法(one-versus-one,簡稱1-v-1 SVMs, OVO SVMs, pairwise)。其做法是在任意兩類樣本之間設計一個SVM,是以k個類别的樣本就需要設計k(k-1)/2個SVM。當對一個未知樣本進行分類時,最後得票最多的類别即為該未知樣本的類别。Libsvm中的多類分類就是根據這個方法實作的。

  投票是這樣進行的.

A=B=C=D=0;

(A, B)-classifier 如果是A win,則A=A+1;otherwise,B=B+1;

(A,C)-classifer 如果是A win,則A=A+1;otherwise, C=C+1;

(C,D)-classifer 如果是A win,則C=C+1;otherwise,D=D+1;

The decision is the Max(A,B,C,D)

  p.s.: 這種方法雖然好,但是當類别很多的時候,model的個數是n*(n-1)/2,代價還是相當大的.

  c.層次支援向量機(H-SVMs)。層次分類法首先将所有類别分成兩個子類,再将子類進一步劃分成兩個次級子類,如此循環,直到得到一個單獨的類别為止。

  d.其他多類分類方法。除了以上幾種方法外,還有有向無環圖SVM(Directed Acyclic Graph SVMs,簡稱DAG-SVMs)和對類别進行二進制編碼的糾錯編碼SVMs。

繼續閱讀