close

其實,網路上已經有很多教學範例

寫在這邊只是怕自己忘記,做個簡單的記錄 

==================================

Step 1. 先到下面的網址下載SVM的工具箱 

(http://see.xidian.edu.cn/faculty/chzheng/bishe/indexfiles/indexl.htm)

Step 2. 把剛抓好的SVM資料夾放入Matlab內[../matlab71/toolbox/]      (也就是toolbox資料夾內)

Step 3. 設定路徑,開啟matlab->File->Set Path,把剛剛的SVM資料夾加入就可以了。

Step 4. 測試是否成功,回到MATLAB的Command Window

(1) 輸入: which svcoutput

(2) 得到回傳: C:/Program Files/MATLAB71/toolbox/svm/svcoutput.m     

      (每個人路徑會稍稍不同,但後面應該都是toolbox/svm/svcoutput.m)

------ 這樣子前置作業就到一個段落囉 ------

接下來就是測試了

Step 5.  (為了方便閱讀,藍色為需要輸入的Code)

1)在matlab中输入必要的参数:X,Y,ker,C,p1,p2

    我做的測試中取的數據為:

    N = 50;

    n=2*N;
    randn('state',6);
    x1 = randn(2,N)
    y1 = ones(1,N);
    x2 = 5+randn(2,N);
    y2 = -ones(1,N);

    figure;
    plot(x1(1,:),x1(2,:),'bx',x2(1,:),x2(2,:),'k.');
    axis([-3 8 -3 8]);
    title('C-SVC')
    hold on;

    X1 = [x1,x2];

    Y1 = [y1,y2];  

    X=X1';

    Y=Y1';

    其中,X是100*2的矩陣,Y是100*1的矩陣

    C=Inf;

    ker='linear';

    global p1 p2

    p1=3;

    p2=1;

    然後,在matlab中輸入:[nsv alpha bias] = svc(X,Y,ker,C),回傳之後,會顯示:

   

Support Vector Classification
_____________________________
Constructing ...
Optimising ...
Execution time:  1.9 seconds
Status : OPTIMAL_SOLUTION
|w0|^2    : 0.418414
Margin    : 3.091912
Sum alpha : 0.418414
Support Vectors : 3 (3.0%)

nsv =

     3


alpha =

    0.0000
    0.0000
    0.0000
    0.0000
    0.0000

要是在這個步驟碰到[... qp.dll 不是正確的 Win32 應用程式 。] 請拉到最下面

    2)輸入預測函數,可以得到與預想的分類结果進行比較.

      輸入:predictedY = svcoutput(X,Y,X,ker,alpha,bias),回傳後得到:

    

predictedY =

     1
     1
     1
     1
     1
     1
     1
     1
     1

    3)畫圖

      輸入:svcplot(X,Y,ker,alpha,bias),回傳

      (結果的圖請參閱下面的參考資料連結)

補充:

X和Y為數據,m*n:m為樣本數,n為特徵向量數

比如:取20組訓練數據X,10組有故障,10組無故障的,每個訓練數據有13個特徵參數,則m=20,n=13

Y為20*1的矩陣,其中,10組為1,10組為-1.

對於測試數據中,如果取6組測試數據,3組有故障,3組無故障的,則m=6,n=13

Y中,m=6,n=1

==================================

PS: 可能碰到的問題

要是在測試得的時候,發生了... 

Error in ==> svc at 60
[alpha lambda how] = qp(H, c, A, b, vlb, vub, x0, neqcstr);

那是因為在比較高的版本,使用其函數會出現錯誤

這時候只要重新編譯一次就可以了

cd 'C:\Program Files\MATLAB\R2010a\toolbox\svm\Optimiser'             

(每個人路徑一樣會稍稍不同,反正就是Optimiser這個資料夾的路徑)

mex -v qp.c pr_loqo.c

編譯完畢將qp.mexw32重新命名為qp.dll覆蓋過去舊的就可以了。


參考資料來源: http://zyy554221.blog.sohu.com/82115143.html

 

 

文章標籤
Matlab SVM qp.dll svc at 60
全站熱搜
創作者介紹
創作者 DreamS328 的頭像
DreamS328

鍵盤日記

DreamS328 發表在 痞客邦 留言(2) 人氣()