标准化训练数据后使用 sklearn 预测新数据
Posted
技术标签:
【中文标题】标准化训练数据后使用 sklearn 预测新数据【英文标题】:Predicting new data using sklearn after standardizing the training data 【发布时间】:2016-12-11 08:12:28 【问题描述】:我正在使用 Sklearn 构建线性回归模型(或任何其他模型),步骤如下:
X_train 和 Y_train 是训练数据
标准化训练数据
X_train = preprocessing.scale(X_train)
拟合模型
model.fit(X_train, Y_train)
一旦模型与缩放数据拟合,我如何使用拟合模型预测新数据(一次一个或多个数据点)?
我用的是
缩放数据
NewData_Scaled = preprocessing.scale(NewData)
预测数据
PredictedTarget = model.predict(NewData_Scaled)
我想我缺少preprocessing.scale
的转换函数,以便我可以将其与经过训练的模型一起保存,然后将其应用于新的未见数据?请帮忙。
【问题讨论】:
【参考方案1】:看看these docs。
您可以使用预处理模块的StandardScaler
类来记住训练数据的缩放比例,以便将其应用于未来的值。
from sklearn.preprocessing import StandardScaler
X_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
scaler = StandardScaler().fit(X_train)
scaler
计算了平均值和比例因子以标准化每个特征。
>>>scaler.mean_
array([ 1. ..., 0. ..., 0.33...])
>>>scaler.scale_
array([ 0.81..., 0.81..., 1.24...])
将其应用于数据集:
import numpy as np
X_train_scaled = scaler.transform(X_train)
new_data = np.array([-1., 1., 0.])
new_data_scaled = scaler.transform(new_data)
>>>new_data_scaled
array([[-2.44..., 1.22..., -0.26...]])
【讨论】:
这是一个有用的答案——我想知道 StandardScaler 是否也可以用于新的看不见的数据。很高兴看到这种情况。 我认为transform
函数的参数应该是二维数组。在您的情况下,new_data
数组是 1d。
但这只能在同一个会话中工作,对吧?有什么方法可以保存缩放器以供以后使用,例如您可以保存经过训练的神经网络的模型/权重?
@J.Dahlgren 您是否能够通过保存缩放器来解决问题?我遇到了类似的问题。
@Regressor 如果它仍然与您相关,这里是使用 joblib 包导出/导入标准缩放器对象的解决方案:***.com/a/53153373/11537601【参考方案2】:
当您在单次运行中使用train data
和test data
时,高于answer 即可...
但是如果你想在训练后test
或infer
怎么办
这肯定会有所帮助
from sklearn.preprocessing import StandardScaler
import numpy as np
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
sc = StandardScaler()
sc.fit(X)
x = sc.transform(X)
#On new data, though data count is one but Features count is still Four
sc.transform(np.array([[6.5, 1.5, 2.5, 6.5]])) # to verify the last returned output
std = np.sqrt(sc.var_)
np.save('std.npy',std )
np.save('mean.npy',sc.mean_)
这个块是独立的
s = np.load('std.npy')
m = np.load('mean.npy')
(np.array([[6.5, 1.5, 2.5, 6.5]] - m)) / s # z = (x - u) / s ---> Main formula
# will have same output as above
【讨论】:
以上是关于标准化训练数据后使用 sklearn 预测新数据的主要内容,如果未能解决你的问题,请参考以下文章