您好,登錄后才能下訂單哦!
這篇文章主要介紹“matlab怎么實現支持向量機的回歸擬合”,在日常操作中,相信很多人在matlab怎么實現支持向量機的回歸擬合問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”matlab怎么實現支持向量機的回歸擬合”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
SVM應用于回歸擬合分析時,其基本思想不再是尋找一個最優分類面使得兩類樣本分開,而是尋找一個最優分類面使得所有訓練樣本離該最優分類面的誤差最小
%% 清空環境變量
clear
clc
%% 導入數據
load concrete_data.mat
% 隨機產生訓練集和測試集
n = randperm(size(attributes,2));
% 訓練集——80個樣本
p_train = attributes(:,n(1:80))';
t_train = strength(:,n(1:80))';
% 測試集——23個樣本
p_test = attributes(:,n(81:end))';
t_test = strength(:,n(81:end))';
%% 數據歸一化
% 訓練集
[pn_train,inputps] = mapminmax(p_train');
pn_train = pn_train';
pn_test = mapminmax('apply',p_test',inputps);
pn_test = pn_test';
% 測試集
[tn_train,outputps] = mapminmax(t_train');
tn_train = tn_train';
tn_test = mapminmax('apply',t_test',outputps);
tn_test = tn_test';
%% SVM模型創建/訓練
% 尋找最佳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:m
for j = 1:n
cmd = ['-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) < error
error = cg(i,j);
bestc = 2^c(i,j);
bestg = 2^g(i,j);
end
if 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);
end
end
end
% 創建/訓練SVM
cmd = [' -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -p 0.01'];
model = svmtrain(tn_train,pn_train,cmd);
%% SVM仿真預測
[Predict_1,error_1] = svmpredict(tn_train,pn_train,model);
[Predict_2,error_2] = svmpredict(tn_test,pn_test,model);
% 反歸一化
predict_1 = mapminmax('reverse',Predict_1,outputps);
predict_2 = mapminmax('reverse',Predict_2,outputps);
% 結果對比
result_1 = [t_train predict_1];
result_2 = [t_test predict_2];
%% 繪圖
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)
%% BP 神經網絡
% 數據轉置
pn_train = pn_train';
tn_train = tn_train';
pn_test = pn_test';
tn_test = tn_test';
% 創建BP神經網絡
net = newff(pn_train,tn_train,10);
% 設置訓練參數
net.trainParam.epcohs = 1000;
net.trainParam.goal = 1e-3;
net.trainParam.show = 10;
net.trainParam.lr = 0.1;
% 訓練網絡
net = train(net,pn_train,tn_train);
% 仿真測試
tn_sim = sim(net,pn_test);
% 均方誤差
E = mse(tn_sim - tn_test);
% 決定系數
N = size(t_test,1);
R2=(N*sum(tn_sim.*tn_test)-sum(tn_sim)*sum(tn_test))^2/((N*sum((tn_sim).^2)-(sum(tn_sim))^2)*(N*sum((tn_test).^2)-(sum(tn_test))^2));
% 反歸一化
t_sim = mapminmax('reverse',tn_sim,outputps);
% 繪圖
figure(3)
plot(1:length(t_test),t_test,'r-*',1:length(t_test),t_sim,'b:o')
grid on
legend('真實值','預測值')
xlabel('樣本編號')
ylabel('耐壓強度')
string_3 = {'測試集預測結果對比(BP神經網絡)';
['mse = ' num2str(E) ' R^2 = ' num2str(R2)]};
title(string_3)
到此,關于“matlab怎么實現支持向量機的回歸擬合”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。