哪些算法需要 one-hot 编码?

机器算法验证 机器学习 分类数据 分类编码 数据预处理
2022-03-09 19:38:20

我永远不确定何时对无序分类变量使用 one-hot 编码,何时不使用。每当算法使用距离度量来计算相似度时,我都会使用它。谁能给出一个一般的经验法则,什么类型的算法需要无序分类特征进行单热编码,哪些不需要?

3个回答

大多数算法(线性回归、逻辑回归、神经网络、支持向量机等)都需要对分类变量进行某种编码。这是因为大多数算法只将数值作为输入。

不需要编码的算法是可以直接处理联合离散分布的算法,例如马尔可夫链/朴素贝叶斯/贝叶斯网络、基于树的等。

补充评论:

谁能列出哪些算法需要对分类特征进行一次热编码,哪些不需要?

AFAIU,它必须更多地处理特定数据,而不是特定算法具体来说,这取决于类别中是否存在一些有意义的顺序。

考虑两种情况。第一个有类别bad, meh, good,第二个有apple, orange, pear在第一种情况下有一个自然顺序,因为meh可能介于badgood之间,但在apple, orange, pear中可能没有类似的情况发生

如果您在第一种情况下避免单热编码,那么您将“丢失”有关订单的信息。如果您在第二种情况下使用 one-hot 编码,那么您将某些顺序分配给自然不正确的类别。

每当算法使用距离度量来计算相似度时,我都会这样做。

为什么?假设其中一个特征是分类的坏,meh,good,并且您有三个实例,1、2 和 3,它们是相同的,除了 1 是bad, 2 是meh, 3 是 good 。您可能想向算法表达 1 与 2 的相似性,而不是与 3 的相似性。

没有机器学习算法需要 一种热编码。这是处理分类变量的一种方法。虚拟变量是另一个。传统上,虚拟变量是首选解决方案。例如,R 函数 lm() 自动为分类数据创建虚拟变量。如果您使用的是 python 和 scikt-learn,那么我相信它的许多算法都需要对分类变量进行一次性编码。我相信 tensorFlow 也需要 one-hot 编码。这些是变量编码方式的选择。没有理由不能在代码中使用虚拟变量。这一切都必须处理算法的实际代码实现。

正如 hxd1011 指出的那样,描述分类变量之间的“距离”是一个微妙的问题。除了提到的距离之外,还有 Jaccard 距离。一些 ML 方法,特别是 SVM 不适合分类数据,并且添加分类变量可以/将(两者都由您决定)导致模型的预测能力非常差。大多数集成模型“按原样”处理分类数据,不需要预处理。