SVM輸出分類概率的matlab實現

2021-10-07 11:35:15 字數 3177 閱讀 6470

說明:

1):資料的標籤在最後一列

2):tr:訓練資料,te:測試資料

3):svm的引數說明:

-s svm型別:svm設定型別(預設0)

0 — c-svc; 1 –v-svc; 2 – 一類svm; 3 — e-svr; 4 — v-svr

-t 核函式型別:核函式設定型別(預設2)

0 – 線性核函式:u』v

1 – 多項式核函式:(ru』v + coef0)^degree

2 – rbf(徑向基)核函式:exp(-r|u-v|^2)

3 – sigmoid核函式:tanh(ru』v + coef0)

-d degree:核函式中的degree設定(針對多項式核函式)(預設3)

-g r(gamma):核函式中的gamma函式設定(針對多項式/rbf/sigmoid核函式)(預設1/k,k為總類別數)

-r coef0:核函式中的coef0設定(針對多項式/sigmoid核函式)((預設0)

-c cost:設定c-svc,e -svr和v-svr的引數(損失函式)(預設1)

-n nu:設定v-svc,一類svm和v- svr的引數(預設0.5)

-p p:設定e -svr 中損失函式p的值(預設0.1)

-m cachesize:設定cache記憶體大小,以mb為單位(預設40)

-e eps:設定允許的終止判據(預設0.001)

-h shrinking:是否使用啟發式,0或1(預設1)

-wi weight:設定第幾類的引數c為weight*c (c-svc中的c) (預設1)

-v n: n-fold互動檢驗模式,n為fold的個數,必須大於等於2

4):為什麼三行**就已經出結果了,***還一陣亂操作?因為輸出概率的排序並不是按照標籤排序的,所以又操作了一番

ad:新手上路,變數使用得亂七八糟,也沒有做好分段,注釋

function [testingaccuracy,predicted_label,scores]

=svm1

(tr,te)%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%函式名稱:輸出分類概率的svm svm1.m

%%入口引數:訓練資料 tr (每一行是乙個樣本,標籤在最後一列) 測試資料 te (同tr)

%%出口引數:測試精度 testingaccuracy **標籤 predicted_label 概率 scores

%%函式功能說明:

%%基於libsvm工具包,完成對分類概率的輸出

%%scores的第一列對應著標籤1的概率,第二列對應著標籤2的概率,……最後一列是最大概率對應的標籤

%%by sebastianli, at zzu, december 25th,

2020%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%%

%%%model =

svmtrain(tr

(:,end),tr

(:,1

:end-1)

,'-c 1 -g 0.07 -t 0 -b 1 -q');

% 如果需要檢視計算過程,刪去'-q'

[predicted_label, testingaccuracy,scores]

=svmpredict(te

(:,end),te

(:,1

:end-1)

, model,

'-b 1');

testingaccuracy=

testingaccuracy(1

)./100

;% 以下過程是將分類的概率與標籤對應p=[

];zhonglei=

size

(unique(tr

(:,end)),

1);for i=1:

size

(te,1)

[~,b]=

max(

scores

(i,1

:zhonglei));

p(i,:)

=[predicted_label

(i),b]

;end

s=sortrows

(p,1);

a2=;

ss=unique

(predicted_label)

;ll=

size

(ss,1)

;for j=

1:ll

s1=find(s

(:,1

)==ss(j,1)

);s2=s1(1

);a2(j,1)

=ss(j,1);

a2(j,2)

=s(s2,2)

;end

scores=

;for k=1:

size

(a2,1)

scores(:

,k)=

scores(:

,a2(k,2))

;%注意大小寫

endscores=

[scores,predicted_label]

;end

補充:

當分類標籤是按照1,2,3,4等正常排列時,predicted_label所對應的scores的列,即為標籤和對應標籤的概率。如圖:

當分類標籤並不是按照1,2,3,4正常排列,而是異常排列,例如:2,4,5,6等。標籤和概率對應的關係是列數應該是label_i在unique(lable)的對應索引。如下圖,第一行的標籤為18,在unique(lable)的索引為16,所以最大概率出現在第16列。

SVM的分類原理

svm的主要思想可以概括為兩點 1 它是針對線性可分情況進行分析,對於線性不可分的情況,通過使用非線性對映演算法將低維輸入空間線性不可分的樣本轉化為高維特徵空間使其線性可分,從而使得高維特徵空間採用線性演算法對樣本的非線性特徵進行線性分析成為可能 2 它基於結構風險最小化理論之上在特徵空間中建構最優...

SVM的分類原理

svm的主要思想可以概括為兩點 1 它是針對線性可分情況進行分析,對於線性不可分的情況,通過使用非線性對映演算法將低維輸入空間線性不可分的樣本轉化為高維特徵空間使其線性可分,從而使得高維特徵空間採用線性演算法對樣本的非線性特徵進行線性分析成為可能 2 它基於結構風險最小化理論之上在特徵空間中建構最優...

SVM核函式的分類

下列不是svm核函式的是 這道題的答案是logistic核函式。不要把這裡的sigmoid和logistic混淆了,為什麼?看下面解釋 支援向量機是建立在統計學習理論基礎之上的新一代機器學習演算法,支援向量機的優勢主要體現在解決線性不可分問題,它通過引入核函式,巧妙地解決了在高維空間中的內積運算,從...