我已经使用分类数据构建模型已有一段时间了,在这种情况下,我基本上默认使用scikit-learn的LabelEncoder函数在构建模型之前转换此数据。
我了解两者之间的区别OHE
,LabelEncoder
以及DictVectorizor
它们在处理数据方面的区别,但是对我来说不清楚的是,您何时可能会选择将一种技术应用于另一种技术。
是否存在某些算法或情况相对于其他算法有优缺点?
我已经使用分类数据构建模型已有一段时间了,在这种情况下,我基本上默认使用scikit-learn的LabelEncoder函数在构建模型之前转换此数据。
我了解两者之间的区别OHE
,LabelEncoder
以及DictVectorizor
它们在处理数据方面的区别,但是对我来说不清楚的是,您何时可能会选择将一种技术应用于另一种技术。
是否存在某些算法或情况相对于其他算法有优缺点?
Answers:
在某些情况下,LabelEncoder或DictVectorizor很有用,但由于常规原因,在我看来,这些情况非常有限。
LabelEncoder可以将[dog,cat,dog,mouse,cat]转换为[1,2,1,3,2],但是强加的序数意味着狗和老鼠的平均值是cat。仍然有诸如决策树和随机森林之类的算法可以很好地与分类变量一起使用,并且LabelEncoder可以用于使用更少的磁盘空间来存储值。
一键编码的优点是结果是二进制而不是序数,并且所有内容都位于正交向量空间中。缺点是,对于高基数,特征空间实际上会迅速膨胀,并且您开始以维数的诅咒开始战斗。在这些情况下,我通常采用单热编码,然后使用PCA进行降维。我发现,一键热加PCA的明智组合很少会被其他编码方案所击败。PCA发现线性重叠,因此自然会倾向于将相似的特征归为同一特征。
虽然AN6U5给出了很好的答案,但我想补充几点以供将来参考。考虑单一热编码(OHE)和标签编码时,我们必须尝试了解您要构建的模型。即,我们将考虑的两类模型是:
让我们考虑在构建基于树的模型时何时应用OHE以及何时应用标签编码。
在以下情况下,我们将使用OHE:
在以下情况下,我们将应用标签编码:
如果您要继续使用OHE(如@ AN6U5所建议),则可能要将PCA与OHE结合使用。
让我们考虑在构建非基于树的模型时何时应用OHE和标签编码。
要应用标签编码,要素和目标之间的依赖性必须是线性的,以便有效地使用标签编码。
同样,如果依赖关系是非线性的,则可能需要使用OHE。
注意:某些解释已参考Coursera的“ 如何赢得数据科学竞赛”。