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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

(MATLAB源代码)SVM多分类

發布時間:2023/12/9 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (MATLAB源代码)SVM多分类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • SVM 多分類
      • 對帶標簽的高光譜數據建立分類模型
    • 代碼
      • 1.訓練集、測試集
      • 2、數據歸一化
      • 3、參數選擇
      • 4、模型訓練
      • 5、模型測試


SVM 多分類

采用libSVM包進行多分類

對帶標簽的高光譜數據建立分類模型

數據描述:三個類別,每個類別300個樣本,特征數量為237。

代碼

1.訓練集、測試集

將數據分為訓練集和測試集,訓練集數量為800,測試集為100。

clear clcload data.mattest_num = 100; l = randperm(size(dataset,1));% 測試集――100個樣本 test_data = dataset(l(1:test_num),:); test_label = label(l(1:test_num),:); % 訓練集――800個樣本 train_data = dataset(l(test_num+1:end),:); train_label = label(l(test_num+1:end),:);write_traindata = [train_label train_data]; write_testdata = [test_label test_data]; csvwrite('C:\Users\Desktop\traindata.csv',write_traindata); csvwrite('C:\Users\Desktop\testdata.csv',write_testdata); # dlmwrite('C:\Users\Desktop\traindata.csv',write_traindata,'-append'); %寫入訓練集文件 # dlmwrite('C:\Users\Desktop\testdata.csv',write_testdata,'-append'); %寫入測試集文件 save('write_traindata','write_traindata'); save('write_testdata','write_testdata');

函數csvwrite()每次執行之后數據會覆蓋表格之前的數據;函數dlmwrite()可以將數據寫在表格數據的后面,不會覆蓋原有數據。

2、數據歸一化

SVM分類器對數據進行分類前,需要將數據歸一化

clear clcload write_traindata.mat load write_testdata.mat% 訓練集――800個樣本 train_data = write_traindata(:,2:end); train_label = write_traindata(:,1); % 測試集――100個樣本 test_data = write_testdata(:,2:end); test_label = write_testdata(:,1);% 數據歸一化 [Train_matrix,PS] = mapminmax(train_data',0,1); Train_matrix = Train_matrix'; Test_matrix = mapminmax('apply',test_data',PS); Test_matrix = Test_matrix';

3、參數選擇

SVM的核函數是選用徑向基函數(RBF),這里采用CV方法選擇最優的參數,c表示懲罰系數,g表示核函數自帶的參數gamma。

[c,g] = meshgrid(-10:1:10,-10:1: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) = libsvmtrain(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)];

4、模型訓練

將得到的最優參數帶入模型,用訓練集數據和標簽訓練模型。

model = libsvmtrain(train_label,Train_matrix,cmd);

5、模型測試

[predict_label_1,accuracy_1,decision_values1] = libsvmpredict(train_label,Train_matrix,model); [predict_label_2,accuracy_2,decision_values2] = libsvmpredict(test_label,Test_matrix,model);SVM_Res = accuracy_2(1,1); disp(["最優參數為:","c為",num2str(bestc),"g為",num2str(bestg)]); disp(["模型訓練精度為:",num2str(accuracy_1(1,1))]); disp(["模型測試精度為:",num2str(accuracy_2(1,1))]);

總結

以上是生活随笔為你收集整理的(MATLAB源代码)SVM多分类的全部內容,希望文章能夠幫你解決所遇到的問題。

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