在改组和拆分后,我应该分别对培训和测试进行标准化吗?

时间:2018-11-03 00:20:04

标签: python machine-learning

我想规范化[0,1]范围内的数据。在改组和拆分后是否应该对数据进行规范化?是否应该重复相同的测试步骤?我遇到了使用这种标准化类型的python代码。这是用目标范围[0,1]

规范化数据的正确方法吗?
`X_train = np.array([[ 1., -1.,  2.], [ 2.,  0.,  0.],[ 0.,  1., -1.]])
a= X_train
for i in range(3):
    old_range = np.amax(a[:,i]) - np.amin(a[:,i])
    new_range = 1 - 0
    f = ((a[:,i] - np.amin(a[:,i])) / old_range)*new_range + 0
    lis.append(f)
b = np.transpose(np.array(lis))
print(b)`

这是归一化后的结果。

`[[0.5, 0., 1.]
[1., 0.5, 0.33333333]
[0., 1., 0.]]`

1 个答案:

答案 0 :(得分:2)

  

在改组和拆分后是否应该对数据进行规范化?

是的。否则,您将泄漏未来的信息(即在此处进行测试)。更多信息here;它是为了标准化,而不是标准化(以及R,而不是Python),但是这些参数同样适用。

  

我应该重复相同的测试步骤吗?

是的。使用适合训练数据集的缩放器。在这种情况下,这意味着使用训练数据集中的最大值和最小值来缩放测试数据集。这样可以确保与训练数据上进行的转换保持一致,并可以评估模型是否可以很好地泛化。

您不必从头开始编写代码。使用sklearn

import numpy as np
from sklearn import preprocessing

X_train = np.array([[ 1., -1.,  2.], [ 2.,  0.,  0.],[ 0.,  1., -1.]])
X_test = np.array([[ 0, -1.,  1.5], [ 2.5,  0.,  1]])

scaler = preprocessing.MinMaxScaler()
scaler = scaler.fit(X_train)

X_train_minmax = scaler.transform(X_train)
X_test_minmax = scaler.transform(X_test)

注意:对于大多数应用程序,标准化是扩展preprocessing.StandardScaler()

的推荐方法