在应用 Labelencoder 之后再使用 Standardscaler 有意义吗?

Does it make sense to user Standard Scaler after applying Label Encoder?

我正在一个数据集上启动一个项目,该数据集包含一个类别的超过 5k 个唯一值。

我的问题是,在使用label encoder后,到"enumerate"的类别,使用Standard Scaler让数据多一点有意义吗"manageable" 用于我的机器学习模型?

请记住,我总共有超过 500k 个条目,并且此特定列有 5k 个独特类别。

更多的是关于它背后的直觉而不是如何编码,但我认为这应该是问的地方。

如果您对类别使用LabelEncoder,您需要确保您的类别可以进行比较。例如,对于类别 ['high'、'med'、'low'],项目是可比较的,因此对其进行标签编码和标准缩放是有意义的。

但是,当您的类别无法相互比较时,标签编码就没有任何意义。例如,您不能将 'Monday' 与 'Tuesday' 进行比较。

TL;DR
如果您的类别是可比较的(有序的),那么它是有道理的。如果没有,请尝试找到减少类别的方法,有很多方法可以做到这一点。

1) 需要 LabelEncoder,因为您的机器学习模型无法处理字符串。您需要一个连续的数字标签(0、1、2、.. n-1)。但是,它只是针对标签部分,您可以根据您的模型要求使用one-hot编码或直接使用数字标签。

2) StandardScalar 使您的数据具有零均值和单位方差。

The standard score of a sample x is calculated as:

z = (x - u) / s

where u is the mean of the training samples or zero if with_mean=False, and s is the standard deviation of the training samples or one if with_std=False.

数据集的标准化是许多机器学习估计器的共同要求:如果单个特征或多或少看起来不像标准正态分布数据(例如均值和单位方差为 0 的高斯分布),它们可能表现不佳。

例如,学习算法的 objective 函数中使用的许多元素(例如支持向量机的 RBF 内核或线性模型的 L1 和 L2 正则化器)假设所有特征都以 0 为中心并且有相同顺序的差异。如果一个特征的方差比其他特征大几个数量级,它可能会支配 objective 函数并使估计器无法按预期正确地从其他特征中学习。 (scikit-learn 文档)

因此,通常,它可以帮助您更好地缩放数据,这可能有助于加快收敛速度​​。但是,同样,这取决于您使用的 ML 模型。

LabelEncoder 应该用于标签,以便将 n 个类别的标签替换为从 1 到 n 的整数。如果尚未完成,您应该执行此操作。

StandardScaler 最终将用于训练和测试数据,但也不用于标签。它输出 positivenegative float.

当然不应该将此应用到标签列,因为标签列必须是 Integer