机器学习:尝试预测股价(线性回归,神经网络)

文章目录

  • 简介
  • 线性回归
  • 神经网络
  • 结论:很丧

简介

本次项目使用了2017年5月之前近1000天的英国富时100指数(FTSE)作为训练数据,试图根据之前的数据预测未来一天的指数走向。
富时100指数数据库

线性回归

% 清空matlab中的数据
clear all;
close all;

% 打开文件
data=csvread('TR4DER_^FTSE_20170512.csv');
[raw col]=size(data);
D=raw;
p=20;
X=data(:,4);
% 原始数据归一化
mean_X=mean(X);
std_X=std(X);
X=X-mean_X;
X=X/std_X;
% 产生训练集和测试集
for i=1:1:D-p
    for j=1:1:p
        x_train(i,j)=X(i+j-1);
    end
    y_train(i,1)=X(i+p);
end;

for i=1:1:p
    x_test(1,i)=X(D-p-1+i);
end
% 使用线性回归法预测
w = inv(x_train'*x_train)*x_train'*y_train;
predict_1=x_train*w;
% 计算实际股价变动趋势和预测股价变动趋势,1为上涨,-1为下跌
for i=1:1:D-p
    trend_true(i)=sign(y_train(i)-x_train(i,p));
    trend_predict_1(i)=sign(predict_1(i)-x_train(i,p));
end
% 显示成功预测趋势的天数,总共1000天
disp(size(find(trend_true~=trend_predict_1)));
% 绘制误差分布图
figure(1),
plot(y_train-predict_1);
% 绘制实际股价和预测股价趋势图
figure(2),
plot(y_train,'r');
hold on;
plot(predict_1,'b');

结果:1000天的预测中,预测成功460次,失败540次,几乎是五五开,说明线性回归法预测完全没有参考意义。

神经网络

需要为matlab安装Deep Learning Toolbox

% 清空matlab中的数据
clear all;
close all;

% 打开文件
data=csvread('TR4DER_^FTSE_20170512.csv');
[raw col]=size(data);
D=raw;
p=20;
X=data(:,4);
% 原始数据归一化
mean_X=mean(X);
std_X=std(X);
X=X-mean_X;
X=X/std_X;
% 产生训练集和测试集
for i=1:1:D-p
    for j=1:1:p
        x_train(i,j)=X(i+j-1);
    end
    y_train(i,1)=X(i+p);
end;

for i=1:1:p
    x_test(1,i)=X(D-p-1+i);
end

% 使用matlab自带神经网络预测,需要“Deep Learning Toolbox(R2018b)”附加功能
net = feedforwardnet(15);
net = train(net,x_train',y_train');
predict_2=net(x_train');
predict_2=predict_2';
for i=1:1:D-p
    trend_true(i)=sign(y_train(i)-x_train(i,p));
    trend_predict_2(i)=sign(predict_2(i)-x_train(i,p));
end
% 显示成功预测趋势的天数,总共1000天
disp(size(find(trend_true~=trend_predict_2)));
% 绘制误差分布图
figure(3),
plot(y_train-predict_2);
% 绘制实际股价和预测股价趋势图
figure(4),
plot(y_train,'r');
hold on;
plot(predict_2,'b');

结果:预测次日股价变化趋势成功次数大约为450次,依然没有参考意义。

结论:很丧

通过纯数学运算预测未来股价是不可能的,造成股市波动的原因很多,且完全没有规律可言,人工智能在不依靠社会事件输入的情况下不可能做出判断,哪怕是一点参考价值都没有。

你可能感兴趣的:(机器学习,MATLAB)