溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

matlab怎么實現(xiàn)支持向量機的回歸擬合

發(fā)布時間:2022-01-14 10:22:46 來源:億速云 閱讀:896 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“matlab怎么實現(xiàn)支持向量機的回歸擬合”,在日常操作中,相信很多人在matlab怎么實現(xiàn)支持向量機的回歸擬合問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”matlab怎么實現(xiàn)支持向量機的回歸擬合”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

SVM應(yīng)用于回歸擬合分析時,其基本思想不再是尋找一個最優(yōu)分類面使得兩類樣本分開,而是尋找一個最優(yōu)分類面使得所有訓(xùn)練樣本離該最優(yōu)分類面的誤差最小

matlab怎么實現(xiàn)支持向量機的回歸擬合  



%% 清空環(huán)境變量

clear

clc

matlab怎么實現(xiàn)支持向量機的回歸擬合  


%% 導(dǎo)入數(shù)據(jù)

load concrete_data.mat

% 隨機產(chǎn)生訓(xùn)練集和測試集

n = randperm(size(attributes,2));

% 訓(xùn)練集——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))';


%% 數(shù)據(jù)歸一化


% 訓(xùn)練集

[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模型創(chuàng)建/訓(xùn)練


% 尋找最佳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: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

% 創(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);

matlab怎么實現(xiàn)支持向量機的回歸擬合  


%% SVM仿真預(yù)測

[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);

% 結(jié)果對比

result_1 = [t_train predict_1];

result_2 = [t_test predict_2];


%% 繪圖

figure(1)

matlab怎么實現(xiàn)支持向量機的回歸擬合  

plot(1:length(t_train),t_train,'r-*',1:length(t_train),predict_1,'b:o')

grid on

legend('真實值','預(yù)測值')

xlabel('樣本編號')

ylabel('耐壓強度')

string_1 = {'訓(xùn)練集預(yù)測結(jié)果對比';

           ['mse = ' num2str(error_1(2)) ' R^2 = ' num2str(error_1(3))]};

title(string_1)

figure(2)

matlab怎么實現(xiàn)支持向量機的回歸擬合  

plot(1:length(t_test),t_test,'r-*',1:length(t_test),predict_2,'b:o')

grid on

legend('真實值','預(yù)測值')

xlabel('樣本編號')

ylabel('耐壓強度')

string_2 = {'測試集預(yù)測結(jié)果對比';

           ['mse = ' num2str(error_2(2)) ' R^2 = ' num2str(error_2(3))]};

title(string_2)


%% BP 神經(jīng)網(wǎng)絡(luò)


% 數(shù)據(jù)轉(zhuǎn)置

pn_train = pn_train';

tn_train = tn_train';

pn_test = pn_test';

tn_test = tn_test';

% 創(chuàng)建BP神經(jīng)網(wǎng)絡(luò)

net = newff(pn_train,tn_train,10);

% 設(shè)置訓(xùn)練參數(shù)

net.trainParam.epcohs = 1000;

net.trainParam.goal = 1e-3;

net.trainParam.show = 10;

net.trainParam.lr = 0.1;

% 訓(xùn)練網(wǎng)絡(luò)

net = train(net,pn_train,tn_train);

% 仿真測試

tn_sim = sim(net,pn_test);

% 均方誤差

E = mse(tn_sim - tn_test);

% 決定系數(shù)

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)

matlab怎么實現(xiàn)支持向量機的回歸擬合  

plot(1:length(t_test),t_test,'r-*',1:length(t_test),t_sim,'b:o')

grid on

legend('真實值','預(yù)測值')

xlabel('樣本編號')

ylabel('耐壓強度')

string_3 = {'測試集預(yù)測結(jié)果對比(BP神經(jīng)網(wǎng)絡(luò))';

           ['mse = ' num2str(E) ' R^2 = ' num2str(R2)]};

title(string_3)

到此,關(guān)于“matlab怎么實現(xiàn)支持向量機的回歸擬合”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI