1. 什么叫独热编码(one-hot encoding)?
独热编码一般是在有监督学习中对数据集进行标注时候使用的,指的是在分类问题中,将存在数据类别的那一类用X表示,不存在的用Y表示,这里的X常常是1, Y常常是0。
举个例子:
比如我们有一个5分类问题,我们有数据(Xi,Yi),其中类别Yi有五种取值(因为是五类分类问题),所以如果Yi为第一类那么其独热编码为:
[1,0,0,0,0] ,第二类那么独热编码为:[0,1,0,0,0] ,也就是说只对存在有该类别的数的位置上进行标记为1,其他皆为0。这个编码方式经常用于多分类问题,特别是损失函数为交叉熵函数的时候。
One Hot Encoding 是将分类变量转换为可以提供给ML算法,以在预测中做得更好的编码形式。
假设我们有以下数据集:
分类值表示数据集中条目的数值。例如:如果数据集中有另一家公司,则它将被赋予分类值为4.随着唯一条目数量的增加,分类值也会按比例增加。
当然,我们可以利用 sklearn’s LabelEncoder 把分类值转化为数字。
2 . 为什么LabelEncoder标签编码不足以为模型提供训练参数?为什么需要One Hot Encoding ?
标签编码的问题在于它假定分类值越高,类别越好。
对于上面的例子来说:用来分类VW、 Acura、Honda的类别。假设你的模型在内部计算平均值来进行预测,那么我们得到,1 + 3 = 4/2 = 2。这意味着:VW和Honda的平均值是Acura,这样的模型预测会有很多错误,偏差很远。
这就是为什么我们使用一个One Hot Encoding来使类别的“二值化”,并将其作为训练模型的特征。
One HotEncoding独热编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。
例如:
自然状态码为:111,101,010,011,110,101
独热编码为:000001,000010,000100,001000,010000,100000
可以这样理解,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征。并且,这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的。
开始的数据集用One Hot Encoding 处理后结果如下:
3 . 参考资料:
https://hackernoon.com/what-is-one-hot-encoding-why-and-when-do-you-have-to-use-it-e3c6186d008f