注:本文是作者根据个人理解所写,仅供参考
为什么使用独热编码?
在机器学习的时候,我们经常会遇到一个特征或者多个特征并不是一个连续值,而是一个分类值,这种情况对于机器学习时训练模型时没有意义,所以我们才引入了 独热编码
举个例子:
如果在预测某种水果销量的时候,水果的颜色是一个反映特征的指标,我们想使用颜色以及若干个其他的特征来预测这种水果的销量,你会如何把这个指标量化?
颜色:红色,黄色,青色
很简单,如果是某个特征,就把这个特征标为1,其他的置为0就好了。
[1,0,0]
[0,1,0]
[0,0,1]
通过这种方式我们就能够将一个分类变量转换成一个或者多个新特征,以方便后面对神经网络的搭建。
使用One-Hot编码计算距离
如果我们再深入看一下,[0,1,0] 像不像是空间中的一个坐标?
没错,使用独热编码还有一个好处就是对很多算法都十分友好,因为在很多算法中都无法根据类别来提取特征,而独热编码正是为了将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。
很多算法都是基于向量空间中的度量来进行计算的,离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的。就可以跟对连续型特征的归一化方法一样。
对每一维特征进行归一化。比如归一化到[-1,1]或归一化到均值为0,方差为1,也可以用于计算欧式距离,曼哈顿距离,余弦相似度等。
使用One-Hot有什么好处?
举个例子:如果某种分类数据有6种取值:001,010,011,100,101,110
如果我们使用独热编码结果就是:000001,000010,000100,001000,010000,100000
发现没有,原本三位的数据变成了六位。
事实上,使用独热编码的确可以起到扩充特征的作用,除此之外,这样得到的六个表示是互斥的,也可以使数据变得更加稀疏。
注意:使用独热编码能够扩充每种特征,相应的,我们计算的数据量也会成倍增加。
One-Hot与哑变量(虚拟变量)有什么区别?
本质区别:One-Hot是用于解决类别型数据的离散值问题,让距离计算更合理,而虚拟变量是一个统计学概念,是用0和1表示某个特征的两个不同状态或类别
One-Hot编码可以用于处理具有多个类别的离散特征,每个类别都对应一个新的二元特征。而哑变量通常用于处理具有两个类别的离散特征,只需要一个二元特征来表示。