何时使用One Hot Encoding,LabelEncoder和DictVectorizo​​r?


95

我已经使用分类数据构建模型已有一段时间了,在这种情况下,我基本上默认使用scikit-learn的LabelEncoder函数在构建模型之前转换此数据。

我了解两者之间的区别OHELabelEncoder以及DictVectorizor它们在处理数据方面的区别,但是对我来说不清楚的是,您何时可能会选择将一种技术应用于另一种技术。

是否存在某些算法或情况相对于其他算法有优缺点?


2
关于AN6U5的答案,请参考以下语句:>仍然存在诸如决策树和随机森林之类的算法,它们可以很好地与分类变量一起使用,并且LabelEncoder可用于使用较少的磁盘空间来存储值。是否不会使用LabelEncoder将类别转换为数字特征,从而导致决策树以某个值执行拆分,这实际上是没有意义的,因为映射是任意的?
Nico

1
Nico,我认为AN6U5所说的是专门用于决策树的,它可以很好地工作,因为树会在dog,cat,mouse或1,2,3上分开,并且“ cat”和“ 2”的含义对于一棵树(考虑它的分裂方式)。在逻辑回归之类的情况下,这些值是方程式的一部分,因为您将weight *值相乘,因此,假设dog:1和cat:2没有数字1 * 2关系,这可能会导致训练问题和体重问题(尽管它仍然可以与足够的培训示例和纪元一起使用)。
Doug F

Answers:


124

在某些情况下,LabelEncoder或DictVectorizo​​r很有用,但由于常规原因,在我看来,这些情况非常有限。

LabelEncoder可以将[dog,cat,dog,mouse,cat]转换为[1,2,1,3,2],但是强加的序数意味着狗和老鼠的平均值是cat。仍然有诸如决策树和随机森林之类的算法可以很好地与分类变量一起使用,并且LabelEncoder可以用于使用更少的磁盘空间来存储值。

一键编码的优点是结果是二进制而不是序数,并且所有内容都位于正交向量空间中。缺点是,对于高基数,特征空间实际上会迅速膨胀,并且您开始以维数的诅咒开始战斗。在这些情况下,我通常采用单热编码,然后使用PCA进行降维。我发现,一键热加PCA的明智组合很少会被其他编码方案所击败。PCA发现线性重叠,因此自然会倾向于将相似的特征归为同一特征。


1
非常感谢您-这非常有帮助并且很有道理。您还针对特定/边缘情况使用其他编码方案吗?您是否曾经遇到过针对不同功能使用不同编码方案的情况?
2015年

20

虽然AN6U5给出了很好的答案,但我想补充几点以供将来参考。考虑单一热编码(OHE)和标签编码时,我们必须尝试了解您要构建的模型。即,我们将考虑的两类模型是:

  1. 基于树的模型:梯度增强决策树和随机森林。
  2. 基于非树的模型基于线性,kNN或神经网络的模型。

让我们考虑在构建基于树的模型时何时应用OHE以及何时应用标签编码。

在以下情况下,我们将使用OHE:

  1. 当属于值彼此接近在标签编码对应于定位不是接近的值(非-线性数据)。
  2. 当分类特征不是序数(狗,猫,老鼠)时。

在以下情况下,我们将应用标签编码:

  1. 类别特征是序数(小公斤,小公斤,小学,高中等)。
  2. 当我们可以使用标签编码器将接近的标签分配给相似的类别时:这样可以减少发束中的溢出,从而减少执行时间。
  3. 当数据集中的分类特征数量巨大时:对具有大量值的分类特征进行一次热编码会导致(1)高内存消耗,以及(2)模型很少使用非分类特征的情况。如果使用稀疏矩阵,则可以处理第一种情况。如果仅使用要素子集构建树,则可能发生第二种情况。例如,如果您有9个数字特征和1个具有100个唯一值的分类,并且对该分类特征进行了一次热编码,则将获得109个特征。如果仅用部分特征构建树,则很少使用前9个数字特征。在这种情况下,您可以增加此子集的参数控制大小。在xgboost中,它在sklearn的“随机森林” max_features中称为colsample_bytree。

如果您要继续使用OHE(如@ AN6U5所建议),则可能要将PCA与OHE结合使用。

让我们考虑在构建非基于树的模型时何时应用OHE和标签编码。

要应用标签编码,要素和目标之间的依赖性必须是线性的,以便有效地使用标签编码。

同样,如果依赖关系是非线性的,则可能需要使用OHE。

注意:某些解释已参考Coursera的“ 如何赢得数据科学竞赛”


非常直观的解释。它不是“分裂”,不是“分裂”吗?
dzieciou

0

LabelEncoder用于顺序数据,而OHE用于标准数据。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.