(python基础)遇到的Encoder

任务一:对列进行OneHot编码

方法1:pd.get_dummies

这是pandas自带的将数据转成独热编码的方式,简单,并且好用,可以当做首选,尤其是表格数据的时候。详情可以参考官方文档,也可以简单的参考一下这篇笔记pandas.get_dummies 的用法

注意: get_dummies转独热编码,是针对离散的字符串的数据,整数的话我发现仍然保留原来的样子。

方法2:OneHotEncoder()
看了好几个博客,说这种方式只能对整数进行编码,字符串不行,但是我今天试了一下,字符串是可以的,官方文档也是说输入是字符串或者整数。

但是要注意,OneHotEncoder的fit_transform()函数接收是二维数组的形式,所以如果是pandas表格的某一列,也需要到时候reshape(-1,1)一下。

方法3:DictVectorizer
实现了 “one-of-K” 或 “one-hot” 编码,用于分类(也称为标称,离散)特征。分类功能是 “属性值” 对,其中该值被限制为不排序的可能性的离散列表(例如主题标识符,对象类型,标签,名称…)。也就是说,其他的整数的这种情况会保留原来的值。

这个fit_transform里面接收的要是一个字典的形式,输出是二维数组。
 

方法4: 这个是附加一个keras.utils.to_categorical
这个也是实现的one-hot编码,不过一般是用于类别,也就是标签的时候,是把类别标签转换为onehot编码(categorical就是类别标签的意思,表示现实世界中你分类的各类别),如果特征想要编码成one-hot,还是不要用这个了吧。
 

方法5:

# for Sex / Gender
data['sex'] = np.where(data['sex'] == 'male', 1, 0)

任务二:对列进行数字映射编码

方法一:map()函数映射

 

这是一种很方便,很快的方式。使用map()函数。(下面是两个例子)

# for Embarked
ordinal_label = {k: i for i, k in enumerate(data['embarked'].unique(), 0)}
data['embarked'] = data['embarked'].map(ordinal_label)
pclass_map = {label:idx for idx, label in enumerate(set(data['Pclass']))}
# 也可以pclass_map = {"low":0, "medium":1, "high":2} 
d1 = data['Pclass'].map(pclass_map)
d1

上面可以发现,如果是用for循环的这种map函数, 编码形式虽然是0,1,2这种数字形式,但是含义已经掩盖掉了。 也就是说0,1,2已经不能说明什么意义了,只是分别代表high,medium,low这三个字符串。所以如果类别少的话,我们最好是自己自定义进行映射,比如上面我注释掉的那个,那个的0, 1, 2还分别代表低,中,高,顺序意义还在。


 

方法二:LabelEncoder()

这个看官方文档,一般是用于类别标签的,如果用于特征的话,默认并不是按照低、中、高这样的顺序进行编码的,也就是说,这个和上面那种for循环定义映射的那个一样,虽然成功的改成了数字,但是意义不在了。

le = LabelEncoder()
d2 = le.fit_transform(data['Pclass'])
d2

所以人家官方文档才把这个函数的作用说成:

使用0到n_classes-1之间的值对目标标签进行编码。该转换器应用于编码目标值,即 y,而不是输入X。

所以这个函数,别乱用到特征的编码。

方法三:OrdinalEncoder()

分类特征编码为整数数组。
该转换器的输入应为整数或字符串之类的数组,表示分类(离散)特征所采用的值。要素将转换为序数整数。这将导致每个要素的一列整数(0到n_categories-1)。

所以,这个才是真正的用到分类特征上的映射数字编码,并且还会保留原来的顺序。
 

————————————————
版权声明:以上转载自CSDN博主「Miracle8070」的原创文章,原文链接:https://blog.csdn.net/wuzhongqiang/article/details/104169480

————————————————

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值