我永远不确定何时对非排序分类变量使用一键编码,何时不使用。每当算法使用距离度量来计算相似性时,我都会使用它。谁能给出一般的经验法则,即哪些类型的算法需要对非有序分类特征进行一次热编码,而哪些则不需要?
我永远不确定何时对非排序分类变量使用一键编码,何时不使用。每当算法使用距离度量来计算相似性时,我都会使用它。谁能给出一般的经验法则,即哪些类型的算法需要对非有序分类特征进行一次热编码,而哪些则不需要?
Answers:
大多数算法(线性回归,逻辑回归,神经网络,支持向量机等)都需要对分类变量进行某种编码。这是因为大多数算法仅将数值作为输入。
不需要编码的算法是可以直接处理联合离散分布的算法,例如马尔可夫链/朴素贝叶斯/贝叶斯网络,基于树的等等。
补充评论:
一种热编码是编码方法之一。这是用于分类变量编码(不限于R)的良好资源。分类变量的R库对比编码系统
谁能列出哪些算法需要对分类特征进行一次热编码,而哪些则不需要?
对于AFAIU,它必须对特定数据做更多的事情,而对特定算法则做更少的事情。具体来说,这取决于类别中是否存在有意义的顺序。
考虑两种情况。在第一个中,您有坏,梅,好类别,在第二个中,您有苹果,橙子,梨。有在第一种情况下的自然顺序,因为MEH可能是与坏和好,但可能没有任何类似的情况发生在苹果,橘子,梨。
如果您在第一种情况下避免使用一次性编码,则会“丢失”有关订单的信息。如果在第二种情况下使用单点编码,则将某些顺序分配给自然不正确的类别。
每当算法使用距离度量来计算相似性时,我都会这样做。
为什么?假设功能之一是绝对的bad,meh,good,并且您具有三个实例1、2和3,它们是相同的,除了1 不好,2是meh和3很好。您可能想向算法表达1与2的相似度大于与3的相似度。
没有机器学习算法需要 一种热编码。这是处理分类变量的一种方法。虚拟变量是另一个。传统上,虚拟变量是首选解决方案。例如,R函数lm()自动为分类数据创建伪变量。如果您使用的是python和scikt-learn,那么我相信其中的许多算法都需要对分类变量进行一键编码。我相信tensorFlow也需要一键编码。这些是变量编码方式的选择。没有理由为什么不能在代码中使用伪变量。所有这些都必须处理算法的实际代码实现。
正如hxd1011指出的那样,描述类别变量之间的“距离”是一个微妙的问题。除了上述距离外,还有贾卡德距离。某些ML方法(尤其是SVM)不适用于分类数据,添加分类变量可能(或两者都会,您决定)会导致模型的预测能力很差。大多数集成模型按原样处理分类数据,不需要进行预处理。