bp神经网络预测_R语言的BP神经网络股票预测

1.读取数据

a=read.table("E://金科文化.csv",sep=",",header=T)

x0=a[,2:13];x0

bp神经网络预测_R语言的BP神经网络股票预测_第1张图片

2.数据的归一化处理(消除量纲的影响,不改变数据表达的内在规律)

90a223f5cd9adcf5be088c82f3adb1db.png

#对输入矩阵进行归一化处理(0到1)

p=function(x){

return((x-min(x))/(max(x)-min(x)))}

x=as.data.frame(lapply(x0,p));x

bp神经网络预测_R语言的BP神经网络股票预测_第2张图片

3.检查是否转化完成

最大值是1,最小值是0,即转化完成。

summary(x$收盘价)

summary(x0$收盘价)#作比较

4.数据处理前后对比

par(mfrow=c(1,2))

plot(x0$收盘价)

plot(x$收盘价)

bp神经网络预测_R语言的BP神经网络股票预测_第3张图片

基本保持了原始数据的走势规律,说明归一化不改变数据要表达的原始意义。

5.选取训练集和测试集

#数据筛选(通过相关性检验取相关性强的系数,就是做降维,一般用典型相关和主成分分析)

data=x[,c(1:5,9,11)];data

train=data[1:500,];train

test=data[501:655,];test

选取收盘价为输出变量即因变量,最高价、最低价、开盘价、前收盘、成交量、总市值为输入变量即自变量

6.训练神经网络

隐节点的选取我采用:

0bf6e6020e6d964e37ca3257c9fb9c99.png

install.packages("neuralnet")

library(neuralnet)

#训练3层7个隐藏神经元的神经网络(依次选3-13的隐神经元训练,最后选取最优的隐层神经元个数)

model7=neuralnet(收盘价~最高价+最低价+开盘价+前收盘+成交量+总市值,train,hidden=7,threshold=0.01,learningrate=0.01)

plot(model7)#绘制神经网络拓扑图

bp神经网络预测_R语言的BP神经网络股票预测_第4张图片

7.对测试集做预测

model7_result=compute(model7,test)

predict7=model7_result$net.result#获得预测值

cor(predict7,test$收盘价)#预测值与真实值之间的相关性

f748bf8e05ee72964fbab221d5de8349.png

预测准确度达到99.07%

8.可视化

par(mfrow=c(1,2))

plot(test$收盘价,model_,col='red',main='Real vs predicted',pch=18,cex=0.7)

abline(0,1,lwd=2)

#交叉检验(计算平均预测误差)

library(boot)

library(plyr)

set.seed(450)

K=10

cv.error=NULL

pbar=create_progress_bar("text")

pbar$init(K)

for(i in 1:K){

train.cv=data[1:500,]

test.cv=data[501:655,]

nn=neuralnet(收盘价~最高价+最低价+开盘价+前收盘+成交量+总市值,train.cv,hidden=7,threshold=0.01,learningrate=0.01,likelihood=T)

pr.nn=compute(nn,test.cv)

pr.nn=pr.nn$net.result*(max(x0$收盘价)-min(x0$收盘价))+min(x0$收盘价)

test.cv.r=(test.cv$收盘价)*(max(x0$收盘价)-min(x0$收盘价))+min(x0$收盘价)

cv.error[i]=sum((test.cv.r-pr.nn)^2)/nrow(test.cv)

pbar$step()

}

mean(cv.error)

cv.error

boxplot(cv.error,xlab='MSE CV',col='cyan',border='blue',names='CV error (MSE)',main='CV error (MSE) for NN',horizontal=TRUE)

bp神经网络预测_R语言的BP神经网络股票预测_第5张图片

箱线图可以看出平均误差为0.03

9.预测

训练集的预测值与真实值对比图和预测输出与实际输出的误差图

par(mfrow=c(1,2))

plot(model7$net.result[[1]],type='l',col='red')

points(train$收盘价,col='blue',type='l')

legend("bottomright",legend=c("红色—预测值","蓝色—真实值"))

percent7=(model7$net.result[[1]]-train$收盘价)*100/train$收盘价

plot(percent7,type='l',ylim=c(-100,100),ylab="训练集误差",xlab="时间")

bp神经网络预测_R语言的BP神经网络股票预测_第6张图片

测试集的预测值与真实值对比图和预测输出与实际输出的误差图

par(mfrow=c(1,2))

plot(predict7,type='l',col='red')

points(test$收盘价,col='blue',type='l')

legend("bottomright",legend=c("红色—预测值","蓝色—真实值"))

percent7=(predict7-test$收盘价)*100/test$收盘价

plot(percent7,type='l',ylim=c(-200,200),ylab="测试集误差",xlab="时间")

bp神经网络预测_R语言的BP神经网络股票预测_第7张图片

可以看出神经网络在短期内的预测输出与实际输出之间误差较小,但在长期内的误差震荡较大,预测值输出与实际值输出之间的偏离程度非常大,因而BP神经网络在对于长期股票的预测中存在着较大的缺陷。

(利用预测值还可以做股票的涨跌趋势)

10.总结

股价的短期行为包含了非线性的映射关系,神经网络很好地解决了非线性映射关系,且具有很强的自学习能力。BP神经网络在一定程度上可以实现对短期股票收盘价较为准确的预测,但对与长期股票的预测并不理想,在实际的股票投资中,BP神经网络可以为短期的预测提供一定的借鉴,对于长期的投资预测仍有待对预测模型进一步修正。

你可能感兴趣的:(bp神经网络预测,bp神经网络预测模型,bp网络预测模型,python)