如何在不知道最小值和最大值的情况下标准化数据?

数据挖掘 机器学习 scikit-学习 线性回归 正常化
2021-09-27 13:49:28

我有一个来自 Kaggle 的借贷俱乐部数据集;它包含许多不同的列:例如虚拟变量、年份、贷款金额...等我想规范化训练和测试集中的数据,但我必须使用训练集的最小值和最大值来防止测试集的数据泄露。我的问题是:如果在测试集中甚至当我尝试预测新数据点时,一个大于最大值或小于最小值的值,我使用训练集中的相同值对其进行归一化, 这是正确的吗?我可以让模型正常处理这个值吗?

这是我用来规范化的代码

    from  sklearn.preprocessing import MinMaxScaler

    scaler = MinMaxScaler()
    X_train = scaler.fit_transform(X_train)

2个回答

在机器学习中,您假设训练集和测试集遵循相同的分布如果这个假设不成立,那么您的模型将无法正确概括。

话虽如此,显然测试集特征的值可能略大于训练集中相同特征的最大值。如果是这种情况,所有 ML 模型对于归一化值略高于1.

然而,我想强调的是,如果训练集和测试集具有显着不同的分布(最常见的原因是数据集规模较小),那么任何模型都无法正确泛化并且不会成为问题归一化。

最小值和最大值只是已知的限制,它们是重塑数据分布的公式的一部分,因此如果一个值大于先前已知的值,则生成的特征缩放(归一化)仍然是合适的。

如果您不想使用最小值和最大值,另一种方法是z 分数。

x'= (x-x̄) / σ 其中 x 是原始特征向量,x̄ 是向量的平均值 x 是该特征向量的均值,σ 是其标准差。