0


基于BP神经网络使用开盘价、最高价、最低价预测收盘价

以下是本文所用数据~~~

一、直接上手撸代码

  1. import pandas as pd
  2. import numpy as np
  3. import math
  4. data = pd.read_excel('上证指数.xls')
  5. data = np.array(data.iloc[3:-1,1:])
  6. e = 1
  7. ita = 0.0035
  8. #sigmoid
  9. def sigmoid(x):
  10. return 1/(1+np.exp(-x))
  11. #sigmoid导函数
  12. def sigmoid_derivation(x):
  13. return np.exp(x)/(np.exp(x)+1)**2
  14. #将整个矩阵归一化
  15. max1 = data.max(axis = 0)
  16. min1 = data.min(axis = 0)
  17. t = np.empty((len(data),4))
  18. for i in range(4):
  19. t[:,i] = (data[:,i]-min1[i])/(max1[i]-min1[i])
  20. #截取训练集和测试集,这里使用了最后一天为测试集
  21. train = t[:-1,:-1]#训练集
  22. train_result = t[:-1,-1]#训练结果
  23. test = t[-1,:-1]#测试集
  24. test_result = t[-1,-1]#测试结果
  25. #初始化权重和偏置值
  26. w2 = np.random.random((3,3))
  27. b2 = np.random.random((3,1))
  28. w3 = np.random.random((1,3))
  29. b3 = np.random.random((1,1))
  30. i = 0
  31. while i<len(train):
  32. #前向计算
  33. z2 = w2.dot(train[i].T) + b2.T
  34. a2 = sigmoid(z2)
  35. z3 = w3.dot(a2.T) + b3
  36. a3 = z3
  37. #计算误差
  38. ex = train_result[i] - a3
  39. #反向计算
  40. delta3 = -((ex)*(z3))
  41. delta2 = w3.T.dot(delta3)*sigmoid_derivation(z2)
  42. dw3 = delta3.dot(a2)
  43. db3 = delta3
  44. dw2 = delta2.dot(train[i])
  45. db2 = delta3
  46. #更新矩阵
  47. w3 = w3 + ita*(-dw3)
  48. b3 = b3 + ita*(-db3)
  49. w2 = w2 + ita*(-dw2)
  50. b2 = b2 + ita*(-db2)
  51. #误差均值
  52. e = (e + ex)/i
  53. #迭代次数
  54. i = i + 1
  55. print('w2矩阵为:',w2)
  56. print('w3矩阵为:',w3)
  57. print('b2矩阵为:',b2)
  58. print('b3矩阵为:',b3)
  59. #计算预测值
  60. z2 = w2.dot(test.T) + b2.T
  61. a2 = sigmoid(z2)
  62. z3 = w3.dot(a2.T) + b3
  63. a3 = z3
  64. #返归一化
  65. print('预测值为:',a3*(max1[3]-min1[3])+min1[3])
  66. print('真实数据为:{}'.format(test_result*(max1[3]-min1[3])+min1[3]))
  67. print('误差为:{}'.format((a3*(max1[3]-min1[3])+min1[3]) - (test_result*(max1[3]-min1[3])+min1[3])))

输出结果为:

二、调库代码

  1. import pandas as pd
  2. import numpy as np
  3. import math
  4. from sklearn.neural_network import MLPRegressor,MLPClassifier
  5. data = pd.read_excel('上证指数.xls')
  6. data = np.array(data.iloc[3:-1,1:])
  7. data1 = np.array(data)
  8. X = data1[:, 0:2]
  9. Y = data1[:, 2]
  10. max1 = data.max(axis = 0)
  11. min1 = data.min(axis = 0)
  12. t = np.empty((len(data),4))
  13. for i in range(4):
  14. t[:,i] = (data[:,i]-min1[i])/(max1[i]-min1[i])
  15. #截取训练集和测试集,这里使用了最后一天为测试集
  16. train = t[:-1,:-1]#训练集
  17. train_result = t[:-1,-1]#训练结果
  18. test = t[-1,:-1]#测试集
  19. test_result = t[-1,-1]#测试结果
  20. clf = MLPRegressor(hidden_layer_sizes=(4,1), activation='relu',solver='adam',alpha=0.0001,max_iter=2000)
  21. clf = clf.fit(train,train_result)
  22. pred = clf.predict(test.reshape(1, -1))
  23. print('回归预测结果:', pred)
  24. print('预测值为:',pred*(max1[3]-min1[3])+min1[3])
  25. print('真实数据为:{}'.format(test_result*(max1[3]-min1[3])+min1[3]))
  26. print('误差为:{}'.format((pred*(max1[3]-min1[3])+min1[3]) - (test_result*(max1[3]-min1[3])+min1[3])))

输出结果为:


本文转载自: https://blog.csdn.net/weixin_46657323/article/details/122991231
版权归原作者 嘟嘟肚腩仔 所有, 如有侵权,请联系我们删除。

“基于BP神经网络使用开盘价、最高价、最低价预测收盘价”的评论:

还没有评论