我正在处理有关人的几十个二进制特征的数据,基本上可以归结为“人具有特征x” [True/False]。
根据网上的资料,分类数据应该进行独热编码,而不是为每一类分配任意值,因为你不能说“类别1小于类别2”。因此,解决方案是为每个类别创建一个虚拟变量:
Cat || dummy 1 | dummy 2 | dummy 3
____||_________|_________|________
1 || 1 | 0 | 0
2 || 0 | 1 | 0
3 || 0 | 0 | 1
现在针对二进制特征,可以选择直接使用变量(1代表真,0代表假)或者使用两个虚拟变量((1,0)代表真,(0,1)代表假)。但是我找不到任何显示/解释哪种方法最好的来源。
我自己感到矛盾,因为一方面,虚拟变量会降低每个单独变量的重要性,在某些情况下模型准确度有所降低,来源。但另一方面,这也可以编码缺失的数据(以(0, 0)的形式)。此外,"False是否小于True"也可能成立吗?
我实际上正在使用Python中的随机森林(Random Forest),我知道基于树的分类器如随机森林支持类别数据,但Scikit-Learn包尚未实现它。
我在Scikit-Learn数字数据集上进行了一个小测试。该数据集具有数字(0-9)的多个8 x 8图像,每个像素的值都在0到16之间,简单的模型可以使用它来学习识别数字。
对于我的测试,我将> 8的值更改为True,将<= 8的值更改为False。当与原始数据进行比较时,准确性当然有所下降,但是当我实现独热编码,因此将True更改为(1,0),将False更改为(0,1)时,我找不到与二进制编码相比显著的差异。
非常感谢您提供推荐方法的解释!