TargetEncoder#

class sklearn.preprocessing.TargetEncoder(categories='auto', target_type='auto', smooth='auto', cv=5, shuffle='deprecated', random_state='deprecated')[源码]#

用于回归和分类目标的 Target Encoder。

每个类别都基于属于该类别的观测值的目标平均值的收缩估计进行编码。该编码方案将全局目标均值与以类别值为条件的条件目标均值相结合(参见 [MIC])。

当目标类型为“multiclass”(多分类)时,编码基于每个类别的条件概率估计。目标首先使用“一对多(one-vs-all)”方案通过 LabelBinarizer 进行二值化,然后将每个类别和每个类别的平均目标值用于编码,从而生成 n_features * n_classes 个编码后的输出特征。

TargetEncoder 将缺失值(如 np.nanNone)视为另一个类别,并像对待其他类别一样对其进行编码。在 fit 期间未见过的类别将使用目标均值(即 target_mean_)进行编码。

有关 TargetEncoder 内部 cross fitting(交叉拟合)重要性的演示,请参见 目标编码器的内部交叉拟合。有关不同编码器的比较,请参考 目标编码器与其他编码器的比较。更多信息请阅读 用户指南

注意

fit(X, y).transform(X) 不等于 fit_transform(X, y),因为 fit_transform 中使用了 cross fitting(交叉拟合)方案进行编码。详见 用户指南

在版本 1.3 中新增。

参数:
categories“auto” 或形状为 (n_features,) 的类数组列表,默认=”auto”

每个特征的类别(唯一值)。

  • "auto" : 根据训练数据自动确定类别。

  • list : categories[i] 保存第 i 列预期的类别。传递的类别不应在单个特征中混合字符串和数值,且数值情况下应进行排序。

使用的类别存储在拟合属性 categories_ 中。

target_type{“auto”, “continuous”, “binary”, “multiclass”},默认=”auto”

目标类型。

  • "auto" : 目标类型使用 type_of_target 推断。

  • "continuous" : 连续型目标

  • "binary" : 二分类目标

  • "multiclass" : 多分类目标

注意

使用 "auto" 推断的目标类型可能不是建模所需的理想目标类型。例如,如果目标由 0 到 100 之间的整数组成,那么 type_of_target 会将目标推断为 "multiclass"。在这种情况下,设置 target_type="continuous" 将把目标指定为回归问题。target_type_ 属性给出了编码器实际使用的目标类型。

1.4 版本变更: 添加了 ‘multiclass’ 选项。

smooth“auto” 或浮点数,默认=”auto”

以类别值为条件的条件目标均值与全局目标均值的混合程度。较大的 smooth 值将赋予全局目标均值更大的权重。如果是 "auto",则 smooth 被设置为经验贝叶斯估计值。

cvint, cross-validation generator or an iterable, default=None

决定 fit_transform 过程中内部 cross fitting(交叉拟合)所使用的划分策略。如果划分器中每个样本索引在验证折中未恰好出现一次,则会引发 ValueError。cv 的可能输入为:

  • None,使用内部根据

    target_type,

  • 选择的 5 折交叉验证;整数,指定内部根据

    target_type 选择的交叉验证折数;

  • CV 划分器(不跨验证折重复样本);

  • 产生(训练,测试)拆分作为索引数组的可迭代对象。

对于整数/None 输入,如果 target_type"continuous",则使用 KFold,否则使用 StratifiedKFold

有关交叉验证策略的更多信息,请参考 用户指南

1.9 版本变更: 交叉验证生成器和迭代器也可以作为 cv 传递。

shufflebool, default=True

是否在划分为折之前对 fit_transform 中的数据进行洗牌。请注意,每个切片内的样本不会被洗牌。仅当 cv 为整数或 None 时生效。如果 cv 是交叉验证生成器或迭代器,则忽略 shuffle

