股市预测python代码<循环神经网络>

数据集:(百度网盘)
链接:https://pan.baidu.com/s/1ozBoPhO7LU06z9mNlufbmg
提取码:59vk

#基于。csv数据没建立rnn模型,预测
# 1.数据预处理,将序列数据转化为可用于rnn输入的数据
# 2.对新数据进行预测(预测数据集),可视化结果
# 3.存储预测结果(csv文件),并观察局部预测结果(局限性)
#模型结构:单纯rnn,输出有五个神经元,每次使用前8个数据预测第9个数据

import pandas as pd
import numpy as np
data = pd.read_csv('D:\\pydata\\zgpa_train.csv')

data.head()
price = data.loc[:,'close']
price.head()

#归一化处理
price_norm = price/max(price)
print(price_norm)

#可视化
from matplotlib import pyplot as plt
fig1=plt.figure(figsize=(8,5))#建立图形
plt.plot(price)#画图
#加标注
plt.title('close price')
plt.xlabel('time')
plt.ylabel('price')
plt.show()

#xy的赋值

#define X and y
#define method to extract X and y

#提取数据序列
def extract_data(data,time_step):
    X=[]
    y=[]
    #0,1,2,3...9:10个样本;time_step=8;0,1,2..7;12,3,...9
    for i in range(len(data)-time_step):
        X.append([a for a in data[i:i+time_step]])#X数组是训练集
        y.append(data[i+time_step])#y是预测集
    X = np.array(X)#转换为一个数组
    X = X.reshape(X.shape[0],X.shape[1],1)
    return X,y

time_step = 8
X,y = extract_data(price_norm,time_step)
print("Xshape:")
print(X.shape)
print(y)

from keras.models import Sequential
from keras.layers import Dense,SimpleRNN
model = Sequential()

#单层有五个神经元units,input_shape(样本数,序列长度,序列维度):数据是一维的,activation:激活函数
model.add(SimpleRNN(units = 5, input_shape=(time_step,1),activation='relu'))
#输出数值:索引神经元为1;线性(回归预测常用)
#输出y的一层
model.add(Dense(units=1,activation='linear'))

#configure the model
#(优化器,损失函数)
#平方差mean_squared_errar
model.compile(optimizer='adam',loss='mean_squared_error')
model.summary()

#模型训练
#打印X,y的维度
#print(X.shape(X),len(y))
#训练样本,每次30个样本,共训练200次
y=np.array(y);
model.fit(X,y,batch_size=30,epochs=200)


#预测结果可视化
y_train_predict = model.predict(X)*max(price)
#y_train = [i*max(price) for i in y]#把归一化之后的数值转换过来
y_train = y*max(price)
print(y_train_predict,y_train)

fig2=plt.figure(figsize=(8,5))#建立图形
plt.plot(y_train,label='real price')#画图
plt.plot(y_train_predict,label='predict price')#画图
#加标注
plt.title('close price')
plt.xlabel('time')
plt.ylabel('price')
plt.legend()
plt.show()


#predict

data_test = pd.read_csv('D:\\pydata\\zgpa_test.csv')
data_test.head()
price_test = data_test.loc[:,'close']
price_test.head()
price_test_norm = price_test/max(price)#归一化
X_test_norm,y_test_norm = extract_data(price_test_norm,time_step)
print(X_test_norm.shape,len(y_test_norm))

y_test_predict = model.predict(X_test_norm)*max(price)
y_test_norm=np.array(y_test_norm);
y_test = y_test_norm*max(price)

fig3=plt.figure(figsize=(8,5))#建立图形
plt.plot(y_test,label='real price test')#画图
plt.plot(y_test_predict,label='predict price test')#画图
#加标注
plt.title('close price')
plt.xlabel('time')
plt.ylabel('price')
plt.legend()
plt.show()

for i in range(0,len(y_test_predict)):
    totforenum=abs(y_test_predict[i]-y_test[i]);
    totnum=y_test[i];
totnum/=len(y_test_predict);
totforenum/=len(y_test_predict);
print("平均误差率:",end="");
print(totforenum/totnum*100,end="");
print("%");


#存储数据
result_y_test = np.array(y_test).reshape(-1,1)
result_y_test_predict = y_test_predict
print(result_y_test.shape,result_y_test_predict.shape)
result = np.concatenate((result_y_test,result_y_test_predict),axis = 1)
print(result.shape)
result = pd.DataFrame(result,columns=['real_price_test','predict_price_test'])
result.to_csv('zapa_predict_test.csv')

运行结果
预测结果

多跑几次的预测结果不一样,神经网络好奇妙嗷

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