zl程序教程

您现在的位置是:首页 > 

当前栏目

SVR支持向量回归例子「建议收藏」

建议 收藏 支持 例子 回归 向量 SVR
2023-06-13 09:11:44 时间

大家好,又见面了,我是你们的朋友全栈君。

SVR软件包的安装:https://www.cnblogs.com/Ran-Chen/p/9462825.html %使用SVR模型,得到输入矢量x(x包含3个变量x1,x2,x3)到输出矢量y(y只包含一个变量)之间的映射关系,也就是计算y=f(x1,x2,x3)函数的f %x1,x2,x3时简单的加法运算 y=x1+x2+x3 %训练个数 训练需要的时间(秒) 误差 相关系数 %100 0.0028 9.3469 0.7711 %500 0.05 7.38 0.8 %1000 0.17 4.5889 0.8618 %10000 4.1250 0.006051 0.9997 %20000 8.98 9.98041e-05 0.9999 %50000 33.24 9.97801e-05 0.9999 %60000 %平方后相加运算 y=x1的平方+x2的平方+x3的平方 %训练个数 训练需要的时间(秒) 误差 相关系数 %100 0.002 3212 0.72033 %500 0.04 2516 0.5748 %1000 0.16 2885 0.62 %10000 12.8 1150 0.7964 %20000 41 376 0.9199 %50000 159 4.90 0.998527 %60000 503 0.92 0.999717 %结论:随着训练SVR模型时使用的数据量变大,训练的效果越好。通过误差变小,相关系数变大来体现。

%%clean work close all;%关闭所有figure窗口 clear;%清空变量 clc;%清空命令 format compact;%空格紧凑 %生成对模型进行训练的数据 %这个模型为y=f(x1,x2,x3),表示此模型有3个输入变量x1,x2,x3,输出变量有1个,y。 %x1 = (0:0.001:10)’; x2 = (20:0.001:30)’; x3 = (50:0.001:60)’; x1=randi(10,10000,1); x2=randi(10,10000,1); x3=randi(10,10000,1); %使用1到10之间的随机数进行训练 y = x1.^2 + x2.^2 +x3.^2; %y = x1 + x2 +x3; %建立回归模型,也就是对模型进行训练 %x是该模型的输入矢量,x中每行有3个数据,分别是x1,x2,x3,y的每个矢量有1个数据 x(:,1)=x1;x(:,2)=x2;x(:,3)=x3; fprintf(‘Start SVR train,please waiting …’); tic;%记录SVR模型训练的时间 model = libsvmtrain(y,x,’-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01’); toc %利用建立的模型看其在训练集上的回归效果,也就是使用已经训练后的SVR模型,输入训练时使用的输入数据,预测输出结果 %下面libsvmpredict函数的第一个参数无所谓,但是具有和输出变量一样的列数和行数 %如果设置为训练模型时使用过的输出变量,那么在预测时, %会计算预测的输出结果值和原始的输出结果值之间的误差mse和相关系数prob [py,mse,prob] = libsvmpredict(y,x,model,’-b 0’); %简单的加法运算 %训练个数 训练需要的时间(秒) 误差 相关系数 %100 0.0028 9.3469 0.7711 %500 0.05 7.38 0.8 %1000 0.17 4.5889 0.8618 %10000 4.1250 0.006051 0.9997 %20000 8.98 9.98041e-05 0.9999 %50000 33.24 9.97801e-05 0.9999 %60000 %平方后相加运算 %训练个数 训练需要的时间(秒) 误差 %100 0.002 3212 0.72033 %500 0.04 2516 0.5748 %1000 0.16 2885 0.62 %10000 12.8 1150 0.7964 %20000 41 376 0.9199 %50000 159 4.90 0.998527 %60000 503 0.92 0.999717 %结论:随着训练SVR模型时使用的数据量变大,训练的效果越好。通过误差变小,相关系数变大来体现。 figure;%建立一个窗口 plot(y,‘o’);%原始数据以o这种形式标记 hold on;%保持当前图像不刷新 plot(py,‘r*’);%回归数据以红色的*标记 legend(‘原始数据:训练SVR模型时,使用的输出变量’,‘回归数据:使用训练好的SVR模型,对训练时使用的输入变量进行预测’);%设置图例线条 grid on;%画图的时候添加网格线

%进行预测 testx1 = [8.5;3.6;1.5];testx2 = [2.1;2.6;5.8];testx3 = [3.2;5.5;7.8]; display(‘真实数据’);%控制台输出 testy = testx1.^2 + testx2.^2 + testx3.^2 %testy = testx1 + testx2 + testx3 %下面libsvmpredict函数的第一个参数和第二个参数设置为相同, %就是收入给已经训练好的模型的输入参数 testx(:,1)=testx1;testx(:,2)=testx2;testx(:,3)=testx3; [ptesty,tmse,prob2] = libsvmpredict(testy,testx,model,’-b 0’); display(‘预测数据’); ptesty

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142078.html原文链接:https://javaforall.cn