自 1.9 版本起弃用: shuffle 已弃用,并将在 1.11 中移除。请将交叉验证生成器作为 cv 参数传递来指定洗牌。

random_stateint, RandomState instance or None, default=None

shuffle 为 True 时,random_state 会影响索引的顺序,从而控制每个折叠的随机性。否则,此参数无效。传递一个整数可在多次函数调用中实现可复现的输出。请参阅词汇表

自 1.9 版本起弃用: random_state 已弃用,并将在 1.11 中移除。请将交叉验证生成器作为 cv 参数传递来指定洗牌的随机状态。

属性:
encodings_形状为 (n_features,) 或 (n_features * n_classes) 的 ndarray 列表

在全部 X 上学习到的编码。对于特征 iencodings_[i] 是与 categories_[i] 中列出的类别相对应的编码。当 target_type_ 为 “multiclass” 时,特征 i 和类别 j 的编码存储在 encodings_[j + (i * len(classes_))] 中。例如,对于 2 个特征 (f) 和 3 个类别 (c),编码排序为:f0_c0, f0_c1, f0_c2, f1_c0, f1_c1, f1_c2。

categories_形状为 (n_features,) 的 ndarray 列表

在拟合期间确定的或在 categories 中指定的每个输入特征的类别(按 X 中特征的顺序,并与 transform 的输出相对应)。

target_type_str

目标类型。

target_mean_float

目标的整体均值。此值仅在 transform 中用于编码类别。

n_features_in_int

拟合 期间看到的特征数。

feature_names_in_shape 为 (n_features_in_,) 的 ndarray

fit 期间看到的特征名称。仅当 X 具有全部为字符串的特征名称时才定义。

classes_ndarray 或 None

如果 target_type_ 是 ‘binary’(二分类)或 ‘multiclass’(多分类),则保存每个类别的标签,否则为 None

另请参阅

OrdinalEncoder

对分类特征执行序数(整数)编码。与 TargetEncoder 不同,此编码是非监督的。因此,将生成的编码视为数值特征会导致任意排序的值,并且在用作分类器或回归器的预处理时,通常会导致较低的预测性能。

OneHotEncoder

对分类特征执行独热(one-hot)编码。这种非监督编码更适合低基数的分类变量,因为它为每个唯一的类别生成一个新的特征。

References

示例

使用 smooth="auto" 时,平滑参数被设置为经验贝叶斯估计值。

>>> import numpy as np
>>> from sklearn.preprocessing import TargetEncoder
>>> X = np.array([["dog"] * 20 + ["cat"] * 30 + ["snake"] * 38], dtype=object).T
>>> y = [90.3] * 5 + [80.1] * 15 + [20.4] * 5 + [20.1] * 25 + [21.2] * 8 + [49] * 30
>>> enc_auto = TargetEncoder(smooth="auto")
>>> X_trans = enc_auto.fit_transform(X, y)
>>> # A high `smooth` parameter puts more weight on global mean on the categorical
>>> # encodings:
>>> enc_high_smooth = TargetEncoder(smooth=5000.0).fit(X, y)
>>> enc_high_smooth.target_mean_
np.float64(44.3)
>>> enc_high_smooth.encodings_
[array([44.1, 44.4, 44.3])]
>>> # On the other hand, a low `smooth` parameter puts more weight on target
>>> # conditioned on the value of the categorical:
>>> enc_low_smooth = TargetEncoder(smooth=1.0).fit(X, y)
>>> enc_low_smooth.encodings_
[array([21, 80.8, 43.2])]
fit(X, y)[源码]#

TargetEncoder 拟合到 X 和 y。

不建议使用此方法,因为它可能会引入数据泄漏。请改在训练数据上使用 fit_transform

注意

fit(X, y).transform(X) 不等于 fit_transform(X, y),因为 fit_transform 中使用了 cross fitting(交叉拟合)方案进行编码。详见 用户指南

参数:
Xshape 为 (n_samples, n_features) 的 array-like

