MATLAB 機器學習筆記--SVM

我們知道SVM的基本原理就是找一個超平面(廣義平面)將樣本分為幾個部分,即分類。

MATLAB中自帶SVM包,使用起來也十分方便,假如X是特徵矩陣,Y是分類標籤(可以是數值(1、2)也可以是string,總之有區別就行。)

二分類代碼

SVMModel = fitcsvm(X,y) %訓練分類器CVSVMModel = crossval(SVMModel); %分類器的交叉驗證classLoss = kfoldLoss(CVSVMModel)% 樣本內錯誤率[~,score] = predict(SVMModel,X_test)%; %樣本外的數據進行分類預測[label,scorePred] = kfoldPredict(CVSVMModel); %樣本外的數據進行分類預測結果,

線性分類和非線性分類

我們在訓練分類器的時候需要選擇是線性分類還是非線性分類,比如如下兩種:顯然第一種適合線性分類,第二種適合曲線分類,也就是存在「異或」問題,需要映射到高維空間來尋找超平面。這種類似的選擇稱為「核函數」的選擇,fitcsvm命令的KernelFunction可以選擇三個核函數:linear, gaussian (or rbf), polynomial,當然也可以自己編寫核函數。核函數的選擇是SVM分類器的最重要的參數。

舉例:

SVMModel = fitcsvm(X,indx,ClassNames,[false true],Standardize,true,... KernelFunction,rbf,BoxConstraint,1);

分多類情形

%MATLAB自帶數據,每一個樣本都是兩個特徵,Y代表其分類,此數據中分類標籤為3種。

load fisheririsX = meas(:,3:4);Y = species;

%%將數據二維展示;%圖中不同的顏色即為不同的標籤。

figuregscatter(X(:,1),X(:,2),Y);h = gca;lims = [h.XLim h.YLim]; % Extract the x and y axis limitstitle({f Scatter Diagram of Iris Measurements});xlabel(Petal Length (cm));ylabel(Petal Width (cm));legend(Location,Northwest);

%不同分類訓練分類器

SVMModels = cell(3,1);classes = unique(Y);rng(1); % For reproducibilityfor j = 1:numel(classes); indx = strcmp(Y,classes(j)); % Create binary classes for each classifier SVMModels{j} = fitcsvm(X,indx,ClassNames,[false true],Standardize,true,... KernelFunction,rbf,BoxConstraint,1);end

%用meshgrid畫出網格,並將網格點作為測試樣本。計算每個測試樣本的得分。

其中scores是一個多行三列的向量,每一列代表此種分類的可能性大小。maxScore代表最可能的分類。

d = 0.02;[x1Grid,x2Grid] = meshgrid(min(X(:,1)):d:max(X(:,1)),... min(X(:,2)):d:max(X(:,2)));xGrid = [x1Grid(:),x2Grid(:)];N = size(xGrid,1);Scores = zeros(N,numel(classes));for j = 1:numel(classes); [~,score] = predict(SVMModels{j},xGrid); Scores(:,j) = score(:,2); % Second column contains positive-class scoresend[~,maxScore] = max(Scores,[],2);

%二維顯示訓練樣本和測試樣本。其中將不同的預測分類結果用不同的顏色展示

figureh(1:3) = gscatter(xGrid(:,1),xGrid(:,2),maxScore,... [0.1 0.5 0.5; 0.5 0.1 0.5; 0.5 0.5 0.1]);%預測分類結果用不同的顏色展示hold onh(4:6) = gscatter(X(:,1),X(:,2),Y);%畫出原始的訓練樣本title({f Iris Classification Regions});xlabel(Petal Length (cm));ylabel(Petal Width (cm));legend(h,{setosa region,versicolor region,virginica region,... observed setosa,observed versicolor,observed virginica},... Location,Northwest);axis tighthold off

推薦閱讀:

知識布局-tensorflow-梯度下降
決策樹之條件熵與信息增益
機器學習面試題,更有大廠內推機會
使用神經網路生成一段宋史列傳
[貝葉斯一]之貝葉斯定理

TAG:機器學習 | MATLAB | SVM |