机器学习之特征编码总结
原文:https://blog.csdn.net/zcc_0015/article/details/76595447
已知三个feature,三个feature分别取值如下:
feature1=[“male”, “female”]
feature2=[“from Europe”, “from US”, “from Asia”]
feature3=[“uses Firefox”, “uses Chrome”, “uses Safari”, “uses Internet Explorer”]
如果做普通数据处理,那么我们就按0,1,2,3进行编号就行了。例如feature1=[0,1],feature2=[0,1,2],feature3=[0,1,2,3]。
那么,如果某个样本为[“male”,“from Asia”, “uses Chrome”],它就可以表示为[0,2,1]。
以上为普通编码方式。
独热编码(One-hot)换了一种方式编码,先看看百科定义的:
独热编码即 One-Hot 编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。
例如对六个状态进行编码:
自然顺序码为 000,001,010,011,100,101
独热编码则是 000001,000010,000100,001000,010000,100000
通过以上可以看到,独热编码每一个码的总的位数取决于状态的种类数,每一个码里的“1”的位置,就代表了哪个状态生效。
还是回到我们最开始的例子,那么我们将它换成独热编码后,应该是:
feature1=[01,10]
feature2=[001,010,100]
feature3=[0001,0010,0100,1000]
所以,对于前边样本[“male”,“from Asia”, “uses Chrome”],经过独热编码后,它应该为:
[01,00, 000,000,100, 0000,0010,0000,0000]
注:上边用空格,以便看的更清晰。
以上的独热编码可以写成简写形式: [1,0, 0,0,1, 0,1,0,0]
最后,摘抄下独热编码的好处:
由于分类器往往默认数据数据是连续的,并且是有序的,但是在很多机器学习任务中,存在很多离散(分类)特征,因而将特征值转化成数字时,往往也是不连续的, One-Hot 编码解决了这个问题。
并且,经过独热编码后,特征变成了稀疏的了。这有两个好处,一是解决了分类器不好处理属性数据的问题,二是在一定程度上也起到了扩充特征的作用。