生活随笔
收集整理的這篇文章主要介紹了
SVM分类问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
監督式學習(Supervised Learning)常用算法包括:線性回歸(Linear Regression)、邏輯回歸(Logistic Regression)、神經網絡(Neural Network)以及支持向量機(Support Vector Machine,SVM)等。支持向量機與邏輯回歸算法類似,都是解決二分類或多分類問題,但是SVM在非線性回歸預測方面具有更優秀的分類效果,所以SVM又被稱為最大間距分類器。
本文不對支持向量機的原理進行詳細解釋,直接運用matlab自帶的工具箱函數svmtrain、svmclassify解決實際的二分類問題。
導入數據:
clear; close all; clc;%% ================ load fisheriris.mat ================load fisheriris.mat
1、對于線性分類問題,我們選取線性核函數,原始數據包括訓練數據和測試數據兩部分。
data = meas(51:end,3:4); % column 3,column 4作為特征值group = species(51:end); % 類別idx = randperm(size(data,1));N = length(idx); % SVM trainT = floor(N*0.9); % 90組數據作為訓練數據xdata = data(idx(1:T),:);xgroup = group(idx(1:T));svmStr = svmtrain(xdata,xgroup,'Showplot',true);
訓練過程得到結構體svmStr,對測試數據進行預測
% SVM predictP = floor(N*0.1); % 10組預測數據ydata = data(idx(T+1:end),:);ygroup = group(idx(T+1:end));pgroup = svmclassify(svmStr,ydata,'Showplot',true); % svm預測hold on;plot(ydata(:,1),ydata(:,2),'bs','Markersize',12);accuracy1 = sum(strcmp(pgroup,ygroup))/P*100; % 預測準確性hold off;
程序運行結果如下:
圖中,方塊*號表示測試數據的預測結果,accuracy1結果為90%(上下浮動)。
2、對于非線性分類問題,我們選取高斯核函數RBF,原始數據包括訓練數據和測試數據兩部分。
訓練過程前,導入原始數據:
data = meas(51:end,1:2); % column 1,column 2作為特征值group = species(51:end); % 類別idx = randperm(size(data,1));N = length(idx); % SVM trainT = floor(N*0.9); % 90組數據作為訓練數據xdata = data(idx(1:T),:);xgroup = group(idx(1:T));
對于高斯核函數,有兩個參數對SVM的分類效果有著重要的影響:一個是sigma;另一個是C。
首先討論sigma的影響,sigma反映了RBF函數從最大值點向周圍函數值下降的速度,sigma越大,下降速度越慢,對應RBF函數越平緩;sigma越小,下降速度越快,對應RBF函數越陡峭。對于不同的sigma,程序代碼:
% different sigmafigure;sigma = 0.5;svmStr = svmtrain(xdata,xgroup,'kernel_function','rbf','rbf_sigma',...sigma,'showplot',true);title('sigma = 0.5');figure;sigma = 1;svmStr = svmtrain(xdata,xgroup,'kernel_function','rbf','rbf_sigma',...sigma,'showplot',true);title('sigma = 1');figure;sigma = 3;svmStr = svmtrain(xdata,xgroup,'kernel_function','rbf','rbf_sigma',...sigma,'showplot',true);title('sigma = 3');
分類平面分別如下:
從圖中可以看出,sigma越小,分類曲線越復雜,事實也確實如此。因為sigma越小,RBF函數越陡峭,下降速度越大,預測過程容易發生過擬合問題,使分類模型對訓練數據過分擬合,而對測試數據預測效果不佳。
然后討論C的影響,程序代碼如下:
% different Cfigure;C = 1;svmStr = svmtrain(xdata,xgroup,'kernel_function','rbf','boxconstraint',...C,'showplot',true);title('C = 0.1');figure;C = 8;svmStr = svmtrain(xdata,xgroup,'kernel_function','rbf','boxconstraint',...C,'showplot',true);title('C = 1');figure;C = 64;svmStr = svmtrain(xdata,xgroup,'kernel_function','rbf','boxconstraint',...C,'showplot',true);title('C = 10');
分類平面如下:
從圖中可以發現,C越大,分類曲線越復雜,也就是說越容易發生過擬合,因為C對應邏輯回歸的lambda的倒數。
若令sigma=1,C=1,則對測試數據的預測程序:
% SVM predictP = floor(N*0.1); % 10組預測數據ydata = data(idx(T+1:end),:);ygroup = group(idx(T+1:end));% sigma = 1,C = 1,defaultfigure;svmStr = svmtrain(xdata,xgroup,'kernel_function','rbf','showplot',true);pgroup = svmclassify(svmStr,ydata,'Showplot',true); % svm預測hold on;plot(ydata(:,1),ydata(:,2),'bs','Markersize',12);accuracy2 = sum(strcmp(pgroup,ygroup))/P*100; % 預測準確性hold off;
程序運行結果如下:
圖中,方塊*號表示測試數據的預測結果,accuracy2結果為70%(上下浮動)。
分類效果不佳因為兩個特征量的選擇,可以選擇更合適的特征量。
本文轉自:https://blog.csdn.net/red_stone1/article/details/54313821
總結
以上是生活随笔為你收集整理的SVM分类问题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。