机器学习之——什么是Onehot编码?

Onehot编码是一种将离散特征转换为二进制向量的方法,常用于机器学习中的分类问题。它将每个分类映射为一个全零的向量,仅在对应位置标记1。这种编码有助于解决分类器处理属性数据的问题,同时在计算特征间距离时提供合理性。例如,性别特征(男、女)会被编码为二元向量,国家特征(中国、美国、法国)则会被编码为多个二进制位。在处理离散数据时,Onehot编码使得距离计算更为恰当,但若特征间存在连续关系,分布式表示可能更适用。
摘要由CSDN通过智能技术生成

What?

什么是Onehot编码?
onehot编码又叫独热编码,其为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。
Onehot编码是分类变量作为二进制向量的表示。
这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。

举个例子
在机器学习算法中,我们经常会遇到分类特征。
例如:人的性别有男女,祖国有中国,美国,法国等。
这些特征值并不是连续的,而是离散的,无序的。
通常我们需要对其进行特征数字化。

那什么是特征数字化呢?如下:

1.性别特征:["男","女"]
按照N位状态寄存器来对N个状态进行编码的原理,咱们处理后应该是这样的(这里只有两个特征,所以N=2):
男 → 10
女 → 01
2.祖国特征:["中国","美国,"法国"](N=3):
中国 → 100
美国 → 010
法国 → 001
3.运动特征:["足球","篮球","羽毛球","乒乓球"](N=4):
足球 → 1000
篮球 → 0100
羽毛球 → 0010
乒乓球 → 0001

当一个样本为["男","中国","乒乓球"]的时候,完整的特征数字化的结果为:
[1,0,1,0,0,0,0,0,1]
其实就是对应,男(01),中国(100),乒乓球(0001)合起来的编码

上面这个例子是网上比较常见的,下面补充另一个例子。
对 “hello world” 进行one-hot编码
1.确定要编码的对象--hello world,
2.确定分类变量--h e l l o 空格 w o r l d,共27种类别
(26个小写字母 + 空格,);
3.转化为二进制向量:有11个样本,每个样本有27个特征
这里有一个前提,特征排列的顺序不同,对应的二进制向量亦不同
(比如把空格放在第一列和a放第一列,one-hot编码结果肯定是不同的)
因此我们必须要事先约定特征排列的顺序
27种特征首先进行整数编码:
a--0,b--1,c--2,......,z--25,空格--26
(27种特征按照整数编码的大小从前往后排列)
得到的one-hot编码如下:

故,通过两个例子可以这样理解,对于每一个特征,如果它有m个可能值,那么经过onehot编码后,就变成了m个二元特征。并且,这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的

Why?

使用onehot有什么好处?
one hot编码是将类别变量转换为机器学习算法易于利用的一种形式的过程。
这样做的好处主要有:
1.解决了分类器不好处理属性数据的问题
2.在一定程度上也起到了扩充特征的作用

直接原因:
使用One-hot的直接原因是现在多分类cnn网络的输出通常是softmax层,而它的输出是一个概率分布,从而要求输入的标签也以概率分布的形式出现。
例如,上面的 hello world 相当于多分类的问题(27分类),每个样本只对应于一个类别(即只在对应的特征处值为1,其余地方值为0),而我们的分类结果,得到的往往是隶属于某个类别的概率,这样在进行损失函数(例如交叉熵损失)或准确率计算时,变得非常方便。

我们通常使用onehot编码来处理离散型的数据。
原因如下:
在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。
使用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).即每两个工作之间的距离是一样的,显得更合理。

这边补充一下:不需要使用one-hot编码来处理的情况
将离散型特征进行one-hot编码的作用,是为了让距离计算更合理,但如果特征是离散的,并且不用one-hot编码就可以很合理的计算出距离,那么就没必要进行one-hot编码。
比如,该离散特征共有1000个取值,我们分成两组,分别是400和600,两个小组之间的距离有合适的定义,组内的距离也有合适的定义,那就没必要用one-hot 编码。
离散特征进行one-hot编码后,编码后的特征,其实每一维度的特征都可以看做是连续的特征。

除此,one-hot编码要求每个类别之间相互独立,如果之间存在某种连续型的关系,或许使用distributed respresentation(分布式)更加合适。


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值