【问题标题】:Predicting new data using sklearn after standardizing the training data标准化训练数据后使用 sklearn 预测新数据
【发布时间】:2016-12-11 08:12:28
【问题描述】:

我正在使用 Sklearn 构建线性回归模型(或任何其他模型),步骤如下:

X_train 和 Y_train 是训练数据

  1. 标准化训练数据

      X_train = preprocessing.scale(X_train)
    
  2. 拟合模型

     model.fit(X_train, Y_train)
    

一旦模型与缩放数据拟合,我如何使用拟合模型预测新数据(一次一个或多个数据点)?

我用的是

  1. 缩放数据

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

    PredictedTarget = model.predict(NewData_Scaled)
    

我想我缺少preprocessing.scale 的转换函数,以便我可以将其与经过训练的模型一起保存,然后将其应用于新的未见数据?请帮忙。

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案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 包导出/导入标准缩放器对象的解决方案:stackoverflow.com/a/53153373/11537601
    【解决方案2】:

    当您在单次运行中使用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',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
    

    【讨论】:

      猜你喜欢
      • 2018-11-07
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2014-06-12
      • 2023-03-12
      相关资源
      最近更新 更多