停止使用 Pandas get_dummies() 进行特征编码

欢迎关注 ,专注Python、数据分析、数据挖掘、好玩工具!

我们知道机器学习算法要求输入数据源采用特定格式的数值向量。特征工程是数据科学模型开发生命周期的一个重要组成部分,它指的是将原始数据转换为适合训练模型的数值格式。

数据科学家大约80%的时间用于数据准备和特征工程。模型的性能取决于特征工程策略。原始数据集包含各种数据类型的特征,有各种特征工程技术将不同数据类型的数据特征转换为数字向量。

虚拟编码是指将分类特征转换为数字矢量格式的编码策略。还有各种其他技术来编码分类特征,包括计 Count Encoder, One Hot Encoder, Tf-Idf Encoder 等。

pd.get_dummies() 是 Pandas 的一个函数,它在一行代码中执行伪编码。数据科学家大多将其用于特征编码,但不建议将其用于生产或 Kaggle 竞赛。

在本文中,我们将讨论背后的原因以及 get_dummies() 函数的最佳替代选择。

原因

Pandas库中的 get_dummies() 函数可用于将分类变量转换为指示符变量。在某种程度上,它是一种静态的行为编码技术。

我们将随机选取一个数据集,其中包含2个数字特征和1个分类特征(“color”),以便进一步说明。"color"分类变量有3个独特的类别:绿色、红色、蓝色。

分类特征 “color” 有3个特征值:绿色、红色、蓝色。但是,测试数据可能具有也可能不具有所有特征值,这可能会在建模时导致数据不匹配问题。

颜色 “color” 特征中缺少蓝色特征值,这导致编码数据中缺少蓝色特征列。这是因为 pd.get_dummies 没有学习训练数据的特征,并且在预测时会进一步导致特征不匹配。

One Hot Encoder

One Hot Encoder 是一种流行的特征编码策略,其性能类似于pd.get_dummies(),具有额外的优势。它通过为每个分类特征的每个类别分配一个二进制列来对名义或分类特征进行编码。Scikit-learn 附带了 one-hot 编码器的实现。

从上述一个训练和测试数据 One hot encoder 结果可以看出,编码训练数据的分类变量时编码特征被保存。

尽管蓝色特征值不存在于测试数据中,但一个热编码器为蓝色类别创建了一个特征列,因为它存在于训练管道中。

from sklearn.preprocessing import OneHotEncoder
# one hot encoding
enc = OneHotEncoder(sparse=False)
color_onehot = enc.fit_transform(X_train[['color']])
#to print the encoded features for train data
pd.DataFrame(color_onehot, columns=list(enc.categories_[0]))
# tranform encoding for test data
test_onehot = enc.transform(X_test[['color']])
#to print the encoded features for train data
pd.DataFrame(test_onehot, columns=list(enc.categories_[0]))

结论

pd.get_dummies() 在特征编码后返回具有干净列名的数据帧,但不建议将其用于生产或 Kaggle 竞赛。应首选 One-hot encoded 或 Count Vectorizer 策略,因为它携带每个分类特征的特征值特征。

对于 One hot encoder,还可以使用 handle_unknown=‘ignore’ 参数处理新的功能类别,这会进一步导致 pd.get_dummies() 中的数据不匹配问题。


技术交流

欢迎转载、收藏、有所收获点赞支持一下!

在这里插入图片描述
目前开通了技术交流群,群友超过2000人,添加方式如下:

如下方式均可,添加时最好方式为:来源+兴趣方向,方便找到志同道合的朋友

  • 方式一、发送如下图片至微信,进行长按识别,回复加群;
  • 方式二、直接添加小助手微信号:pythoner666,备注:来自CSDN
  • 方式三、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值