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]
因为在机器学习算法中,样本之间的相似度会影响模型的建立,此时它们广州、北京、上海这些离散值被我们表示成了一个在欧式空间距离都相等的值,它们的特征之间的距离都相等都是
假如我们只将样本映射到字典{‘广州’:0,‘北京’:1,上海:2}
city | |
---|---|
sample1 | 0 |
sample2 | 1 |
sample3 | 2 |
此时机器学习算法并不能识别它们是离散的特征,在模型的训练学习中,机器会以为city值为2会比city值为0在模型占据的权重更大,从而会影响模型的精度和性能。
来源:CSDN
作者:大墅哥哥
链接:https://blog.csdn.net/weixin_43532000/article/details/104501814