类别特征编码

特征工程中通常要处理类别特征,如学历、性别、城市等,经常的做法是转换成dummy变量。会有LabelEncoder、OneHotEncoder、factorize、get_dummies4种方法。
下面进行比较:

import pandas as pd
from sklearn import  preprocessing

test=pd.DataFrame({'city':['beijing','shanghai','shenzhen'],'age':[21,33,23],'target':[0,1,0]})
1、LabelEncoder
label = preprocessing.LabelEncoder()
test['city']= label.fit_transform(test['city'])
print(test)
   age  city  target
0   21     0       0
1   33     1       1
2   23     2       0
2、OneHotEncoder
enc=preprocessing.OneHotEncoder(categorical_features=[1], sparse=False)
test=enc.fit_transform(test)
print(test)
[[ 1.  0.  0. 21.  0.]
 [ 0.  1.  0. 33.  1.]
 [ 0.  0.  1. 23.  0.]]

categorical_features默认是‘all’表示对所有特征编码,[1]是变量的索引,表示第2个变量;sparse 缺省状态下是True表示输出为稀疏矩阵。未经编码的变量放在右边。

3、factorize
print(pd.factorize(test['city']))
(array([0, 1, 2], dtype=int64), Index(['beijing', 'shanghai', 'shenzhen'], dtype='object'))
4、get_dummies
print(pd.get_dummies(test['city'],prefix='city'))
   city_beijing  city_shanghai  city_shenzhen
0             1              0              0
1             0              1              0
2             0              0              1

实际应用时可以如下:

test.apply(lambda x: pd.factorize(x)[0]) 

比较发现:LabelEncoder和factorize编码都是转化成了序数型,但有时这不是我们所期望的(如学历);OneHotEncoder和get_dummies都是按照类别全部转换成了dummy变量,虽然这会增加大量的存储空间。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值