【问题标题】:sklearn Standardscaler() can effect test matrix resultsklearn Standardscaler() 可以影响测试矩阵结果
【发布时间】:2017-12-24 14:13:55
【问题描述】:

我不是来自统计学,但是通过使用机器学习和 NN 进行一项工作,我发现缩放数据会产生很多危害。据我所知,在训练测试之前缩放数据并不是一个很好的选择,但是请在训练测试分离之后进行缩放时看看这个例子。

import numpy as np
from sklearn.preprocessing import StandardScaler


train_matrix = np.array([[1,2,3,4,5]]).T

test_matrix = np.array([[1]]).T


e =StandardScaler()
train_matrix = e.fit_transform(train_matrix)
test_matrix = e.fit_transform(test_matrix)

print(train_matrix)

print(test_matrix)

[out]:

[[-1.41421356]   #train data
 [-0.70710678]
 [ 0.        ]
 [ 0.70710678]
 [ 1.41421356]]


[[ 0.]]   #test data

StandardScaler 类将为每个数据集执行两个不同的缩放过程,可能会损害您的 NN 结果的错误是:

在训练矩阵 1 中为 -1.41421356,而在测试矩阵 1 中为 0。现在假设您使用训练权重的测试数据创建了一个预测模型。对于 1,您将收到完全不同的结果。如何克服这一点?

【问题讨论】:

    标签: python scikit-learn statistics neural-network


    【解决方案1】:

    您不应该分别转换训练和测试。相反,您应该在训练数据上拟合定标器(然后使用定标器对其进行转换),然后使用拟合定标器转换测试数据。所以在你的代码中你应该这样做:

    e =StandardScaler()
    train_matrix = e.fit_transform(train_matrix)
    test_matrix = e.transform(test_matrix)
    

    然后,当您打印转换后的训练和测试数据时,您会得到预期的结果:

    [[-1.41421356]
     [-0.70710678]
     [ 0.        ]
     [ 0.70710678]
     [ 1.41421356]]
    
    
    [[-1.41421356]]
    

    【讨论】:

    • 谢谢米里亚姆。你已经第二次帮助我了。万事如意!
    猜你喜欢
    • 2021-05-11
    • 2015-10-23
    • 1970-01-01
    • 2022-01-12
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    相关资源
    最近更新 更多