发现一个问题,我用的是 from sklearn.neural_network import MLPRegressor,训练了一个神经网络 。 就是训练好神经网络了,然后再做预测的时候,发现还得把预测数据先得跟之前训练数据一样进行归一化处理,然后得出结果再还原回来,但是训练好的神经网络 用 pickle.dump 保存后 然后调用,但它只管神经网络,不管前面数据的归一化处理。那如何将 预测数据 进行和 训练数据一样的 归一化处理, 然后再还原呢?是不是 还是得把训练结果数据集以及训练结果用的标签的归一化的代码,复制到 预测值数据的 运行程序里?每次都这么麻烦吗?
训练时的 结果标签归一化:
训练程序文件:
# 读取 csv 数据
df4 = pd.read_csv('D:/testcsv2.csv')
ff = df4.values
ff1 = ff [:,1:] # 对矩阵进行切片
myarray1 = np.asarray(ff1)
myarray1 = myarray1.T #取转置 四个参数
min_max_scaler1 = preprocessing.MinMaxScaler()
A_train = min_max_scaler1.fit_transform(myarray1)
#省略若干代码。。。
# 保存模型到文件
filename = 'knn.sav'
pickle.dump(knn, open(filename, 'wb'))
预测程序文件:
预测数据时 预测结果 还原
filename = 'knn.sav'
loaded_model = pickle.load(open(filename, 'rb'))
sK_pred = loaded_model.predict(sB_train)
sinv_k_pred = min_max_scaler1.inverse_transform(sK_pred)
再把问题 总结一下,是不是得把训练文件中,训练标签结果归一化的这段程序,必须放到 预测文件里,才能正常的预测出结果?不放不行,有什么简便方法吗?我以为只单纯调用训练好的神经网络包就可以了,没想到 还得在 预测程序文件中 放入之前的测试数据集标签结果以及先将其归一话,才能还原回来才行?
训练时对数据进行了标准化处理,但是在使用pickle.load()方法调用已训练好的神经网络进行预测时,需要对输入数据进行同样的标准化处理,才能得到正确的结果。因此,预测程序中需要将原始数据进行同样的标准化处理,才能正常还原预测结果。如果希望避免这种麻烦,可以在训练时将标准化处理的代码保存并调用