[Matlab]在Matlab中安裝與使用LibSVM工具箱(小白指南)

當初在CSDN上看了很多LibSVM的教程,下載再編譯、改路徑什麼的一頭霧水,現在把安裝過程圖文總結出來,小白也能十分鐘安裝好LibSVM工具箱!

安裝好了可以直接跳到第三節:LibSVM使用指南!

一、LibSVM工具箱下載

工具箱下載地址:https://www.csie.ntu.edu.tw/~cjlin/libsvm/

往下拉找到Download LIBSVM,點擊zip.file下載壓縮包

1.1、官網下載的數據包中沒有Matlab對應的數據集格式,點此下載heart_scale.mat. 下載後放在解壓縮後的libsvm-3.24文件夾中即可,此時可以得到如下圖所示的文件夾內容:假如是windows 64位系統,預編譯的二進制文件會在libsvm-3.24\windows文件下提供,分別是libsvmread.mexw64、libsvmwrite.mexw64、svmtrain.mexw64、svmpredict.mexw64。

如果是32位系統,就需要手動編譯c文件,生成MATLAB可識別的mexw32文件。(具體方法可以百度或者提問)

二、將LibSVM添加到toolbox路徑

2.1、爲了避免和自帶的svm工具箱函數衝突,要將svmtrain.mexw64、svmpredict.mexw64這兩個文件重命名爲libsvmtrain.mexw64、libsvmpredict.mexw64。

2.2、將1.1中下載好的文件夾libsvm-3.24移動至你電腦中Matlab路徑下的toolbox文件夾目錄中,(即D:\Program Files (x86)\Matlab R2016a\toolbox);

2.3、打開Matlab軟件,點擊主頁> 設置路徑> 添加幷包含子文件夾> 選擇libsvm-3.24文件夾;

2.4、點擊主頁> 預設> 常規> 更新工具箱緩存> 確定

2.5、新建腳本執行下列指令:

load heart_scale
model = libsvmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g     0.07');
[predict_label, accuracy, dec_values] = libsvmpredict(heart_scale_label, heart_scale_inst, model);

如果運行成功得到下列結果則說明安裝完成

三、LibSVM使用指南

LibSVM的使用主要要掌握三個方面:

1、前期數據的歸一化與格式處理;2、訓練模型和預測的輸入參數;3、模型輸出參數和預測結果

%%%%%%%這裏以下先不用看%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear all;
for i=1:50
    pop(i,:)=rand(1,2);  
end
x=pop;
x=abs(x)    % Y. x爲粒子的位置
a=isnan(x);

%%%%%%%讀入數據樣本(訓練數據集加測試數據集)%%%%%%%%%%%%%
%%%%%%%1932箇中有四種數據,每種數據的數量就是對應點數%%%%%
load co_max_fin
co = co_max_fin;%一氧化碳348個點
load ben_max_fin
ben=ben_max_fin;%苯432個點
load jben_max_fin 
jben=jben_max_fin;%甲苯396個點
load jq_max_fin
jq=jq_max_fin;%甲醛756個點
train_x1=[ben;jben;jq;co];%共1932個點

%%%%%%%轉置後進行列的歸一化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%mapminmax是歸一化函數,每列是一個樣本,每行是多個樣本的同一維%
output=mapminmax(train_x1',0,1);        
input=output';

%%%%%%%取出每種樣本中的一部分作爲訓練集Xtrain,並標註Lable在Ytrain中%%%%%%%%
%%%%%%%%%%%%%%%將含有多種樣本的數據包作爲測試集Xtest%%%%%%%%%%%%%%%%%%%%%%%
Xtrain=[input(1:288,:);input(433:696,:);input(829:1332,:);input(1585:1816,:)];
Xtest=[input(289:432,:);input(697:828,:);input(1333:1584,:);input(1817:1932,:)];
Ytrain=[1*ones(288,1);2*ones(264,1);3*ones(504,1);4*ones(232,1)];
Ytest=[1*ones(144,1);2*ones(132,1);3*ones(252,1);4*ones(116,1)];

%%%設置模型參數後,用訓練集訓練出模型model,再用model對訓練集進行驗證,對測試集進行預測%%%%%
c=x(2);                %懲罰因子
gama=x(1);             %svm的rbf核的參數
cmd=[' -c ',num2str(c),' -g ',num2str(gama)]; 
model = libsvmtrain(Ytrain,Xtrain,cmd);   
model = svmtrain(trainlabel, traindata, '-s 0 -t 2 -c 1.2 -g 2.8');
[predict_label_train, accuracy_train,~] = libsvmpredict(Ytrain, Xtrain, model);
[predict_label_test, accuracy_test,~] = libsvmpredict(Ytest, Xtest, model); 

%%%最後一步的參數具體含義見下文:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章