-
%% SVM
神经网络的信息粒化时序回归预测
----
上证指数开盘指数变化趋势和变化空间预测
%%
清空环境变量
function
chapter15
tic;
close all;
clear;
clc;
format compact;
%%
原始数据的提取
%
载入测试数据上证指数
(1990
.12.19-2009.08.19)
%
数据是一个
p>
4579*6
的
double
型的矩阵
,
每一行表示每一天的上证指数
%
6
列分别表示当天
上证指数的开盘指数
,
指数最高值
,<
/p>
指数最低值
,
收盘指数
< br>,
当日交易量
,
当
日交易额
.
load chapter15_;
%
提取数据
ts =
sh_open;
time = length(ts);
%
画出原始上证指数的每日开盘数
figure;
plot(ts,'LineWidth',2);
titl
e('
上证指数的每日开盘数
(1990.12.20-200
9.08.19)','FontSize',12);
xlabel('
交易日天数
(1990.12.19-2009.08.19)','Fo
ntSize',12);
ylabel('
开盘数
','FontSize',12);
grid on;
print -dtiff -r600 original;
snapnow;
%%
对原始数据进行模糊信息粒化
win_num = floor(time/5);
tsx = 1:win_num;
tsx = tsx';
[Low,R,Up]=FIG_D(ts','triangle',win_num
);
%
模糊信息粒化可视化图
figure;
hold on;
plot(Low,'b+');
plot(R,'r*');
plot(Up,'gx');
hold off;
legend('Low','R','Up',2);
ti
tle('
模糊信息粒化可视化图
','FontSize',
12);
xlabel('
粒化窗口数目
','FontSize',12);
ylabel('
粒化值
','FontSize',12);
grid
on;
print -dtiff -r600 FIGpic;
snapnow;
%%
利用
SVM
对
Low<
/p>
进行回归预测
%
数据预处理
,
将
Low
进行归一化处理
% mapminmax
为
matla
b
自带的映射函数
[low,low_ps] = mapminmax(Low);
low_ = 100;
low_ = 500;
%
对
Low
进行归一化
[low,low_ps] =
mapminmax(Low,low_ps);
%
画出<
/p>
Low
归一化后的图像
figure;
plot(low,'b+');
title('Low
归一化后的图像
','F
ontSize',12);
xlabel('
粒化窗口数目
','FontSize',12);
ylabel('
p>
归一化后的粒化值
','FontSize',12);
grid on;
print -dtiff -r600
lowscale;
%
对
low<
/p>
进行转置
,
以符合
libsvm
工具箱的数据格式要求
low = low';
snapnow;
%
选择回归预测分析中最佳的
p>
SVM
参数
c&g
%
首先进行粗略选择
[bestmse,bestc,bestg] = SVMcgForRegress
(low,tsx,-10,10,-10,10,3,1,1,0.1,1);
%
打印粗略选择结果
disp('
打印粗略选择结果
');
str
=
sprintf(
'SVM
parameters
for
Low:Best
Cross
Validation
MSE
=
%g
Best
c
=
%g
Best
g
= %g',bestmse,bestc,bestg);
disp(str);
%
根据粗略选择的结果图再进行精细选择
[bestmse,bestc,bestg] = SVMcgForRegress
(low,tsx,-4,8,-10,10,3,0.5,0.5,0.05,1);
%
打印精细选择结果
disp('
打印精细选择结果
');
str
=
sprintf(
'SVM
parameters
for
Low:Best
Cross
Validation
MSE
=
%g
Best
c
=
%g
Best
g
= %g',bestmse,bestc,bestg);
disp(str);
%
训练
SVM
cmd = ['-c
', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3
-p 0.1'];
low_model = svmtrain(low,
tsx, cmd);
%
预测
[low_predict,low_mse] =
svmpredict(low,tsx,low_model);
low_predict =
mapminmax('reverse',low_predict,low_ps);
predict_low =
svmpredict(1,win_num+1,low_model);
predict_low =
mapminmax('reverse',predict_low,low_ps);
predict_low
%% <
/p>
对于
Low
的回归预测结果分析
figure;
hold on;
plot(Low,'b+');
plot(low_predict,'r*');
legend('original low','predict low',2);
title('original vs
predict','FontSize',12);
xlabel('
粒化窗口数目
','FontSize',12);
ylabel('
粒化值
','FontSize',12)
;
grid on;
print -dtiff
-r600 lowresult;
figure;
error = low_predict - Low';
plot(error,'ro');
title('
误差
(predicted data-original
data)','FontSize',12);
xlabel('
< br>粒化窗口数目
','FontSize',12);
y
label('
误差量
','FontSize',12);
grid on;
print -dtiff -r600
lowresulterror;
snapnow;
%%
利用
SVM
对
R
进行回归预测
%
数据预处理
,
将
R
进行归一化处
理
% mapminmax
为
matlab
自带的映射函数
[r,r_ps] = mapminmax(R);
r_
= 100;
r_ = 500;
%
对
R
进行归一化
[r,r_ps] = mapminmax(R,r_ps);
%
画出
R
归
一化后的图像
figure;
plot(r,'r*');
title('r
归一化后的图像
','FontSize',12);
grid on;
%
对
R
进行转置
,
以符合
p>
libsvm
工具箱的数据格式要求
r = r';
snapnow;
%
选择回归预测分析中最佳的
SVM
参数
c&g
%
首先进行粗略选择
[bestmse,bestc,bestg] =
SVMcgForRegress(r,tsx,-10,10,-10,10,3,1,1,0.1);
%
打印粗略选择结果
disp('
打印粗略选择结果
');
str
=
sprintf(
'SVM
parameters
for
R:Best
Cross
Validation
MSE
=
%g
Best
c
=
%g
Best
g
=
%g',bestmse,bestc,bestg);
disp(str);
%
根据粗略选择的结果图再进行精细选择
[bestmse,bestc,bestg] =
SVMcgForRegress(r,tsx,-4,8,-10,10,3,0.5,0.5,0.05);
%
打印精细选择结果
disp('
打印精细选择结果
');
str
=
sprintf(
'SVM
parameters
for
R:Best
Cross
Validation
MSE
=
%g
Best
c
=
%g
Best
g
=
%g',bestmse,bestc,bestg);
disp(str);
%
训练
SVM
cmd = ['-c
', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3
-p 0.1'];
r_model = svmtrain(r, tsx,
cmd);
%
预测
[r_predict,r_mse] =
svmpredict(r,tsx,low_model);
r_predict
= mapminmax('reverse',r_predict,r_ps);
predict_r =
svmpredict(1,win_num+1,r_model);
predict_r =
mapminmax('reverse',predict_r,r_ps);
predict_r
%%
对于
R
的回归预测结果分析
< br>
figure;
hold on;
plot(R,'b+');
plot(r_predict,'r*');
legend('original r','predict r',2);
title('original vs
predict','FontSize',12);
grid on;
figure;
error = r_predict -
R';
plot(error,'ro');
title(
'
误差
(predicted data-original
data)','FontSize',12);
grid on;
snapnow;
%%
利用
SVM
对
Up
p>
进行回归预测
%
数据预处理
,
将
up
进行归一化处理
% mapminmax
为
matla
b
自带的映射函数
[up,up_ps] = mapminmax(Up);
up_ = 100;
up_ = 500;
%
对
Up
进
行归一化
[up,up_ps] =
mapminmax(Up,up_ps);
%
画出
Up
归一化后的图像
figure;
plot(up,'gx');
title('Up
归一化后的图像
','Fon
tSize',12);
grid on;
%
对
up
进行转置
,
以符合
libsvm
工具箱的数据格式要求<
/p>
up = up';
snapnow;
%
选择回归预测分析中最佳的
SVM
参数
c&g
%
首先进行粗略选择
[bestmse,bestc,bestg] =
SVMcgForRegress(up,tsx,-10,10,-10,10,3,1,1,0.5);
%
打印粗略选择结果
disp('
打印粗略选择结果
');
str
=
sprintf(
'SVM
parameters
for
Up:Best
Cross
Validation
MSE
=
%g
Best
c
=
%g
Best
g
=
%g',bestmse,bestc,bestg);
disp(str);
%
根据粗略选择的结果图再进行精细选择
[bestmse,bestc,bestg] =
SVMcgForRegress(up,tsx,-4,8,-10,10,3,0.5,0.5,0.2);
%
打印精细选择结果
disp('
打印精细选择结果
');
str
=
sprintf(
'SVM
parameters
for
Up:Best
Cross
Validation
MSE
=
%g
Best
c
=
%g
Best
g
=
%g',bestmse,bestc,bestg);
disp(str);
%
训练
SVM
cmd = ['-c
', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3
-p 0.1'];
up_model = svmtrain(up, tsx,
cmd);
%
预测
[up_predict,up_mse] =
svmpredict(up,tsx,up_model);
up_predict
= mapminmax('reverse',up_predict,up_ps);
predict_up =
svmpredict(1,win_num+1,up_model);
predict_up =
mapminmax('reverse',predict_up,up_ps);
predict_up
%%
p>
对于
Up
的回归预测结果分析
figure;
hold on;
plot(Up,'b+');
plot(up_predict,'r*');
legend('original up','predict up',2);
title('original vs
predict','FontSize',12);
grid on;
figure;
error = up_predict -
Up';
plot(error,'ro');
title
('
误差
(predicted data-original
data)','FontSize',12);
grid on;
toc;
snapnow;
%%
子函数
SVMcgForRegress.m
function
[mse,bestc,bestg]
=
< br>SVMcgForRegress(train_label,train,cmin,cmax,gmi n,gmax,v,cstep,gstep,msestep,flag)
%
SVMcgForClass
%
输入
:
% train_label
:
训练集标签
.
要求与
libsvm
工具箱中要求一致
.
% train:
训练集
.
要求与
libsvm
工具箱中要求一致
.
% cmin:
惩罚参数
c
的变化范围的最小值
(
取以
p>
2
为底的对数后
),
即
c_min =
2^(cmin).
默认为
-5
%
cmax:
惩罚参数
c
的变化范围的最大值
(
取
以
2
为底的对数后
),
即
c_max =
2^(cmax).
默认为
5
% gmin:
参数
g
的变化范围的最小值
(
取以
2
为底的对数后
),
即
< br>
g_min =
2^(gmin).
默认为
-5
% gmax:
参数
g
的变化范围的最小值
(
取以
2
为底的对数后
),
即
< br>
g_min =
2^(gmax).
默认为
5
% v:cross validation
的参数
,
即给测试集分为几部分进行
cross
validation.
默认为
3
% cstep:
参数
c
步进的大小
.
默认为
1
% gstep:
参数
g
步进的大小
.
默认为<
/p>
1
% msestep:
最后显示
MSE
图时的步进大小
< br>.
默认为
20
%
输出
:
% bestacc:Cross Validation
过程中的最高分类准确率
%
bestc:
最佳的参数
c
%
bestg:
最佳的参数
g
% about the parameters of
SVMcgForRegress
if nargin < 11
flag = 0;
end
if
nargin < 10
msestep = 0.1;
end
if nargin < 7
msestep = 0.1;
v = 3;
cstep = 1;
gstep = 1;
end
if nargin < 6
msestep = 0.1;
v = 3;
cstep = 1;
gstep = 1;
gmax = 5;
end
if
nargin < 5
msestep = 0.1;
v =
3;
cstep = 1;
gstep = 1;
gmax = 5;
gmin = -5;
end
if nargin < 4
msestep = 0.1;
v = 3;
cstep = 1;
-
-
-
-
-
-
-
-
-
上一篇:关于英语优美诗歌阅读
下一篇:美国文学期末考试-诗歌赏析部分