用于确定每个特征类别的​​数据。

yarray-like of shape (n_samples,)

用于编码类别的目标数据。

返回:
selfobject

已拟合的编码器。

fit_transform(X, y, **params)[源码]#

拟合 TargetEncoder 并使用目标编码转换 X

此方法使用 cross fitting(交叉拟合)方案,以防止下游预测器中的目标泄漏和过拟合。它是编码训练数据的推荐方法。

注意

fit(X, y).transform(X) 不等于 fit_transform(X, y),因为 fit_transform 中使用了 cross fitting(交叉拟合)方案进行编码。详见 用户指南

参数:
Xshape 为 (n_samples, n_features) 的 array-like

用于确定每个特征类别的​​数据。

yarray-like of shape (n_samples,)

用于编码类别的目标数据。

**paramsdict

要路由到内部 CV 对象的参数。

只能与作为 CV 对象的交叉验证生成器结合使用。

例如,groups(形状为 (n_samples,) 的类数组)可以路由到接受 groups 的 CV 划分器,例如 GroupKFoldStratifiedGroupKFold

1.9 版本新增: 仅在 enable_metadata_routing=True 时可用,可以使用 sklearn.set_config(enable_metadata_routing=True) 进行设置。详见 元数据路由用户指南

返回:
X_trans形状为 (n_samples, n_features) 或 (n_samples, (n_features * n_classes)) 的 ndarray

转换后的输入。

get_feature_names_out(input_features=None)[源码]#

获取转换的输出特征名称。

参数:
input_featuresarray-like of str or None, default=None

Not used, present here for API consistency by convention.

返回:
feature_names_outstr 对象的 ndarray

转换后的特征名称。除非未定义,否则使用 feature_names_in_,在这种情况下会生成以下输入特征名称:["x0", "x1", ..., "x(n_features_in_ - 1)"]。当 type_of_target_ 为 “multiclass” 时,名称的格式为 ‘<feature_name>_<class_name>’。

get_metadata_routing()[源码]#

获取此对象的元数据路由。

请查阅 用户指南,了解路由机制如何工作。

1.9 版本中新增。

返回:
routingMetadataRouter

封装路由信息的 MetadataRouter

get_params(deep=True)[源码]#

获取此估计器的参数。

参数:
deepbool, default=True

如果为 True,将返回此估计器以及包含的子对象(如果它们是估计器)的参数。

返回:
paramsdict

参数名称映射到其值。

set_output(*, transform=None)[源码]#

设置输出容器。

请参阅 用户指南 以了解更多详细信息,并参考 引入 set_output API 获取关于如何使用该 API 的示例。

参数:
transform{“default”, “pandas”, “polars”}, default=None

配置 transformfit_transform 的输出。

  • "default": 转换器的默认输出格式

  • "pandas": DataFrame 输出

  • "polars": Polars 输出

  • None: 转换配置保持不变

1.4 版本新增: 添加了 "polars" 选项。

返回:
selfestimator instance

估计器实例。

set_params(**params)[源码]#

设置此估计器的参数。

此方法适用于简单的估计器以及嵌套对象(如 Pipeline)。后者具有 <component>__<parameter> 形式的参数,以便可以更新嵌套对象的每个组件。

参数:
**paramsdict

估计器参数。

返回:
selfestimator instance

估计器实例。

transform(X)[源码]#

使用目标编码转换 X。

此方法在内部使用 TargetEncoder.fit_transform 期间学到的 encodings_ 属性来转换测试数据。

注意

fit(X, y).transform(X) 不等于 fit_transform(X, y),因为 fit_transform 中使用了 cross fitting(交叉拟合)方案进行编码。详见 用户指南

参数:
Xshape 为 (n_samples, n_features) 的 array-like

用于确定每个特征类别的​​数据。

返回:
X_trans形状为 (n_samples, n_features) 或 (n_samples, (n_features * n_classes)) 的 ndarray

转换后的输入。