SVM支持向量机的多输入多输出预测模型

这篇具有很好参考价值的文章主要介绍了SVM支持向量机的多输入多输出预测模型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

多输入多输出

使用SVM做预测的时候,涉及到数据处理,这里强调一下,其它预测算法也适用,我们经常将收集数据集进行归一化、标准化,其实,只需要对部分数据进行归一化即可。

归一化的目的是将输入向量中的各属性之间的数量级拉近,如果量级相差过大会影响最终的预测结果,使的预测结果失真。因此,我们要对负荷数据进行归一化处理。

SVM中核函数的选择和参数非常重要。根据核函数的不同映射特性,可以将核函数分为全局核函数和局部核函数。其中多项式核函数1为典型全局核函数,而径向基核函数2为典型局部核函数。局部性核函数仅仅在测试点附近小领域内对数据点有影响,其学习能力强、泛化性能较弱;而全局性核函数则相对来说泛化性能较强、学习能力较弱。

这里给出一个创新点,是局部核函数和全局核函数结合起来,组合核函数如下:

K = a×K_local+b×K_global;a和b为组合核函数的权值系数

输入数据归一化问题,观察数据格式:

svm预测模型,建模,算法

只需要将x1、x2、(y1与y2)这四个变量进行归一化即可,尽量不要变动其它数据,以免引入误差。这里为什么不对x1与x2一起做归一化操作,因为反归一化用不到它们,x1与x2也可以一起做归一化。

| svm预测模型,建模,算法

采用mapminmax函数做一维归一化时,应注意数据格式,格式是行向量,列向量需要转置一下才能完成归一化,matlab中mapminmax函数的缺点是输入一维行向量数据,输出不报错。这就造成你做数据预测时,程序没有报错,预测结果看不懂!

上述数据基于第一篇的数据y-7得到y2数据,这里为了验证多输入多输出实验,不严谨,所以预测结果变化趋势相同,但方法和思路正确。文章来源地址https://www.toymoban.com/news/detail-567295.html

clear; clc;close all;
% 五输入:5*39
% 二输出:2*39
% 回归预测
data=xlsread('data.xlsx','Sheet3','A2:G40');
%%
%***********************************************SVR**********************************%
%归一化
data_1 = data(:,1);
data_2 = data(:,2);
data_3 = data(:,3);
data_4 = data(:,4);
data_5 = data(:,5);
data_6 = data(:,6:7);% y1与y2一起做归一化,因为后面用到它的反归一化。


[data_1,ps0] = mapminmax(data_1',0,1);
[data_2,ps1] = mapminmax(data_2',0,1);
[data_6,ps6] = mapminmax(data_6',0,1);


data_1 = data_1';
data_2 = data_2';
data_6 = data_6';



%数据集
data_train_in(:,1) = data_1(1:30);% x1
data_train_in(:,2) = data_2(1:30);% x2
data_train_in(:,3) = data_3(1:30);% x3
data_train_in(:,4) = data_4(1:30);% x4
data_train_in(:,5) = data_5(1:30);% x5

data_train_out(:,1) = data_6(1:30,1);% y1
data_train_out(:,2) = data_6(1:30,2);% y2

data_test_in(:,1) = data_1(31:39);
data_test_in(:,2) = data_2(31:39);
data_test_in(:,3) = data_3(31:39);
data_test_in(:,4) = data_4(31:39);
data_test_in(:,5) = data_5(31:39);
data_test_out(:,1) = data_6(31:39,1)';
data_test_out(:,2) = data_6(31:39,1)';

%建立回归模型
[bestmse,bestc,bestg] = SVMcgForRegress(data_train_out,data_train_in,-2,2,-2,2,3,0.1,0.1);%cmin,cmax,gmin,gmax,v,cstep,gstep,msestep 
% [bestmse,bestc,bestg] = gaSVMcgForRegress(data_train_out,data_train_in);
% pso_option = struct('c1',1.5,'c2',1.7,'maxgen',200,'sizepop',20, ...
%                     'k',0.6,'wV',1,'wP',1,'v',5, ...
%                      'popcmax',2^2,'popcmin',10^(-1),'popgmax',2^2,'popgmin',10^(-2));
% [bestmse,bestc,bestg] = psoSVMcgForRegress(data_train_out,data_train_in,pso_option);
cmd = ['-c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -t 2 -p 0.01'];
%%%%%  -c 惩罚系数,默认1
%%%%%  -g 核函数参数,默认1/K,K为特征数
%%%%%  -s SVM类型  0 - C-SVC  1 - V-SVC  2 - One-Class-SVM  3 - e-SVR  4 - n-SVR
%%%%%  -t 核函数类型 0 - 线性核  1 - 多项式核  2 - RBF核  3 - Sigmoid核  
%%%%%  -p 损失函数参数,默认0.1
%%%%%  -v 交叉验证参数,默认3
model = svmtrain(data_train_out,data_train_in,cmd);

%预测
for i=1:2
    [ptesty(:,i),mse,prob] = svmpredict(data_test_out(:,i),data_test_in,model);%mse:均方误差和相关系数
end

data_test_out = data_test_out';
data_test_out = mapminmax('reverse',data_test_out,ps6);%去归一化
ptesty = ptesty';
ptesty = mapminmax('reverse',ptesty,ps6);%去归一化


figure;
subplot(121)
plot(data_test_out(1,:));
hold on;
plot(ptesty(1,:));
legend('实际值','预测值')
subplot(122)
plot(data_test_out(2,:));
hold on;
plot(ptesty(2,:));
legend('实际值','预测值')

到了这里,关于SVM支持向量机的多输入多输出预测模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包