温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

matlab怎么实现支持向量机的回归拟合

发布时间:2022-01-14 10:22:46 来源:亿速云 阅读:881 作者:iii 栏目:大数据

这篇文章主要介绍“matlab怎么实现支持向量机的回归拟合”,在日常操作中,相信很多人在matlab怎么实现支持向量机的回归拟合问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”matlab怎么实现支持向量机的回归拟合”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

SVM应用于回归拟合分析时,其基本思想不再是寻找一个最优分类面使得两类样本分开,而是寻找一个最优分类面使得所有训练样本离该最优分类面的误差最小

matlab怎么实现支持向量机的回归拟合  



%% 清空环境变量

clear

clc

matlab怎么实现支持向量机的回归拟合  


%% 导入数据

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

matlab怎么实现支持向量机的回归拟合  


%% 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)

matlab怎么实现支持向量机的回归拟合  

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)

matlab怎么实现支持向量机的回归拟合  

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)

matlab怎么实现支持向量机的回归拟合  

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怎么实现支持向量机的回归拟合”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI