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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB机器学习系列-7支持向量机原理及其代码实现

發布時間:2024/9/30 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB机器学习系列-7支持向量机原理及其代码实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

支持向量機原理

分類

如圖,在分類中,我們需要找到一個超平面(圖中包括間隔的平面)把圓圈和方框分開

原問題
間隔最小,同時保證真實輸出和模型輸出積大于1

對偶問題

原先的最小化問題變成了最大化問題,原先的不等式約束變成了等式約束。

引入間隔c之后

核函數
如果在低維空間找不到超平面,這時需要將數據轉換到高維空間。
就需要用到核函數。

回歸

原問題與對偶問題

多分類問題

LIBSVM工具箱介紹

libsvm需要C++編譯器,輸入命令查看


libsvm要求輸入和輸出行相同
如分類器可以設置為

model=svmtrain(train,label,'- s 0 -t 2 -c 1.2 -g 2.8');

預測

svmpredict(train_label,Train_matrix,model);

我這里未安裝,請你們自行安裝
LIBSVM分類
I. 清空環境變量
II. 導入數據
III. 數據歸一化
IV. SVM創建/訓練(RBF核函數)
V. SVM仿真測試
VI. 繪圖

I. 清空環境變量

clear all clc

II. 導入數據

load BreastTissue_data.mat
  • 隨機產生訓練集和測試集
  • n = randperm(size(matrix,1));
  • 訓練集——80個樣本
  • train_matrix = matrix(n(1:80),:); train_label = label(n(1:80),:);
  • 測試集——26個樣本
  • test_matrix = matrix(n(81:end),:); test_label = label(n(81:end),:);

    III. 數據歸一化

    [Train_matrix,PS] = mapminmax(train_matrix'); Train_matrix = Train_matrix'; Test_matrix = mapminmax('apply',test_matrix',PS); Test_matrix = Test_matrix';

    IV. SVM創建/訓練(RBF核函數)

  • 尋找最佳c/g參數——交叉驗證方法
  • [c,g] = meshgrid(-10:0.2:10,-10:0.2:10); [m,n] = size(c); cg = zeros(m,n); eps = 10^(-4); v = 5; bestc = 1; bestg = 0.1; bestacc = 0; for i = 1:mfor j = 1:ncmd = ['-v ',num2str(v),' -t 2',' -c ',num2str(2^c(i,j)),' -g ',num2str(2^g(i,j))];cg(i,j) = svmtrain(train_label,Train_matrix,cmd);if cg(i,j) > bestaccbestacc = cg(i,j);bestc = 2^c(i,j);bestg = 2^g(i,j);endif abs( cg(i,j)-bestacc )<=eps && bestc > 2^c(i,j)bestacc = cg(i,j);bestc = 2^c(i,j);bestg = 2^g(i,j);endend end cmd = [' -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg)];
  • 創建/訓練SVM模型
  • model = svmtrain(train_label,Train_matrix,cmd);

    V. SVM仿真測試

    [predict_label_1,accuracy_1] = svmpredict(train_label,Train_matrix,model); [predict_label_2,accuracy_2] = svmpredict(test_label,Test_matrix,model); result_1 = [train_label predict_label_1]; result_2 = [test_label predict_label_2];

    Accuracy = 96.25% (77/80) (classification)
    Accuracy = 57.6923% (15/26) (classification)

    VI. 繪圖

    figure plot(1:length(test_label),test_label,'r-*') hold on plot(1:length(test_label),predict_label_2,'b:o') grid on legend('真實類別','預測類別') xlabel('測試集樣本編號') ylabel('測試集樣本類別') string = {'測試集SVM預測結果對比(RBF核函數)';['accuracy = ' num2str(accuracy_2(1)) '%']}; title(string)

    LIBSVM回歸

    %% I. 清空環境變量 clear all clc%% II. 導入數據 load concrete_data.mat%% % 1. 隨機產生訓練集和測試集 n = randperm(size(attributes,2));%% % 2. 訓練集——80個樣本 p_train = attributes(:,n(1:80))'; t_train = strength(:,n(1:80))';%% % 3. 測試集——23個樣本 p_test = attributes(:,n(81:end))'; t_test = strength(:,n(81:end))';%% III. 數據歸一化 %% % 1. 訓練集 [pn_train,inputps] = mapminmax(p_train'); pn_train = pn_train'; pn_test = mapminmax('apply',p_test',inputps); pn_test = pn_test';%% % 2. 測試集 [tn_train,outputps] = mapminmax(t_train'); tn_train = tn_train'; tn_test = mapminmax('apply',t_test',outputps); tn_test = tn_test';%% IV. SVM模型創建/訓練 %% % 1. 尋找最佳c參數/g參數 [c,g] = meshgrid(-10:0.5:10,-10:0.5:10); [m,n] = size(c); cg = zeros(m,n); eps = 10^(-4); v = 5; bestc = 0; bestg = 0; error = Inf; for i = 1:mfor j = 1:ncmd = ['-v ',num2str(v),' -t 2',' -c ',num2str(2^c(i,j)),' -g ',num2str(2^g(i,j) ),' -s 3 -p 0.1'];cg(i,j) = svmtrain(tn_train,pn_train,cmd);if cg(i,j) < errorerror = cg(i,j);bestc = 2^c(i,j);bestg = 2^g(i,j);endif abs(cg(i,j) - error) <= eps && bestc > 2^c(i,j)error = cg(i,j);bestc = 2^c(i,j);bestg = 2^g(i,j);endend end%% % 2. 創建/訓練SVM cmd = [' -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -p 0.01']; model = svmtrain(tn_train,pn_train,cmd);%% V. SVM仿真預測 [Predict_1,error_1] = svmpredict(tn_train,pn_train,model); [Predict_2,error_2] = svmpredict(tn_test,pn_test,model);%% % 1. 反歸一化 predict_1 = mapminmax('reverse',Predict_1,outputps); predict_2 = mapminmax('reverse',Predict_2,outputps);%% % 2. 結果對比 result_1 = [t_train predict_1]; result_2 = [t_test predict_2];%% VI. 繪圖 figure(1) plot(1:length(t_train),t_train,'r-*',1:length(t_train),predict_1,'b:o') grid on legend('真實值','預測值') xlabel('樣本編號') ylabel('耐壓強度') string_1 = {'訓練集預測結果對比';['mse = ' num2str(error_1(2)) ' R^2 = ' num2str(error_1(3))]}; title(string_1) figure(2) plot(1:length(t_test),t_test,'r-*',1:length(t_test),predict_2,'b:o') grid on legend('真實值','預測值') xlabel('樣本編號') ylabel('耐壓強度') string_2 = {'測試集預測結果對比';['mse = ' num2str(error_2(2)) ' R^2 = ' num2str(error_2(3))]}; title(string_2)

    代碼可以不用網格搜索尋找最優參數,直接指定參數‘

    代碼和數據百度云

    鏈接:https://pan.baidu.com/s/1w50keCHeEfx5djVaOZlsUg 提取碼:1l82 復制這段內容后打開百度網盤手機App,操作更方便哦

    作者:電氣工程的計算機萌新-余登武

    總結

    以上是生活随笔為你收集整理的MATLAB机器学习系列-7支持向量机原理及其代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。