日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SVM分类问题

發(fā)布時間:2023/12/31 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SVM分类问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

監(jiān)督式學(xué)習(xí)(Supervised Learning)常用算法包括:線性回歸(Linear Regression)、邏輯回歸(Logistic Regression)、神經(jīng)網(wǎng)絡(luò)(Neural Network)以及支持向量機(jī)(Support Vector Machine,SVM)等。支持向量機(jī)與邏輯回歸算法類似,都是解決二分類或多分類問題,但是SVM在非線性回歸預(yù)測方面具有更優(yōu)秀的分類效果,所以SVM又被稱為最大間距分類器。

本文不對支持向量機(jī)的原理進(jìn)行詳細(xì)解釋,直接運(yùn)用matlab自帶的工具箱函數(shù)svmtrain、svmclassify解決實(shí)際的二分類問題。

導(dǎo)入數(shù)據(jù):

  • clear; close all; clc;
  • %% ================ load fisheriris.mat ================
  • load fisheriris.mat
  • 1、對于線性分類問題,我們選取線性核函數(shù),原始數(shù)據(jù)包括訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)兩部分。

  • data = meas(51:end,3:4); % column 3,column 4作為特征值
  • group = species(51:end); % 類別
  • idx = randperm(size(data,1));
  • N = length(idx);
  • % SVM train
  • T = floor(N*0.9); % 90組數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)
  • xdata = data(idx(1:T),:);
  • xgroup = group(idx(1:T));
  • svmStr = svmtrain(xdata,xgroup,'Showplot',true);

  • 訓(xùn)練過程得到結(jié)構(gòu)體svmStr,對測試數(shù)據(jù)進(jìn)行預(yù)測

  • % SVM predict
  • P = floor(N*0.1); % 10組預(yù)測數(shù)據(jù)
  • ydata = data(idx(T+1:end),:);
  • ygroup = group(idx(T+1:end));
  • pgroup = svmclassify(svmStr,ydata,'Showplot',true); % svm預(yù)測
  • hold on;
  • plot(ydata(:,1),ydata(:,2),'bs','Markersize',12);
  • accuracy1 = sum(strcmp(pgroup,ygroup))/P*100; % 預(yù)測準(zhǔn)確性
  • hold off;

  • 程序運(yùn)行結(jié)果如下:


    圖中,方塊*號表示測試數(shù)據(jù)的預(yù)測結(jié)果,accuracy1結(jié)果為90%(上下浮動)。


    2、對于非線性分類問題,我們選取高斯核函數(shù)RBF,原始數(shù)據(jù)包括訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)兩部分。

    訓(xùn)練過程前,導(dǎo)入原始數(shù)據(jù):

  • data = meas(51:end,1:2); % column 1,column 2作為特征值
  • group = species(51:end); % 類別
  • idx = randperm(size(data,1));
  • N = length(idx);
  • % SVM train
  • T = floor(N*0.9); % 90組數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)
  • xdata = data(idx(1:T),:);
  • xgroup = group(idx(1:T));

  • 對于高斯核函數(shù),有兩個參數(shù)對SVM的分類效果有著重要的影響:一個是sigma;另一個是C。

    首先討論sigma的影響,sigma反映了RBF函數(shù)從最大值點(diǎn)向周圍函數(shù)值下降的速度,sigma越大,下降速度越慢,對應(yīng)RBF函數(shù)越平緩;sigma越小,下降速度越快,對應(yīng)RBF函數(shù)越陡峭。對于不同的sigma,程序代碼:

  • % different sigma
  • figure;
  • 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越小,分類曲線越復(fù)雜,事實(shí)也確實(shí)如此。因?yàn)閟igma越小,RBF函數(shù)越陡峭,下降速度越大,預(yù)測過程容易發(fā)生過擬合問題,使分類模型對訓(xùn)練數(shù)據(jù)過分?jǐn)M合,而對測試數(shù)據(jù)預(yù)測效果不佳。

    然后討論C的影響,程序代碼如下:

  • % different C
  • figure;
  • 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');

  • 分類平面如下:







    從圖中可以發(fā)現(xiàn),C越大,分類曲線越復(fù)雜,也就是說越容易發(fā)生過擬合,因?yàn)镃對應(yīng)邏輯回歸的lambda的倒數(shù)。

    若令sigma=1,C=1,則對測試數(shù)據(jù)的預(yù)測程序:

  • % SVM predict
  • P = floor(N*0.1); % 10組預(yù)測數(shù)據(jù)
  • ydata = data(idx(T+1:end),:);
  • ygroup = group(idx(T+1:end));
  • % sigma = 1,C = 1,default
  • figure;
  • svmStr = svmtrain(xdata,xgroup,'kernel_function','rbf','showplot',true);
  • pgroup = svmclassify(svmStr,ydata,'Showplot',true); % svm預(yù)測
  • hold on;
  • plot(ydata(:,1),ydata(:,2),'bs','Markersize',12);
  • accuracy2 = sum(strcmp(pgroup,ygroup))/P*100; % 預(yù)測準(zhǔn)確性
  • hold off;

  • 程序運(yùn)行結(jié)果如下:


    圖中,方塊*號表示測試數(shù)據(jù)的預(yù)測結(jié)果,accuracy2結(jié)果為70%(上下浮動)。

    分類效果不佳因?yàn)閮蓚€特征量的選擇,可以選擇更合適的特征量。



    本文轉(zhuǎn)自:https://blog.csdn.net/red_stone1/article/details/54313821

    總結(jié)

    以上是生活随笔為你收集整理的SVM分类问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。