one-hot向量
one-hot向量将类别变量转换为机器学习算法易于利用的一种形式的过程,这个向量的表示为一项属性的特征向量,也就是同一时间只有一个激活点(不为0),这个向量只有一个特征是不为0的,其他都是0,特别稀疏。
举个例子:一个特征“性别”,性别有“男性”、“女性”,这个特征有两个特征值,也只有两个特征值,如果这个特征进行one-hot编码,则特征值为“男性”的编码为“10”,“女性”的编码为“01”,如果特征值有m个离散特征值,则one-hot后特征值的表示是一个m维的向量,每个样本的特征只能有一个值,这个值的向量坐标上就是1,其他都是0,如果有多个特征,“性别”有两个特征,“尺码”:M、L、XL三个值,我们用“01”表示男性,M为“100”,L为“010”,XL为“001”,所以一个样本,【“男性”、“L”】 one-hot编码为[10 010],一个样本也就是5维的向量,这就是one-hot形式。
one-hot 优点缺点
优点:
能够处理非连续型数值特征,也就是离散值。
在一定程度上也扩充了特征。比如性别本身是一个特征,经过one hot编码以后,就变成了男或女两个特征,将离散特征通过one-hot编码映射到欧式空间,在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。
将离散型特征使用one-hot编码,可以会让特征之间的距离计算更加合理。比如,有一个离散型特征,代表工作类型,该离散型特征,共有三个取值,不使用one-hot编码,其表示分别是x_1 = (1), x_2 = (2), x_3 = (3)。两个工作之间的距离是,(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).即每两个工作之间的距离是一样的,显得更合理。
缺点:
如果原本的标签编码是有序的,那one hot编码就不合适了——会丢失顺序信息。
如果特征的特征值数目特别多,特征向量就会非常大,且非常稀疏。
举例:
在分类问题中,经常使用的损失函数 交叉熵(categorical_crossentropy),如果你不使用 onehot格式,而是使用数字来代替,那么类别之间的数据就不好判断了,就需要使用 (sparse_categorical_crossentropy)来表示
categorical_crossentropy VS sparse_categorical_crossentropy
If the targets are one-hot encoded, use categorical_crossentropy
Examoles of one-hot encodings:
- [1, 0, 0]
- [0, 1, 0]
- [0, 0, 1]
If the targets are integers, use sparse_categorical_crossentropy
Examples of integer encodings
- 1
- 2
- 3
来源:CSDN
作者:ding_programmer
链接:https://blog.csdn.net/ding_programmer/article/details/103460098