当前位置:   article > 正文

Python神经网络回归预测模型(训练+预测)_python神经网络预测模型

python神经网络预测模型

1、数据准备

训练数据为train.csv,预测数据为test.csv。

训练数据
x1x2x3y
0.050186.259976.2
0.050148.2487299.5
0.050129.23359289.25
0.050117.83796450.33
0.054137.710471.6
0.054107.175978
0.05487.98424848.33
0.05480.33639609
0.056124.79746.2
0.05697.5291818.25
0.05682.17297379.5
0.05674.54769776.5
0.058115.939530.8
0.05889.0193123.75
0.05873.82303079.5
0.05870.05688099.33
100205.8210004.2
100175.3276471
100160.08410666
100156.27876261
104149.8913740.6
104135.6180659.67
104124.9395372
104121.34813718
106138.6114145.6
106123.6373092.5
106112.39380828
106108.64721834
108128.669730.4
108114.3779006.25
108103.65362419
108100.07805459
预测数据
x1x2x3
0.05695
0.05681
106124
0.056258
0.056249
106200

2、训练模型

  1. # 导入库
  2. import numpy as np
  3. import pandas as pd
  4. import matplotlib as mpl
  5. import matplotlib.pyplot as plt
  6. from sklearn.preprocessing import MinMaxScaler
  7. from tensorflow.keras.models import Sequential
  8. from tensorflow.keras.layers import Dense
  9. from tensorflow.keras.optimizers import Adam
  10. from tensorflow.keras import regularizers
  11. # 加载数据
  12. df = pd.read_csv('train.csv')
  13. x = df[['x1', 'x2', 'x3']].values
  14. y = df[['y']].values
  15. # 数据归一化
  16. x_scaler = MinMaxScaler(feature_range=(-1, 1))
  17. y_scaler = MinMaxScaler(feature_range=(-1, 1))
  18. x = x_scaler.fit_transform(x)
  19. y = y_scaler.fit_transform(y)
  20. # 定义神经网络模型
  21. model = Sequential()
  22. model.add(Dense(10, activation='relu', input_shape=(3,), kernel_regularizer=regularizers.l2(0.01)))
  23. model.add(Dense(16, activation='relu', kernel_regularizer=regularizers.l2(0.01)))
  24. model.add(Dense(1, activation='linear'))
  25. # 误差记录
  26. optimizer = Adam(lr=0.0001)
  27. model.compile(optimizer=optimizer, loss='mse')
  28. # 训练模型
  29. history = model.fit(x, y, epochs=50000, batch_size=67)
  30. # 评估模型
  31. mse = model.evaluate(x, y)
  32. print('Validation MSE:', mse)
  33. # 保存模型的权重和偏差
  34. model.save('my_model.h5')
  35. # 误差曲线
  36. # 设置中文显示和解决负号显示问题
  37. plt.rcParams['font.sans-serif'] = ['SimHei']
  38. plt.rcParams['axes.unicode_minus'] = False
  39. plt.plot(history.history['loss'])
  40. plt.title("模型误差")
  41. plt.ylabel("误差")
  42. plt.xlabel("循环次数")
  43. plt.show()
  44. # 预测值输出
  45. y_pred = model.predict(x)
  46. # 预测值反归一化
  47. y = y_scaler.inverse_transform(y)
  48. y_pred = y_scaler.inverse_transform(y_pred)
  49. print("the prediction is:", y_pred)
  50. # 将预测值存储到Excel表中
  51. df_out = pd.DataFrame(y_pred, columns=['Prediction'])
  52. df_out.to_excel('prediction.xlsx', index=False)
  53. # 实际值与预测值的对比图
  54. # 设置中文显示和解决负号显示问题
  55. plt.rcParams['font.sans-serif'] = ['SimHei']
  56. plt.rcParams['axes.unicode_minus'] = False
  57. plt.scatter(y, y_pred)
  58. plt.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)
  59. plt.xlabel("实际值")
  60. plt.ylabel("预测值")
  61. plt.show()

训练神经网络模型一共四层,第一层为输入变量,后三层为Dense ,其中Dense中从参数可以调整:

model.add(Dense(10, activation='relu', input_shape=(3,), kernel_regularizer=regularizers.l2(0.01)))

此层神经元个数为10,激活函数为relu,并且进行了正则化处理。

3、预测模型

  1. # 导入库
  2. import pandas as pd
  3. from sklearn.preprocessing import MinMaxScaler
  4. from tensorflow.keras.models import load_model
  5. # 数据预处理(归一化)
  6. df = pd.read_csv('train.csv')
  7. x = df[['x1', 'x2', 'x3']].values
  8. y = df[['y']].values
  9. x_scaler = MinMaxScaler(feature_range=(-1, 1))
  10. y_scaler = MinMaxScaler(feature_range=(-1, 1))
  11. x = x_scaler.fit_transform(x)
  12. y = y_scaler.fit_transform(y)
  13. # 加载预测数据
  14. df_test = pd.read_csv('test.csv')
  15. x_test = df_test[['x1', 'x2', 'x3']].values
  16. # 预测数据归一化
  17. x_test = x_scaler.transform(x_test)
  18. # 加载训练好的神经网络模型
  19. model = load_model('my_model.h5')
  20. # 对预测数据进行预测
  21. y_pred = model.predict(x_test)
  22. y_pred = y_scaler.inverse_transform(y_pred)
  23. print(y_pred)

4、总结

  1. 导入所需的库,包括numpy、pandas、matplotlib、sklearn等。
  2. 从CSV文件中加载训练数据,并将输入特征和输出标签分别存储在x和y变量中。
  3. 对数据进行归一化处理,使用MinMaxScaler将输入特征和输出标签的值都缩放到[-1, 1]的范围内。
  4. 定义一个Sequential模型,并添加三个Dense层作为神经网络的结构。模型使用relu激活函数,并应用L2正则化。
  5. 编译模型,指定优化器为Adam,并使用均方误差(MSE)作为损失函数。
  6. 训练模型,将归一化后的输入特征x和输出标签y作为训练数据,进行50000个周期的训练。
  7. 评估模型,计算在训练数据上的均方误差。
  8. 保存模型的权重和偏差到文件中。
  9. 绘制训练过程中的误差曲线。
  10. 进行预测,并将预测结果反归一化。
  11. 将预测结果保存到Excel表格中。
  12. 绘制实际值与预测值的对比散点图。
  13. 调用保存好神经网络进行预测
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/103865
推荐阅读
相关标签
  

闽ICP备14008679号