(原)Matlab的svmtrain和svmclassify


轉載請注明出處:

http://www.cnblogs.com/darkknightzh/p/5554551.html

參考網址:

http://www.cnblogs.com/zhangchaoyang/articles/2222048.html

 

代碼如下:

clc
clear all
close all

data = load('data.txt');
% 為了svmtrain能使用'showplot',true,此處使用數據的前2維。
data = data(:, 1:2); 
% 由於svmtrain只能處理二分類問題,因而此處使用前100個數據。
data = data(1:100, :);
label = [ones(50, 1); zeros(50, 1)];

trainData = data(1:40, :);                  % 每組前40個用於訓練
trainData = [trainData; data(51:90, :)];    % 每組前40個用於訓練
testData = data(41:50, :);                  % 每組后10個用於測試
testData = [testData; data(91:100, :)];     % 每組后10個用於測試

trainLabel = label(1:40, :);                % 每組前40個用於訓練
trainLabel = [trainLabel; label(51:90, :)]; % 每組前40個用於訓練
testLabel = label(41:50, :);                % 每組后10個用於測試
testLabel = [testLabel; label(91:100, :)];  % 每組后10個用於測試

% 將距離和類別傳入svm中,trainLabel為標簽,即類別,trainData為特征
svmModel = svmtrain(trainData, trainLabel,'kernel_function','linear','showplot',true);
predict_label = svmclassify(svmModel,testData,'showplot',true); 
fprintf('使用svmclassify,正確率:%f\n' ,sum(predict_label==testLabel)/size(testLabel,1));

%% 以下兩種方式均使用linear核,其他的核還不清楚怎么算
testScale = [];
for c = 1:size(testData, 2)
    testScale = [testScale, svmModel.ScaleData.scaleFactor(c) * (testData(:,c) +  svmModel.ScaleData.shift(c))];
end

