其實,網路上已經有很多教學範例
寫在這邊只是怕自己忘記,做個簡單的記錄 
==================================
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
留言列表