当前位置:   article > 正文

机器学习之One-Hot Encoding详解-- one-hot编码解释-数据预处理之独热编码(One-Hot Encoding)_将one hot格式转化为0 1格式

将one hot格式转化为0 1格式

什么是one-hot编码?one-hot编码,又称独热编码、一位有效编码。其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。

假设有如下表格,记录了某网站访问者的三个信息:性别,来自,使用的浏览器:

考虑以下三个特征:

性别:["男","女"]

来自:["北京","上海","广州"]

使用的浏览器:["Firefox"," Chrome","Safari","Internet Explorer"]

如果将上述特征用数字表示。例如:

性别:["男","女"],我们用"0"表示"男",用"1"表示"女",则,["男","女"]可表示为[0,1]。其中,"男"对应0,"女"对应1

同样的:

表来自:["北京","上海","广州"],我们用"0"表示"北京",用"1"表示"上海",用"2"表示"广州",得到:

["北京","上海","广州"],表示为:[0,1,2]。其中,北京 对应 0,上海 对应 1,广州 对应 2。

使用的浏览器:["Firefox"," Chrome","Safari","Internet Explorer"],我们用"0"表示"Firefox",用"1"表示"Chrome",用"2"表示"Safari",用"3"表示"Internet Explorer",得到:

["Firefox"," Chrome","Safari","Internet Explorer"],表示为:[0,1,2,3]。其中 Firefox 对应0,Chrome 对应 1,Safari 对应 2,Internet Explorer 对应 3。

那么,如果现在有一个记录:

通过上面设置的对应关系,用数字表示,可表示为:[0,0,1]。

One-Hot Encoding

可以这样理解,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征。并且,这些特征互斥,每次只有一个激活。

如上图:假设我们有四个样本(行,一共有四行),每个样本有三个特征(列,一共有三列,分别是:性别、来自、使用的浏览器),转化为数字以后,变为:

其中:特征1表示:性别,特征2表示:来自,特征3表示:使用的浏览器。

每个特征的取值个数(第一列共有2个取值,第二列有3个,第三列有4个),上图中我们已经对每个特征进行了普通的数字编码,那么one-hot编码是怎么计算的呢?我们拿特征3来说明:

特征3:使用的浏览器,有4种取值(状态),分别是 0,1,2,3。我们就用4个状态位来表示这个特征,one-hot编码要保证每个样本中的单个特征只有一位处于状态1(仅该位激活),其他的都是0。

0表示为:1000(四个状态位)

1表示为:0100(四个状态位)

2表示为:0010(四个状态位)

3表示为:0001(四个状态位)

同理,特征2有3种取值(状态),分别是 0,1,2。我们就用3个状态位来表示这个特征,one-hot编码:

0表示为:100(三个状态位)

1表示为:010(三个状态位)

2表示为:001(三个状态位)

特征1,有2种取值(状态),分别是 0,1。我们就用2个状态位来表示这个特征,one-hot编码:

0表示为:10(两个状态位)

1表示为:01(两个状态位)

 

所以我们可以得到上图样本特征的新表示:

对于四个样本我们可以得到它们的特征向量分别为:

样本1-->[1,0,1,0,0,1,0,0,0]====>[特征1+特征2+特征3]==>[10,100,1000]==>[1,0,1,0,0,1,0,0,0]

样本2-->[0,1,0,1,0,0,1,0,0]

样本3-->[0,1,0,0,1,0,0,1,0]

样本4-->[1,0,1,0,0,0,0,0,1]

基于python和Scikit-learn的一个简单例子,求样本5的one-hot编码

普通数字表示:[0,0,1]

输出:array([[1., 0., 1., 0., 0., 0., 1., 0., 0.]])

  1. import numpy
  2. import sklearn
  3. from sklearn.preprocessing import OneHotEncoder
  4. data=[
  5. [0,0,0],
  6. [1,1,1],
  7. [1,2,2],
  8. [0,1,3]
  9. ]
  10. encoder = OneHotEncoder()
  11. encoder.fit(data)
  12. ans = encoder.transform([[0, 0, 1]]).toarray()
  13. ans

另外一个基于python和Scikit-learn的一个简单例子:

  1. import numpy
  2. import sklearn
  3. from sklearn.preprocessing import OneHotEncoder
  4. encoder2 = OneHotEncoder()
  5. encoder2.fit([
  6. [0, 2, 1, 12],
  7. [1, 3, 5, 3],
  8. [2, 3, 2, 12],
  9. [1, 2, 4, 3]
  10. ])
  11. encoded_vector = encoder2.transform([[2, 3, 5, 3]]).toarray()
  12. encoded_vector

输出:

array([[0., 0., 1., 0., 1., 0., 0., 0., 1., 1., 0.]])

 

 

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/350942?site
推荐阅读
相关标签
  

闽ICP备14008679号