在标准化训练数据之后使用sklearn预测新数据

时间:2016-08-05 02:43:43

标签: python machine-learning scikit-learn

我使用Sklearn通过以下步骤构建线性回归模型(或任何其他模型):

X_train和Y_train是训练数据

  1. 标准化培训数据

      X_train = preprocessing.scale(X_train)
    
  2. 适合模特

     model.fit(X_train, Y_train)
    
  3. 一旦模型适合缩放数据,我如何使用拟合模型预测新数据(一次一个或多个数据点)?

    我正在使用的是

    1. 缩放数据

      NewData_Scaled = preprocessing.scale(NewData)
      
    2. 预测数据

      PredictedTarget = model.predict(NewData_Scaled)
      
    3. 我认为我错过了preprocessing.scale的转换函数,以便我可以使用经过训练的模型保存它,然后将其应用于新的看不见的数据?请帮助。

2 个答案:

答案 0 :(得分:17)

看看these docs

您可以使用预处理模块的from sklearn.preprocessing import StandardScaler X_train = np.array([[ 1., -1., 2.], [ 2., 0., 0.], [ 0., 1., -1.]]) scaler = preprocessing.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...]])

将其应用于数据集:

{{1}}

答案 1 :(得分:0)

当您在单次运行中使用 train datatest data 时,answer 以上是可以的...
但是如果你想在训练后testinfer

这肯定会有帮助

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',s)
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