机器学习 类别特征编码:Category Encoders 库的使用

Category Encoders 简介

Category Encoders 是一个用于将分类变量编码为数值的 Python 库,它提供了多种不同的编码技术。这些编码技术可以将分类变量转换成数值表示,以便在机器学习算法中使用。这个库的设计与 scikit-learn 类似,因此可以很容易地与 scikit-learn 的流程和工具集成。

以下是 Category Encoders 库的一些主要特点:

  • 对 Pandas DataFrame 的原生支持:它支持 Pandas DataFrame 直接作为输入,也可以指定输出类型为 Pandas DataFrame。
  • 灵活的列配置:你可以通过列名或索引来明确配置要编码的列,或者让它自动推断出非数值列,无论输入的数据类型如何。
  • 低方差列的删除:它可以基于训练集可选地删除方差非常低的列,以避免给模型带来噪音。
  • 可移植性:你可以在数据上训练一个编码器,将其保存为 pickle 文件,以后可以重新使用它,而且可以得到相同的结果。
  • 兼容 scikit-learn:它可以像其他转换器一样接受类似数组的数据集,可以无缝地与 scikit-learn 的 Pipelines 或 ColumnTransformers 集成。

Category Encoders 安装

Category Encoders 库可以通过 pip 安装:

1
pip install category_encoders

或者通过 conda 安装:

1
conda install -c conda-forge category_encoders

Category Encoders 的使用

Category Encoders 库提供了多种编码方法,每种方法都对应的编码器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import category_encoders as ce

encoder = ce.BackwardDifferenceEncoder(cols=[...])
encoder = ce.BaseNEncoder(cols=[...])
encoder = ce.BinaryEncoder(cols=[...]) # 二进制编码
encoder = ce.CatBoostEncoder(cols=[...]) # CatBoost 编码
encoder = ce.CountEncoder(cols=[...]) # 计数编码
encoder = ce.GLMMEncoder(cols=[...])
encoder = ce.GrayEncoder(cols=[...])
encoder = ce.HashingEncoder(cols=[...]) # 哈希编码
encoder = ce.HelmertEncoder(cols=[...])
encoder = ce.JamesSteinEncoder(cols=[...])
encoder = ce.LeaveOneOutEncoder(cols=[...])
encoder = ce.MEstimateEncoder(cols=[...])
encoder = ce.OneHotEncoder(cols=[...]) # 独热编码
encoder = ce.OrdinalEncoder(cols=[...]) # 序数编码
encoder = ce.PolynomialEncoder(cols=[...])
encoder = ce.QuantileEncoder(cols=[...])
encoder = ce.RankHotEncoder(cols=[...])
encoder = ce.SumEncoder(cols=[...])
encoder = ce.TargetEncoder(cols=[...]) # 目标编码
encoder = ce.WOEEncoder(cols=[...])

encoder.fit(X, y)
X_cleaned = encoder.transform(X_dirty)

编码方法介绍

每种编码方法都有其独特的原理和计算过程,适用于不同的数据情况和建模需求。以下是部分编码方法的简单介绍:

  1. BinaryEncoder:二进制编码,将每个类别的整数值表示为其二进制形式,适用于类别数量较多的特征。
  2. CatBoostEncoder:CatBoost 编码,一种基于目标变量的编码方法,使用目标变量的统计信息来为每个类别生成编码,以更好地捕获类别与目标之间的关系。
  3. CountEncoder:计数编码,将每个类别的值编码为该类别在训练集中出现的次数,有助于捕获类别的普遍性。
  4. HashingEncoder:哈希编码,将每个类别的值编码为其哈希值,能够较好的降低维度,但可能会引入冲突。
  5. OneHotEncoder:独热编码,将每个类别的值编码为一个布尔值,适用于类别数量较少的特征。
  6. OrdinalEncoder:序数编码,将每个类别的值编码为一个整数,适用于有序分类特征。
  7. TargetEncoder:目标编码,使用目标变量的平均值来为每个类别的编码,可能会导致过拟合。