没有合适的资源?快使用搜索试试~ 我知道了~
首页机器学习数据中类别变量(categorical variable)的处理方法
机器学习数据中类别变量(categorical variable)的处理方法
12 下载量 69 浏览量
更新于2023-04-29
1
收藏 63KB PDF 举报
类别变量(categorical variable):只有有限个值得变量,如性别就是一个类别变量,类似于这种。 如果不对这些变量做预处理,训练出来的模型可能是错误的。 主要有三种方法来处理这个变量。 如何从数据中找到类别变量? 我们可以对每一列检查它的数据类型,某列的数据类型为”object”,表明该列有文本(也可能是其他的,但对我们的目标来说不重要),某列是数据是文本,则该列表示类别变量。 代码如下: # 获得类别变量的列名,存放在列表中 s = (X_train.dtypes == 'object') object_cols = list(s[s].index) 1.直接删除类别变量。
资源详情
资源推荐
机器学习数据中类别变量(机器学习数据中类别变量(categorical variable)的处理方法)的处理方法
类别变量(类别变量(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 = [col for col in object_cols if
set(X_train[col]) == set(X_valid[col])]
# Problematic columns that will be dropped from the dataset
bad_label_cols = list(set(object_cols)-set(good_label_cols))
label_X_train = X_train.drop(bad_label_cols, axis=1)
label_X_valid = X_valid.drop(bad_label_cols, axis=1)
下面代码为进行标签编码(变量名与上段代码不同)
from sklearn.preprocessing import LabelEncoder
# Make copy to avoid changing original data
label_X_train = X_train.copy()
label_X_valid = X_valid.copy()
# Apply label encoder to each column with categorical data
label_encoder = LabelEncoder()
for col in object_cols:
label_X_train[col] = label_encoder.fit_transform(X_train[col])#fit先获得col列中可能值个数
label_X_valid[col] = label_encoder.transform(X_valid[col])# inverse_transform 还可以实现反向编码
上面的代码单元格中,对于每一列(类别变量),我们随机地将每个可能值分配给不同的整数。这是一种比提供自定义标签更简单的通用方法;但是,如
果我们为所有序数变量提供更好的信息标签,那么性能将得到进一步的提高。
3.独热编码独热编码(One-Hot Encoding)
独热编码独热编码:创建新列,指示每个可能值的存在或不存在。例:一个类别变量是颜色,包含三个可能值:红色、黄色、蓝色。独
热编码即在原始数据集上新建三列分别指示这三种颜色,如果某一条数据该类别变量是“红色”,则在指示红色的列对应这条数
据的位置处放一个1。
与标签编码不同,独热编码不假定类别的顺序,即类别变量的每个可能值没有明显的排序。我们吧这种没有内在排名的类别变
量称为名义变量(名义变量(nominal variables)”
如果类别变量的可能值有非常多(超过15个),独热编码就不能有很好效果。
Scikit-Learning有一个OneHotEncoder类,有许多参数。可参考这篇博客scikit-learn 中 OneHotEncoder 解析
weixin_38689922
- 粉丝: 6
- 资源: 915
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功