我想规范化[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.]]`
答案 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()