我想将我的数据归一化到[0,1]范围内。在打乱和分割数据后我应该归一化数据吗?我应该对测试集重复相同的步骤吗?我看到了一段使用这种归一化方法的Python代码。这是否是将数据归一化到[0,1]范围的正确方法?
`X_train = np.array([[ 1., -1., 2.], [ 2., 0., 0.],[ 0., 1., -1.]])a= X_trainfor 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.]]`
回答:
在打乱和分割数据后我应该归一化数据吗?
是的。否则,你会泄露未来信息(即这里的测试集)。更多信息请查看这里;虽然这是关于标准化而不是归一化(且使用的是R语言而非Python),但其中的论点同样适用。
我应该对测试集重复相同的步骤吗?
是的。使用已经拟合到训练集上的缩放器。在这种情况下,意味着使用训练集的最大值和最小值来缩放测试集。这确保了与训练数据上的变换保持一致,并且可以评估模型是否能很好地泛化。
你不需要从头开始编写代码。使用sklearn即可:
注意:对于大多数应用,标准化是推荐的缩放方法preprocessing.StandardScaler()