MATLAB机器学习系列-7支持向量机原理及其代码实现
支持向量機(jī)原理
分類
如圖,在分類中,我們需要找到一個(gè)超平面(圖中包括間隔的平面)把圓圈和方框分開
原問(wèn)題
間隔最小,同時(shí)保證真實(shí)輸出和模型輸出積大于1
對(duì)偶問(wèn)題
原先的最小化問(wèn)題變成了最大化問(wèn)題,原先的不等式約束變成了等式約束。
引入間隔c之后
核函數(shù)
如果在低維空間找不到超平面,這時(shí)需要將數(shù)據(jù)轉(zhuǎn)換到高維空間。
就需要用到核函數(shù)。
回歸
原問(wèn)題與對(duì)偶問(wèn)題
多分類問(wèn)題
LIBSVM工具箱介紹
libsvm需要C++編譯器,輸入命令查看
libsvm要求輸入和輸出行相同
如分類器可以設(shè)置為
預(yù)測(cè)
svmpredict(train_label,Train_matrix,model);我這里未安裝,請(qǐng)你們自行安裝
LIBSVM分類
I. 清空環(huán)境變量
II. 導(dǎo)入數(shù)據(jù)
III. 數(shù)據(jù)歸一化
IV. SVM創(chuàng)建/訓(xùn)練(RBF核函數(shù))
V. SVM仿真測(cè)試
VI. 繪圖
I. 清空環(huán)境變量
clear all clcII. 導(dǎo)入數(shù)據(jù)
load BreastTissue_data.matIII. 數(shù)據(jù)歸一化
[Train_matrix,PS] = mapminmax(train_matrix'); Train_matrix = Train_matrix'; Test_matrix = mapminmax('apply',test_matrix',PS); Test_matrix = Test_matrix';IV. SVM創(chuàng)建/訓(xùn)練(RBF核函數(shù))
V. SVM仿真測(cè)試
[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('真實(shí)類別','預(yù)測(cè)類別') xlabel('測(cè)試集樣本編號(hào)') ylabel('測(cè)試集樣本類別') string = {'測(cè)試集SVM預(yù)測(cè)結(jié)果對(duì)比(RBF核函數(shù))';['accuracy = ' num2str(accuracy_2(1)) '%']}; title(string)LIBSVM回歸
%% I. 清空環(huán)境變量 clear all clc%% II. 導(dǎo)入數(shù)據(jù) load concrete_data.mat%% % 1. 隨機(jī)產(chǎn)生訓(xùn)練集和測(cè)試集 n = randperm(size(attributes,2));%% % 2. 訓(xùn)練集——80個(gè)樣本 p_train = attributes(:,n(1:80))'; t_train = strength(:,n(1:80))';%% % 3. 測(cè)試集——23個(gè)樣本 p_test = attributes(:,n(81:end))'; t_test = strength(:,n(81:end))';%% III. 數(shù)據(jù)歸一化 %% % 1. 訓(xùn)練集 [pn_train,inputps] = mapminmax(p_train'); pn_train = pn_train'; pn_test = mapminmax('apply',p_test',inputps); pn_test = pn_test';%% % 2. 測(cè)試集 [tn_train,outputps] = mapminmax(t_train'); tn_train = tn_train'; tn_test = mapminmax('apply',t_test',outputps); tn_test = tn_test';%% IV. SVM模型創(chuàng)建/訓(xùn)練 %% % 1. 尋找最佳c參數(shù)/g參數(shù) [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. 創(chuàng)建/訓(xùn)練SVM cmd = [' -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -p 0.01']; model = svmtrain(tn_train,pn_train,cmd);%% V. SVM仿真預(yù)測(cè) [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. 結(jié)果對(duì)比 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('真實(shí)值','預(yù)測(cè)值') xlabel('樣本編號(hào)') ylabel('耐壓強(qiáng)度') string_1 = {'訓(xùn)練集預(yù)測(cè)結(jié)果對(duì)比';['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('真實(shí)值','預(yù)測(cè)值') xlabel('樣本編號(hào)') ylabel('耐壓強(qiáng)度') string_2 = {'測(cè)試集預(yù)測(cè)結(jié)果對(duì)比';['mse = ' num2str(error_2(2)) ' R^2 = ' num2str(error_2(3))]}; title(string_2)代碼可以不用網(wǎng)格搜索尋找最優(yōu)參數(shù),直接指定參數(shù)‘
代碼和數(shù)據(jù)百度云
鏈接:https://pan.baidu.com/s/1w50keCHeEfx5djVaOZlsUg 提取碼:1l82 復(fù)制這段內(nèi)容后打開百度網(wǎng)盤手機(jī)App,操作更方便哦作者:電氣工程的計(jì)算機(jī)萌新-余登武
總結(jié)
以上是生活随笔為你收集整理的MATLAB机器学习系列-7支持向量机原理及其代码实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电动自行车仪表盘上像闪电一样的符号是什么
- 下一篇: GameFi是什么意思 继DeFi后币圈