2017-07-19 39 views
1

我不是来自统计学,但是通过做一个工作与机器学习和NN我看到缩放数据可以产生很多伤害。从我所了解的情况来看,在列车测试之前缩放数据并不是一个好的选择,但请看看这个例子,当在列车测试分离之后完成缩放时。sklearn Standardscaler()可以影响测试矩阵的结果

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,您会收到完全不同的结果。如何克服这一点?

回答

2

您不应该单独转换火车和测试。相反,您应该在训练数据上安装缩放器(然后使用缩放器对其进行转换),然后使用合适的缩放器转换测试数据。因此,在你的代码,你应该做的:

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]] 
+0

感谢仪。你已经第二次帮助我了。祝一切顺利! – Makaroniiii