% 方式1:使用矩陣形式
predictValMat = (svmModel.SupportVectors * testScale')' * svmModel.Alpha + svmModel.Bias; % 測試樣本個數*1的列矩陣
predictValMat1 = ones(size(predictValMat));
predictValMat1(predictValMat>0) = 0;
fprintf('使用矩陣形式,正確率:%f\n' ,sum(predictValMat1==testLabel)/size(testLabel,1));

% 方式2:一個一個計算
[m,n]=size(testScale);
predict_label2=zeros(m,1); 
for k = 1:size(testScale, 1)
    % svmModel.SupportVectors為 支持向量個數*特征維數 的矩陣
    % testScale(k, :)為 1*特征維數 的行向量。
    % svmModel.SupportVectors * testScale(k, :)'為 支持向量個數*1 的列矩陣
    % (svmModel.SupportVectors * testScale(k, :)')' * svmModel.Alpha 即為 sum(w*x)
    % predictVal為 sum(w*x)+b
    predictVal = (svmModel.SupportVectors * testScale(k, :)')' * svmModel.Alpha + svmModel.Bias;
    if predictVal>0
       predict_label2(k) = 0;
    else
       predict_label2(k) = 1;
    end
end
fprintf('一個一個計算,正確率:%f\n' ,sum(predict_label2==testLabel)/size(testLabel,1));

分類結果:

 

svmtrain后的結果(包含了svmclassify的結果),其中藍色圈出來的點為分錯的點。

實際上,如果4個特征都使用的話,對上面的程序,正確率為100%。

ps:測試數據為參考網址中給出的數據。

鷲尾花數據集共分為3類花(前50個樣本為一類,中間50個樣本為一類,后50個樣本為一類。由於matlab的svmtrain只能處理二分類問題,因而程序中使用了前100個數據。其中,每組前40個用作訓練,后10個用作測試。因而,訓練樣本80個,測試樣本20個。除此之外,為了在調用svmtrain時能顯示分類結果,該函數參數'showplot'設置為true。

 

data.txt如下:

5.1        3.5        1.4        0.2
4.9        3.0        1.4        0.2
4.7        3.2        1.3        0.2
4.6        3.1        1.5        0.2
5.0        3.6        1.4        0.2
5.4        3.9        1.7        0.4
4.6        3.4        1.4        0.3
5.0        3.4        1.5        0.2
4.4        2.9        1.4        0.2
4.9        3.1        1.5        0.1
5.4        3.7        1.5        0.2
4.8        3.4        1.6        0.2
4.8        3.0        1.4        0.1
4.3        3.0        1.1        0.1
5.8        4.0        1.2        0.2
5.7        4.4        1.5        0.4
5.4        3.9        1.3        0.4
5.1        3.5        1.4        0.3
5.7        3.8        1.7        0.3
5.1        3.8        1.5        0.3
5.4        3.4        1.7        0.2
5.1        3.7        1.5        0.4
4.6        3.6        1.0        0.2
5.1        3.3        1.7        0.5
4.8        3.4        1.9        0.2
5.0        3.0        1.6        0.2
5.0        3.4        1.6        0.4
5.2        3.5        1.5        0.2
5.2        3.4        1.4        0.2
4.7        3.2        1.6        0.2
4.8        3.1        1.6        0.2
5.4        3.4        1.5        0.4
5.2        4.1        1.5        0.1
5.5        4.2        1.4        0.2
4.9        3.1        1.5        0.1
5.0        3.2        1.2        0.2
5.5        3.5        1.3        0.2
4.9        3.1        1.5        0.1
4.4        3.0        1.3        0.2
5.1        3.4        1.5        0.2
5.0        3.5        1.3        0.3
4.5        2.3        1.3        0.3
4.4        3.2        1.3        0.2
5.0        3.5        1.6        0.6
5.1        3.8        1.9        0.4
4.8        3.0        1.4        0.3
5.1        3.8        1.6        0.2
4.6        3.2        1.4        0.2
5.3        3.7        1.5        0.2
5.0        3.3        1.4        0.2
7.0        3.2        4.7        1.4
6.4        3.2        4.5        1.5
6.9        3.1        4.9        1.5
5.5        2.3        4.0        1.3
6.5        2.8        4.6        1.5
5.7        2.8        4.5        1.3
6.3        3.3        4.7        1.6
4.9        2.4        3.3        1.0
6.6        2.9        4.6        1.3
5.2        2.7        3.9        1.4
5.0        2.0        3.5        1.0
5.9        3.0        4.2        1.5
6.0        2.2        4.0        1.0
6.1        2.9        4.7        1.4
5.6        2.9        3.6        1.3
6.7        3.1        4.4        1.4
5.6        3.0        4.5        1.5
5.8        2.7        4.1        1.0
6.2        2.2        4.5        1.5
5.6        2.5        3.9        1.1
5.9        3.2        4.8        1.8
6.1        2.8        4.0        1.3
6.3        2.5        4.9        1.5
6.1        2.8        4.7        1.2
6.4        2.9        4.3        1.3
6.6        3.0        4.4        1.4
6.8        2.8        4.8        1.4
6.7        3.0        5.0        1.7
6.0        2.9        4.5        1.5
5.7        2.6        3.5        1.0
5.5        2.4        3.8        1.1
5.5        2.4        3.7        1.0
5.8        2.7        3.9        1.2
6.0        2.7        5.1        1.6
5.4        3.0        4.5        1.5
6.0        3.4        4.5        1.6
6.7        3.1        4.7        1.5
6.3        2.3        4.4        1.3
5.6        3.0        4.1        1.3
5.5        2.5        4.0        1.3
5.5        2.6        4.4        1.2
6.1        3.0        4.6        1.4
5.8        2.6        4.0        1.2
5.0        2.3        3.3        1.0
5.6        2.7        4.2        1.3
5.7        3.0        4.2        1.2
5.7        2.9        4.2        1.3
6.2        2.9        4.3        1.3
5.1        2.5        3.0        1.1
5.7        2.8        4.1        1.3
6.3        3.3        6.0        2.5
5.8        2.7        5.1        1.9
7.1        3.0        5.9        2.1
6.3        2.9        5.6        1.8
6.5        3.0        5.8        2.2
7.6        3.0        6.6        2.1
4.9        2.5        4.5        1.7
7.3        2.9        6.3        1.8
6.7        2.5        5.8        1.8
7.2        3.6        6.1        2.5
6.5        3.2        5.1        2.0
6.4        2.7        5.3        1.9
6.8        3.0        5.5        2.1
5.7        2.5        5.0        2.0
5.8        2.8        5.1        2.4
6.4        3.2        5.3        2.3
6.5        3.0        5.5        1.8
7.7        3.8        6.7        2.2
7.7        2.6        6.9        2.3
6.0        2.2        5.0        1.5
6.9        3.2        5.7        2.3
5.6        2.8        4.9        2.0
7.7        2.8        6.7        2.0
6.3        2.7        4.9        1.8
6.7        3.3        5.7        2.1
7.2        3.2        6.0        1.8
6.2        2.8        4.8        1.8
6.1        3.0        4.9        1.8
6.4        2.8        5.6        2.1
7.2        3.0        5.8        1.6
7.4        2.8        6.1        1.9
7.9        3.8        6.4        2.0
6.4        2.8        5.6        2.2
6.3        2.8        5.1        1.5
6.1        2.6        5.6        1.4
7.7        3.0        6.1        2.3
6.3        3.4        5.6        2.4
6.4        3.1        5.5        1.8
6.0        3.0        4.8        1.8
6.9        3.1        5.4        2.1
6.7        3.1        5.6        2.4
6.9        3.1        5.1        2.3
5.8        2.7        5.1        1.9
6.8        3.2        5.9        2.3
6.7        3.3        5.7        2.5
6.7        3.0        5.2        2.3
6.3        2.5        5.0        1.9
6.5        3.0        5.2        2.0
6.2        3.4        5.4        2.3
5.9        3.0        5.1        1.8

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM