分类变量的处理

分类变量仅采用有限数量的值,询问您多久吃一次早餐,并提供四个选项:“从不”、“很少”、“大多数天”或“每天”。在这种情况下,数据是分类的,因为响应属于一组固定的类别。如果您尝试将这些变量插入 Python 中的大多数机器学习模型中,而没有先对其进行预处理,则会收到错误。在本教程中,我们将比较可用于准备分类数据的三种方法。

删除分类变量 

用该 select_dtypes() 方法删除 object 列

drop_data=data.select_dtypes(exclude=['object'])

Ordinal Encoding(序数编码)

序数编码将每个唯一值分配给不同的整数。

#导入模块
from sklearn.preprocessing import OrdinalEncoder

#设置处理方式
ordinal_encoder = OrdinalEncoder()

#拟合数据
data_new[object_col]=ordinal_encoder.fit_transform(data[object_col])


# 如果划分了数据
label_X_train[object_cols] = ordinal_encoder.fit_transform(X_train[object_cols])
label_X_valid[object_cols] = ordinal_encoder.transform(X_valid[object_cols])

One-Hot Encoding(独热编码)

独热编码会创建新列,指示原始数据中每个可能值的存在(或不存在)。为了理解这一点,我们将通过一个示例来理解。

在原始数据集中,“颜色”是一个分类变量,具有三个类别:“红色”、“黄色”和“绿色”。相应的 one-hot 编码包含每个可能值的一列,以及原始数据集中每行的一行。如果原始值为“Red”,我们在“Red”列中放置一个 1;如果原始值为“Yellow”,则在“Yellow”列中放置一个 1,依此类推。

与序数编码相比,单热编码不假定类别的顺序。因此,如果分类数据中没有明确的顺序(例如,“红色”既不多也不少于“黄色”),则可以预期这种方法特别有效。我们将没有内在排名的分类变量称为名义变量。

#用来查看每一列唯一值的数量
data[cname].nunique() 

如果分类变量具有大量值(即,您通常不会将其用于具有超过 15 个不同值的变量),则单热编码通常性能不佳。

from sklearn.preprocessing import OneHotEncoder

#我们设置为 handle_unknown='ignore' 在验证数据包含训练数据中未表示的类时避免错误,并且设置 sparse=False 可确保编码的列作为 numpy 数组(而不是稀疏矩阵)返回。

OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False)

OH_cols_train = pd.DataFrame(OH_encoder.fit_transform(X_train[object_cols]))
OH_cols_valid = pd.DataFrame(OH_encoder.transform(X_valid[object_cols]))

#复制索引
OH_cols_train.index = X_train.index
OH_cols_valid.index = X_valid.index

#删除原数据中类型为object的列
num_X_train = X_train.drop(object_cols, axis=1)
num_X_valid = X_valid.drop(object_cols, axis=1)

#连接只包含数据类型的列和处理好的列
OH_X_train = pd.concat([num_X_train, OH_cols_train], axis=1)
OH_X_valid = pd.concat([num_X_valid, OH_cols_valid], axis=1)

#将其类名转换为字符串类型
OH_X_train.columns = OH_X_train.columns.astype(str)
OH_X_valid.columns = OH_X_valid.columns.astype(str)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值