机器学习数据中类别变量(categorical variable)的处理方法

类别变量在机器学习中需预处理,包括删除、标签编码和独热编码。标签编码适用于有序类别,独热编码适用于无序类别。过多的类别值可能导致数据膨胀,需谨慎处理。
摘要由CSDN通过智能技术生成

类别变量(categorical variable):只有有限个值得变量,如性别就是一个类别变量,类似于这种。

如果不对这些变量做预处理,训练出来的模型可能是错误的。
主要有三种方法来处理这个变量。
如何从数据中找到类别变量?
我们可以对每一列检查它的数据类型,某列的数据类型为”object",表明该列有文本(也可能是其他的,但对我们的目标来说不重要),某列是数据是文本,则该列表示类别变量。
代码如下:

# 获得类别变量的列名,存放在列表中
s = (X_train.dtypes == 'object')
object_cols = list(s[s].index)  

1.直接删除类别变量。

这种方法最简单,如果类别变量不包含有用的信息的话,直接删除。

drop_X_train = X_train.select_dtypes(exclude=['object'])#测试数据也要做相同的操作

2.标签编码(Label Encoding)

类别变量可能的值有顺序,将每个可能值分配给不同的整数。如,从不(0)<很少(1)<经常(2)<每天(3)。我们将这种有顺序的类别变量称为序数变量(ordinal variable )

Scikit-Learning有一个LabelEncoder类,可以用来获取标签编码。我们对分类变量进行循环,并将标签编码器分别应用于每一列。

在此步前通常要查看类别变量在有没有某些值只在验证集出现,如果有的话,直接使用下面这个类来做标签编码会抛出一个错误。因为这些值只在验证集出现。LabelEncoder不会给他们指派整数值。可以编写一个自定义标签编码器来处理类别变量中的新类别。最简单的方法是删除有问题的分类变量。
下面这段代码将有问题的列保存到Python列表‘bad_Label_cols’中。同样,可以安全地进行标签编码的列存储在‘good_Label_cols’中。并将bad_Label_cols的列删除。

object_cols = [col for col in X_train.columns if X_train[col].dtype == "object"]

# Columns that can be safely label encoded
good_label_cols 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值