bp1 = BPNN.BPNNRegression([7, 16, 1]) train_data = [[sx.reshape(7,1), sy.reshape(1,1)] for sx, sy in zip(x_train, y_train)] test_data = [np.reshape(sx, (7,1)) for sx in x_test]
时间: 2023-05-18 10:03:40 浏览: 199
这是一个使用 BPNN 算法进行回归的代码片段,其中输入层有 7 个神经元,隐藏层有 16 个神经元,输出层有 1 个神经元。训练数据是一个列表,其中每个元素都是一个包含输入和输出的元组,测试数据是一个包含多个输入的列表。
相关问题
bp1 = BPNN.BPNNRegression([3, 16, 1]) train_data = [[sx.reshape(3,1), sy.reshape(1,1)] for sx, sy in zip(x_train, y_train)] test_data = [np.reshape(sx, (3,1)) for sx in x_test]
这是一个使用 BPNN 算法进行回归的代码片段,其中 BPNN.BPNNRegression([3, 16, 1]) 表示神经网络的结构,[3, 16, 1] 表示输入层有 3 个神经元,隐层有 16 个神经元,输出层有 1 个神经元。train_data 是训练数据,test_data 是测试数据。
import numpy as np import pandas as pd import matplotlib.pyplot as plt import BPNN from sklearn import metrics from sklearn.metrics import mean_absolute_error from sklearn.metrics import mean_squared_error #导入必要的库 df1=pd.read_excel(r'D:\Users\Desktop\大数据\44.xls',0) df1=df1.iloc[:,:] #进行数据归一化 from sklearn import preprocessing min_max_scaler = preprocessing.MinMaxScaler() df0=min_max_scaler.fit_transform(df1) df = pd.DataFrame(df0, columns=df1.columns) x=df.iloc[:,:4] y=df.iloc[:,-1] #划分训练集测试集 cut=4#取最后cut=30天为测试集 x_train, x_test=x.iloc[4:],x.iloc[:4]#列表的切片操作,X.iloc[0:2400,0:7]即为1-2400行,1-7列 y_train, y_test=y.iloc[4:],y.iloc[:4] x_train, x_test=x_train.values, x_test.values y_train, y_test=y_train.values, y_test.values #神经网络搭建 bp1 = BPNN.BPNNRegression([4, 16, 1]) train_data=[[sx.reshape(4,1),sy.reshape(1,1)] for sx,sy in zip(x_train,y_train)] test_data = [np.reshape(sx,(4,1))for sx in x_test] #神经网络训练 bp1.MSGD(train_data, 1000, len(train_data), 0.2) #神经网络预测 y_predict=bp1.predict(test_data) y_pre = np.array(y_predict) # 列表转数组 y_pre=y_pre.reshape(4,1) y_pre=y_pre[:,0] #画图 #展示在测试集上的表现 draw=pd.concat([pd.DataFrame(y_test),pd.DataFrame(y_pre)],axis=1); draw.iloc[:,0].plot(figsize=(12,6)) draw.iloc[:,1].plot(figsize=(12,6)) plt.legend(('real', 'predict'),loc='upper right',fontsize='15') plt.title("Test Data",fontsize='30') #添加标题 #输出精度指标 print('测试集上的MAE/MSE') print(mean_absolute_error(y_pre, y_test)) print(mean_squared_error(y_pre, y_test) ) mape = np.mean(np.abs((y_pre-y_test)/(y_test)))*100 print('=============mape==============') print(mape,'%') # 画出真实数据和预测数据的对比曲线图 print("R2 = ",metrics.r2_score(y_test, y_pre)) # R2 运行上述程序。在下面这一步中draw=pd.concat([pd.DataFrame(y_test),pd.DataFrame(y_pre)],axis=1);我需要将归一化的数据变成真实值,输出对比图,该怎么修改程序
在将归一化的数据变回真实值的过程中,需要将归一化的因变量(即最后一列)逆转换回来,以得到真实的预测值和真实值。代码如下:
```
# 将预测结果和真实结果逆归一化
y_predict = min_max_scaler.inverse_transform(y_pre.reshape(-1, 1))
y_test = min_max_scaler.inverse_transform(y_test.reshape(-1, 1))
# 画图
draw=pd.concat([pd.DataFrame(y_test), pd.DataFrame(y_predict)], axis=1)
draw.iloc[:,0].plot(figsize=(12,6))
draw.iloc[:,1].plot(figsize=(12,6))
plt.legend(('real', 'predict'), loc='upper right', fontsize='15')
plt.title("Test Data", fontsize='30')
# 输出精度指标
print('测试集上的MAE/MSE')
print(mean_absolute_error(y_predict, y_test))
print(mean_squared_error(y_predict, y_test))
mape = np.mean(np.abs((y_predict-y_test)/(y_test)))*100
print('=============mape==============')
print(mape,'%')
# 输出R2分数
print("R2 = ", metrics.r2_score(y_test, y_predict))
```
在此代码中,我们使用了 MinMaxScaler 对象的 inverse_transform() 方法将归一化的结果转换回原始的数据范围。运行修改后的代码,即可得到真实值与预测值的对比图,以及各种精度指标的输出。