matlab30个案例分析案例14-SVM神经网络的回归预测分析Word格式文档下载.docx
《matlab30个案例分析案例14-SVM神经网络的回归预测分析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《matlab30个案例分析案例14-SVM神经网络的回归预测分析Word格式文档下载.docx(5页珍藏版)》请在冰豆网上搜索。
%画出原始上证指数的每日开盘数
figure;
plot(ts,'
LineWidth'
2);
title('
上证指数的每日开盘数(1990.12.20-2009.08.19)'
'
FontSize'
12);
xlabel('
交易日天数(1990.12.19-2009.08.19)'
ylabel('
开盘数'
gridon;
%数据预处理,将原始数据进行归一化
ts=ts'
;
tsx=tsx'
%mapminmax为matlab自带的映射函数
%对ts进行归一化
[TS,TSps]=mapminmax(ts,1,2);
%画出原始上证指数的每日开盘数归一化后的图像
plot(TS,'
原始上证指数的每日开盘数归一化后的图像'
归一化后的开盘数'
%对TS进行转置,以符合libsvm工具箱的数据格式要求
TS=TS'
%mapminmax为matlab自带的映射函数
%对tsx进行归一化
[TSX,TSXps]=mapminmax(tsx,1,2);
%对TSX进行转置,以符合libsvm工具箱的数据格式要求
TSX=TSX'
%%选择回归预测分析最佳的SVM参数c&
g
%首先进行粗略选择:
[bestmse,bestc,bestg]=SVMcgForRegress(TS,TSX,-8,8,-8,8);
%打印粗略选择结果
disp('
打印粗略选择结果'
str=sprintf('
BestCrossValidationMSE=%gBestc=%gBestg=%g'
bestmse,bestc,bestg);
disp(str);
%根据粗略选择的结果图再进行精细选择:
[bestmse,bestc,bestg]=SVMcgForRegress(TS,TSX,-4,4,-4,4,3,0.5,0.5,0.05);
%打印精细选择结果
打印精细选择结果'
%%利用回归预测分析最佳的参数进行SVM网络训练
cmd=['
-c'
num2str(bestc),'
-g'
num2str(bestg),'
-s3-p0.01'
];
model=svmtrain(TS,TSX,cmd);
%%SVM网络回归预测
[predict,mse]=svmpredict(TS,TSX,model);
predict=mapminmax('
reverse'
predict'
TSps);
predict=predict'
%打印回归结果
均方误差MSE=%g相关系数R=%g%%'
mse
(2),mse(3)*100);
%%结果分析
holdon;
-o'
plot(predict,'
r-^'
legend('
原始数据'
回归预测数据'
holdoff;
原始数据和回归预测数据对比'
error=predict-ts'
plot(error,'
rd'
误差图(predicteddata-originaldata)'
误差量'
error=(predict-ts'
)./ts'
相对误差图(predicteddata-originaldata)/originaldata'
相对误差量'
snapnow;
toc;
%%子函数SVMcgForRegress.m
function[mse,bestc,bestg]=SVMcgForRegress(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,msestep)
%SVMcgcrossvalidationbyfaruto
%byfaruto
%Email:
patrick.lee@QQ:
516667408BNU
%lastmodified2010.01.17
%SuperModerator@
%若转载请注明:
%farutoandliyang,LIBSVM-farutoUltimateVersion
%atoolboxwithimplementsforsupportvectormachinesbasedonlibsvm,2009.
%Softwareavailableat
%
%Chih-ChungChangandChih-JenLin,LIBSVM:
alibraryfor
%supportvectormachines,2001.Softwareavailableat
%http:
//www.csie.ntu.edu.tw/~cjlin/libsvm
%abouttheparametersofSVMcg
ifnargin<
10
msestep=0.06;
end
8
cstep=0.8;
gstep=0.8;
7
v=5;
5
gmax=8;
gmin=-8;
3
cmax=8;
cmin=-8;
%X:
cY:
gcg:
acc
[X,Y]=meshgrid(cmin:
cstep:
cmax,gmin:
gstep:
gmax);
[m,n]=size(X);
cg=zeros(m,n);
eps=10^(-4);
bestc=0;
bestg=0;
mse=Inf;
basenum=2;
fori=1:
m
forj=1:
n
cmd=['
-v'
num2str(v),'
-c'
num2str(basenum^X(i,j)),'
num2str(basenum^Y(i,j)),'
-s3-p0.1'
cg(i,j)=svmtrain(train_label,train,cmd);
ifcg(i,j)<
mse
mse=cg(i,j);
bestc=basenum^X(i,j);
bestg=basenum^Y(i,j);
end
ifabs(cg(i,j)-mse)<
=eps&
&
bestc>
basenum^X(i,j)
end
%todrawtheaccwithdifferentc&
g
[cg,ps]=mapminmax(cg,0,1);
[C,h]=contour(X,Y,cg,0:
msestep:
0.5);
clabel(C,h,'
10,'
Color'
r'
log2c'
log2g'
firstline='
SVR参数选择结果图(等高线图)[GridSearchMethod]'
secondline=['
Bestc='
num2str(bestc),'
g='
num2str(bestg),...
'
CVmse='
num2str(mse)];
title({firstline;
secondline},'
Fontsize'
meshc(X,Y,cg);
%mesh(X,Y,cg);
%surf(X,Y,cg);
axis([cmin,cmax,gmin,gmax,0,1]);
zlabel('
MSE'
SVR参数选择结果图(3D视图)[GridSearchMethod]'