目录
神经网络(NeuralNetworks)是一种用训练数据拟合目标函数的黑箱模型,只要数据量足够大,它可以拟合出输入到输出之间的任意函数关系。
本篇博文将使用TensorFlow神经网络进行股市的预测,利用数据样本学习,得到相关因素预测股票走势。
1、数据来源
首先预设一组数据,下图为股票上证指数2019年07月到2019年09月的30天开盘价格和收盘价格。
数据在程序中实现,代码如下所示:
-
date = np.linspace(
1,
30,
30)
-
beginPrice = np.array([
2923.19,
2928.06,
2943.92,
2946.26,
2944.40,
2920.85,
2861.33,
2854.58,
2776.69,
2789.02,
-
2784.18,
2805.59,
2781.98,
2798.05,
2824.49,
2762.34,
2817.57,
2835.52,
2879.08,
2875.47,
-
2887.66,
2885.15,
2851.02,
2879.52,
2901.63,
2896.00,
2907.38,
2886.94,
2925.94,
2927.75])
-
endPrice = np.array([
2937.36,
2944.54,
2941.01,
2952.34,
2932.51,
2908.77,
2867.84,
2821.50,
2777.56,
2768.68,
-
2794.55,
2774.75,
2814.99,
2797.26,
2808.91,
2815.80,
2823.82,
2883.10,
2880.00,
2880.33,
-
2883.44,
2897.43,
2863.57,
2902.19,
2893.76,
2890.92,
2886.24,
2924.11,
2930.15,
2957.41])
2、数据可视化
基于matplotlib可视化库,建立一个30行2列的矩阵存储股票数据,矩阵的第一列输入上列数据中的股票开盘价格,第二列输入股票的收盘价格,如果股票的收盘价格高于开盘价格则用红色显示,反之则用绿色显示,可视化股票数据如下图所示。采用本实例所设计的神经网络预测股票收盘均价,并可视化预测结果。
使用前需要安装matplotlib模块,指令如下所示:
pip install matplotlib
实现代码如下所示:
-
for i
in range(
0,
30):
# 画柱状图
-
dateOne = np.zeros([
2])
-
dateOne[
0] = i;
-
dateOne[
1] = i;
-
priceOne = np.zeros([
2])
-
priceOne[
0] = beginPrice[i]
-
priceOne[
1] = endPrice[i]
-
if endPrice[i]>beginPrice[i]:
-
plt.plot(dateOne,priceOne,
'r',lw=
6)
-
else:
-
plt.plot(dateOne,priceOne,
'g',lw=
6)
-
plt.xlabel(
"date")
-
plt.ylabel(
"price")
3、神经网络设计
基于TensorFlow框架,设计三层神经网络,隐含层包括25个节点,利用所设计的神经网络来预测股票的收盘均价。使用前需要安装TensorFlow模块,指令如下所示:
pip install tensorflow
【拓展】4行指令解决pip下载Python第三方库太慢问题(pip更换国内下载源)
实现代码如下所示:
-
dateNormal = np.zeros([
30,
1])
-
priceNormal = np.zeros([
30,
1])
-
#归一化
-
for i
in range(
0,
30):
-
dateNormal[i,
0] = i/
29.0;
-
priceNormal[i,
0] = endPrice[i]/
3000.0;
-
x = tf.placeholder(tf.float32,[
None,
1])
-
y = tf.placeholder(tf.float32,[
None,
1])
-
# X->hidden_layer
-
w1 = tf.Variable(tf.random_uniform([
1,
25],
0,
1))
-
b1 = tf.Variable(tf.zeros([
1,
25]))
-
wb1 = tf.matmul(x,w1)+b1
-
layer1 = tf.nn.relu(wb1)
# 激励函数
-
# hidden_layer->output
-
w2 = tf.Variable(tf.random_uniform([
25,
1],
0,
1))
-
b2 = tf.Variable(tf.zeros([
30,
1]))
-
wb2 = tf.matmul(layer1,w2)+b2
-
layer2 = tf.nn.relu(wb2)
-
loss = tf.reduce_mean(tf.square(y-layer2))
#y为真实数据, layer2为网络预测结果
-
#梯度下降
-
train_step = tf.train.GradientDescentOptimizer(
0.1).minimize(loss)
-
with tf.Session()
as sess:
-
sess.run(tf.global_variables_initializer())
-
for i
in range(
0,
20000):
-
sess.run(train_step,feed_dict={x:dateNormal,y:priceNormal})
-
#预测, X w1w2 b1b2 -->layer2
-
pred = sess.run(layer2,feed_dict={x:dateNormal})
-
predPrice = np.zeros([
30,
1])
-
for i
in range(
0,
30):
-
predPrice[i,
0]=(pred*
3000)[i,
0]
-
plt.plot(date,predPrice,
'b',lw=
1)
-
plt.show()
运行以上代码可视化神经网络的预测结果如下图所示:
关注公众号,回复关键字:股票预测,获取项目源码~
转载:https://blog.csdn.net/m0_38106923/article/details/108956942
查看评论