独热编码
在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等。
这些特征值并不是连续的,而是离散的,无序的。通常我们需要对其进行特征数字化。
那什么是特征数字化呢?例子如下:
性别特征:["男","女"]----[0,1]
祖国特征:["中国","美国,"法国"]----[0,1,2]
运动特征:["足球","篮球","羽毛球","乒乓球"]----[0,1,2,3]
现在有'某人'={
"男"
"中国"
"乒乓球"
}
那么这个人数字化特征就是[0,0,4]来表示,但是这样的特征处理并不能直接放入机器学习算法中。因为类别之间是无序的(运动数据就是任意排序的),也就是算法识别的0无序,所以无法的值特征是哪一个?如此执意训练,造成负训练效果
独热编码又称为一位有效编码
—————————————————————————————————————————————————
性别:
男 => 10
女 => 01
祖国特征:["中国","美国,"法国"](这里N=3):
中国 => 100
美国 => 010
法国 => 001
运动特征:["足球","篮球","羽毛球","乒乓球"](这里N=4):
足球 => 1000
篮球 => 0100
羽毛球 => 0010
乒乓球 => 0001
所以,当一个样本为["男","中国","乒乓球"]的时候,完整的特征数字化的结果为:
[1,0,1,0,0,0,0,0,1]
为什么使用one-hot编码来处理离散型特征?
—————————————————————————————————————————————
将离散型特征使用one-hot编码,确实会让特征之间的距离计算更加合理。
比如,有一个离散型特征,代表工作类型,该离散型特征,共有三个取值,不使用one-hot编码,其表示分别是
x_1 = (1)
x_2 = (2)
x_3 = (3)
两个工作之间的距离是:
d(x_1, x_2) = 1
d(x_2, x_3) = 1
d(x_1, x_3) = 2
那么x_1和x_3工作之间就越不相似吗?显然这样的表示,计算出来的特征的距离是不合理。那如果使用one-hot编码,则得到:
x_1 = (1, 0, 0)
x_2 = (0, 1, 0)
x_3 = (0, 0, 1)
那么两个工作之间的距离就都是sqrt(2).即每两个工作之间的距离是一样的,显得更合理