Category Encoders是一个用于将分类变量编码为数值的Python库,它提供了多种不同的编码技术。这些编码技术可以将分类变量转换成数值表示,以便在机器学习算法中使用。这个库的设计与scikit-learn类似,因此可以很容易地与scikit-learn的流程和工具集成。
以下是Category Encoders库的一些主要特点:
对Pandas数据框的原生支持:作为输入,它直接支持Pandas数据框,也可以选择性地将输出作为Pandas数据框。 灵活的列配置:你可以通过列名或索引来明确配置要编码的列,或者无论输入类型如何,它都可以自动推断出非数值列。 低方差列的删除:它可以基于训练集可选地删除方差非常低的列,以避免给模型带来噪音。 可移植性:你可以在数据上训练一个编码器,将其保存为pickle文件,以后可以重新使用它,而且可以得到相同的结果。 与scikit-learn流水线兼容:它可以像其他转换器一样接受类似数组的数据集,可以无缝地与scikit-learn的流水线和ColumnTransformer集成。
通过pip安装:
pip install category_encoders
或者通过conda安装(需要添加conda-forge通道):
conda install -c conda-forge category_encoders
使用案例:
import category_encoders as ce
encoder = ce.BackwardDifferenceEncoder(cols=[...])
encoder = ce.BaseNEncoder(cols=[...])
encoder = ce.BinaryEncoder(cols=[...])
encoder = ce.CatBoostEncoder(cols=[...])
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)
每种编码技术都有其独特的原理和计算过程,适用于不同的数据情况和建模需求。以下是上述列出的每种编码技术的详细介绍:
BackwardDifferenceEncoder: 后向差异编码通过比较每个类别与前一个类别之间的差异来进行编码。编码的基准是一个参考类别,该类别的编码为0,其他类别的编码表示与参考类别的差异。这种编码可以有效地捕获类别之间的差异。
BaseNEncoder: 基N编码将每个类别的整数值表示为其N进制的形式。这种编码对于高基数的分类变量(具有大量类别)特别有用,可以减少编码的维度。
BinaryEncoder: 二进制编码将每个类别的整数值表示为其二进制形式。每个位表示一个特定的编码特征,可以有效地减少编码的维度。
CatBoostEncoder: CatBoost编码是一种基于目标变量的编码技术。它使用目标变量的统计信息来为每个类别生成编码,以更好地捕获类别与目标之间的关系。
CountEncoder: 计数编码使用每个类别在数据中出现的频次来进行编码。类别出现的次数可以作为其编码值,有助于捕获类别的普遍性。
GLMMEncoder: 广义线性混合模型编码(GLMM编码)结合了线性混合效应和目标变量的信息来生成编码。它适用于具有分层结构的数据集。
GrayEncoder: 格雷编码将每个类别的整数值表示为其格雷码形式。格雷码是一种二进制编码,相邻值之间只有一个位不同,适用于一些特定的应用场景。
HashingEncoder: 哈希编码通过将类别的哈希值作为编码表示。它可以有效地减少维度,但可能会引入冲突。
HelmertEncoder: Helmert编码通过使用每个类别的均值与前一个类别的均值之差来进行编码。它适用于有序类别,可以捕获类别之间的趋势。
JamesSteinEncoder: James-Stein编码结合了类别的均值和全局均值,以减少估计的方差。这有助于更稳定地估计类别的效应。
LeaveOneOutEncoder: 留一法编码使用除当前样本外的其他样本来生成编码。它可以更好地捕获类别与目标之间的关系,但容易引入过拟合。
MEstimateEncoder: M估计编码结合了类别的均值和全局均值,以及一个平滑参数M,用于平衡两者之间的权重。
OneHotEncoder: 独热编码将每个类别表示为一个二进制向量,只有一个位为1,其他位为0。它适用于无序类别。
OrdinalEncoder: 有序编码为每个类别分配一个整数值,根据类别之间的顺序。它适用于有明显顺序关系的类别。
PolynomialEncoder: 多项式编码将类别的整数值表示为多项式的系数。它可以用于捕获类别之间的非线性关系。
QuantileEncoder: 分位数编码使用目标变量在每个类别上的分位数值来进行编码。它可以更好地处理异常值和噪音。
RankHotEncoder: 排名热编码为每个类别分配一个排名值,然后将排名值转换为二进制表示。它适用于无序类别。
SumEncoder: 求和编码通过使用其他类别的均值与当前类别的均值之差来进行编码。它适用于无序类别。
TargetEncoder: 目标编码使用目标变量的均值来编码每个类别。它可以更好地捕获类别与目标之间的关系。
WOEEncoder: 信息值编码使用每个类别的信息值(Weight of Evidence)来进行编码,可以捕获类别与目标之间的关系。
# 竞赛交流群 邀请函 #
每天大模型、算法竞赛、干货资讯

内容中包含的图片若涉及版权问题,请及时与我们联系删除
评论
沙发等你来抢