OneHotEncoder

1、独热编码的优点

  1. 能处理非连续型数值特征
  2. 在一定程度上扩充了特征。如性别,经过one hot编码后,变成了男或女两个特征。

2、独热编码原理

使用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)。即每两个工作之间的距离都是一样的,显得更合理。

3、sklearn中的one-hot

代码示例:

import numpy as np
from sklearn.preprocessing import OneHotEncoder

enc=OneHotEncoder()
enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]])

print('enc.n_values_ is :',enc.n_values_)
print('enc.feature_indices_ is:',enc.feature_indices_)
print(enc.transform([[0,1,1]]).toarray())


运行结果:
enc.n_values_ is: [2 3 4]
enc.feature_indices_ is: [0 2 5 9]
[[ 1.  0.  0.  1.  0.  0.  1.  0.  0.]]

代码解释:

为OneHotEncoder类传递进来的数据集:

[[0,0,3],
[1,1,0],
[0,2,1],
[1,0,2]]
  • 对象encn_values_成员变量,记录着每一个属性的最大取值数目,如本例第一个属性:0, 1, 0, 1 ⇒ 2,0, 1, 2, 0 ⇒ 3,3, 0, 1, 2 ⇒ 4
  • 即各个属性(feature)在 one hot 编码下占据的位数;
  • 对象 enc 的 feature_indices_,则记录着属性在新 One hot 编码下的索引位置
  • feature_indices_ 是对 n_values_ 的累积值,不过 feature_indices 的首位是 0;

进一步通过 fit 好的 one hot encoder 对新来的特征向量进行编码:

>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1.,  0.,  0.,  1.,  0.,  0.,  1.,  0.,  0.]])
  • 前 2 位 1, 0,对 0 进行编码
  • 中间 3 位 0, 1, 0 对 1 进行编码;
  • 末尾 4 位 0, 1, 0, 0 对 1 进行编码;

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值