千家信息网

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

发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,这篇文章主要介绍"matlab怎么实现支持向量机的回归拟合",在日常操作中,相信很多人在matlab怎么实现支持向量机的回归拟合问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2024年11月28日matlab怎么实现支持向量机的回归拟合

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

训练 样本 测试 向量 支持 结果 网络 学习 参数 强度 数据 神经 神经网络 预测值 分类 更多 误差 仿真 帮助 绘图 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全只手抄报 我的世界服务器挖方块很慢怎么办 河南网络技术专业为什么是两年 多数据库中间件 美能达用户认证开启外部服务器 奉贤区工程软件开发优势 网络安全法五十九条规定 外网访问linux服务器 网络技术对教学有影响吗 网络安全先进单位河北省 php 获取服务器ip 长沙网络安全认证几年有效 朝阳区推广软件开发要求 钦州行业专业软件开发 明盛软件开发有限公司 网络安全知识培训2021 在单元格里快速录入数据库 广东专业软件开发设施创意 大学生java软件开发简历 桂林理工大学有没有软件开发 苏州进口服务器咨询客服 局域网的网络安全体系研究 数据库和前台和后台的关系 网络安全模式在哪设置密码 简版数据库如何修改密码 微服务连接多种数据库 深圳五叶草互联网科技有限公司 长沙软件开发工司 手机位置服务器 广元用友软件开发
0