根据波士顿房价预测例子改编的tensorflow股票价格预测

注:本文仅作为tensorflow入门学习参考,对于结果请勿较真

导入相应的包

import tensorflow as tf
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.utils import shuffle

读取股票数据文件

data = pd.read_csv('000001.SZ.CSV',encoding='gbk',usecols = [4,5,6,7,20,21])
data.head(5)
开盘价(元)最高价(元)最低价(元)收盘价(元)市盈率市净率
00.56980.56980.56980.569833.531010.0482
10.56700.56700.56700.567033.36679.9990
20.56420.56420.56420.564233.20259.9498
30.55860.55860.55860.558632.87409.8514
40.55590.55590.55590.555932.70989.8022

将次日的开盘价作为今日要预测的数据y_pred

y_pred = np.zeros(data.shape[0])
for i in range(len(data)-1):
    y_pred[i] = round(data['开盘价(元)'][i+1],4)
data['y_pred'] = y_pred
data.tail(5)
开盘价(元)最高价(元)最低价(元)收盘价(元)市盈率市净率y_pred
613910.4710.4810.4210.466.84510.926710.47
614010.4710.5210.4110.506.87130.930310.51
614110.5110.5310.4510.516.87780.931210.52
614210.5210.5310.4810.526.88440.932110.54
614310.5410.5410.4610.506.87130.93030.00

最后一行的数据是没有y_pred的,所以直接把最后一整行都删掉
我们的目标就是将前六列的数据输入到模型中,然后让模型输出一个尽可能接近y_pred的值
也就是用今日的开盘价(元)、最高价(元)、最低价(元)、收盘价(元)、市盈率、市净率来预测明天的开盘价

stockdatas = data.drop(data.index[-1]).values
x_data = stockdatas[:,:6]
y_data = stockdatas[:,6]
# 输出最后一行的值
print(x_data[-1])
print(y_data[-1])
[10.52   10.53   10.48   10.52    6.8844  0.9321]
10.54

归一化训练样本x_data

scaler = MinMaxScaler()
scaler.fit(x_data)
X_data = scaler.transform(x_data)
X_data[-1]
array([0.59144014, 0.59188214, 0.61441079, 0.59880055, 0.02325307,
       0.00445284])

定义模型 y_pred = x * w + b ,注意第一个矩阵的列数要和第二个矩阵的行数相同

x = tf.placeholder(tf.float32, [None,6], name='X')
y = tf.placeholder(tf.float32, [None,1], name='Y')
with tf.name_scope('Model'):
    w = tf.Variable(tf.random_normal([6,1],stddev=0.01),name='W')
    b = tf.Variable(1.0,name='b')
    def model(x,w,b):
        return tf.matmul(x,w) + b
    pred  = model(x,w,b)

定义损失函数和优化器

train_epochs = 3
learning_rate = 0.01
with tf.name_scope('lossfunc'):
    loss_function = tf.reduce_mean(tf.pow(y-pred,2))
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)

开始训练

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
for e in range(train_epochs):
    loss_sum = 0.0
    for xs, ys in zip(X_data, y_data):
        xs = xs.reshape(1,6)
        ys = ys.reshape(1,1)
        _,loss = sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})
        loss_sum = loss_sum + loss
    X_data, y_data = shuffle(X_data,y_data)
    b0 = sess.run(b)
    w0 = sess.run(w)
    loss_avg = loss_sum/len(y_data)
    print('epoch={},lossavg={},w={},b={}'.format(e,loss_avg,w0,b0))
epoch=0,lossavg=0.13093365134630774,w=[[2.2813892]
 [2.410216 ]
 [2.3408403]
 [2.4081025]
 [2.2087398]
 [2.3941853]],b=4.765807628631592
epoch=1,lossavg=0.19175580245865206,w=[[4.057511  ]
 [4.264938  ]
 [4.190086  ]
 [4.2901344 ]
 [0.01645006]
 [0.01836737]],b=0.41750502586364746
epoch=2,lossavg=0.012530410840827653,w=[[4.0354447 ]
 [4.2829742 ]
 [4.2025666 ]
 [4.34924   ]
 [0.01506332]
 [0.01617897]],b=0.4302012026309967

训练完成,输一行数据进去看看效果

xtest = X_data[1050].reshape(1,-1)
pred_val = sess.run(pred, feed_dict={x:xtest})
pred_val
array([[16.004889]], dtype=float32)

看看真实的结果

y_data[1050]
15.51
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值