独热编码

在数据样本中,有些特征不是连续值,而是一些离散值。举个网站访问数据例子:


1 网站访问数据集

序号

性别

所属区域

使用浏览器

1.

Male

Europe

Firefox

2.

Female

US

Chrome

3.

Male

Asia

Safari

4.

Female

Europe

IE

5.

Female

US

Firefox

6.

Female

Asia

Chrome

7.

Male

Europe

Safari

8.

Male

US

Chrome

......

......

......

......

 

其中性别、所属区域、使用浏览器都是分类值。这在机器学习算法中不太好处理,所以一般将特征的离散值用数字表示。例如将male编码为0female编码为1Europe编码为0US编码为1Asia编码为2Firefox编码为0Chrome编码为1Safari编码为2IE编码为3

 

则上表中的8条记录可以表示成:

序号

性别

所属区域

使用浏览器

1. 

0

0

0

2. 

1

1

1

3. 

0

2

2

4. 

1

0

3

5. 

1

1

0

6. 

1

2

1

7. 

0

0

2

8. 

0

1

1

......

......

......

......

 

但是,即使转化为数字,上述数据也不能直接用在我们的分类模型中。因为,分类器默认的输入数据是连续的,并且是有序的。

 

针对这个问题,一种可能的解决方案是采用独热编码(One-Hot Encoding),独热,顾名思义,就是编码中只有一个位是有效的,所以又称为“一位有效编码”。

 

例如上面的特征“性别”,有2个可能的分类:malefemale。那么就可以用2位编码来表示:1001,每次只有1个位激活。

 

“所属区域”,有3个可能的分类:即EuropeUSAsia。那么就用3位编码来表示:100010001,每次只有1个位激活。

 

“使用浏览器”,有4个可能的分类:即FirefoxChromeSafariIE。那么就用4位编码来表示:1000010000100001,每次只有1个位激活。

 

那么一条数据记录[‘male’,’Asia’,’Safari’],通过独热编码后就成为:[1,0,0,0,1,0,0,1,0]

 

这样,每一条记录都被映射到欧式空间,可以用于计算特征之间的距离与相似度等,能够用于各种机器学习算法了。

 

将上面的8条记录进行独热编码,则[‘male’,’Asia’,’Safari’]对应的独热编码是:[ 1.  0.  0.  0.  1.  0.  0.  1.  0.],程序如下:

 

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
enc.fit([[0, 0, 0], [1, 1, 1], [0, 2, 2], [1, 0, 3], [1, 1, 0], [1, 2, 1], [0, 0, 2], [0, 1, 1]])
print enc.transform([[0, 2, 2]]).toarray()

 

 当然,还可以使用pandas中的get_dummies进行one-hot编码。

 

 

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值