one-hot独热编码

岁酱吖の 提交于 2020-02-25 19:56:33

one-hot独热编码

one-hot是常用的处理文本序列数据和离散数据的技术,在机器学习中,对数据进行预处理时很常用的方法。

什么是one-hot

One-hot code, 直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。
因为机器并不能识别文本数据的意义,此时我们要将其转换成机器能懂的数字,此时就需要用到one-hot

应用场景

处理文本序列数据和离散数据:
文本序列数据:
假如词库中有句子:“我和机器学习”,“我爱祖国”
我们对词库建立一个词典{“我”:0,“和”:1,“机器学习”:2,“爱”:3,“祖国”:4}
对于“我爱祖国”一句进行one-hot编码后将会变成一个
维度为**5(即字典的长度)**的向量: [1 0 0 1 1]

离散数据:
以下举个实际例子

实际例子

在三个样本数据sample中,特征feature为city,机器学习算法喜欢和数字打交道,所以让我们把这些文本标签转换为数字。

city
sample1 广州
sample2 北京
sample3 上海

我们会将征映射到字典{‘广州’:0,‘北京’:1,上海:2}

city
sample1 0
sample2 1
sample3 2

然后再使用one-hot编码

广州 北京 上海
sample1 1 0 0
sample2 0 1 0
sample3 0 0 1

因为city中有三个状态,将广州、北京、上海这三个状态,分别进行编码成一个向量
广州:[1 0 0]
北京:[0 1 0]
上海:[0 0 1]
因为在机器学习算法中,样本之间的相似度会影响模型的建立,此时它们广州、北京、上海这些离散值被我们表示成了一个在欧式空间距离都相等的值,它们的特征之间的距离都相等都是2\sqrt{2}

假如我们只将样本映射到字典{‘广州’:0,‘北京’:1,上海:2}

city
sample1 0
sample2 1
sample3 2

此时机器学习算法并不能识别它们是离散的特征,在模型的训练学习中,机器会以为city值为2会比city值为0在模型占据的权重更大,从而会影响模型的精度和性能。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!