TargetEncoder#

class sklearn.preprocessing.TargetEncoder(categories='auto', target_type='auto', smooth='auto', cv=5, shuffle=True, random_state=None)#

目标编码器用于回归和分类目标。

每个类别根据属于该类别的观测值的平均目标值的收缩估计进行编码。编码方案混合了全局目标均值和按类别值条件化的目标均值(见[Rf862141e5a0c-MIC]_)。

当目标类型为“多类”时,编码基于每个类别的条件概率估计。目标首先通过:class:~sklearn.preprocessing.LabelBinarizer 使用“一对多”方案进行二值化,然后使用每个类别和每个类别的平均目标值进行编码,结果生成 n_features * n_classes 个编码输出特征。

TargetEncoder 考虑缺失值,如 np.nanNone ,作为另一个类别并像其他类别一样编码它们。在:meth:fit 期间未见过的类别使用目标均值进行编码,即 target_mean_

关于 TargetEncoder 内部交叉验证重要性的演示,请参见:ref:sphx_glr_auto_examples_preprocessing_plot_target_encoder_cross_val.py 。有关不同编码器的比较,请参见:ref:sphx_glr_auto_examples_preprocessing_plot_target_encoder.py 。更多信息请参见:ref:用户指南 <target_encoder>

Note

fit(X, y).transform(X) 不等于 fit_transform(X, y) ,因为在 fit_transform 中使用了:term:交叉验证 方案进行编码。详见:ref:用户指南 <target_encoder>

Added in version 1.3.

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

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

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

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

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

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

目标类型。

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

  • "continuous" : 连续目标

  • "binary" : 二元目标

  • "multiclass" : 多类目标

Note

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

Changed in version 1.4: 添加了 ‘multiclass’ 选项。

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

目标均值按类别值条件化与全局目标均值混合的量。较大的 smooth 值将更多权重放在全局目标均值上。 如果 "auto" ,则 smooth 设置为经验贝叶斯估计。

cvint, 默认=5

确定在 fit_transform 中使用的:term:交叉验证 策略中的折数。对于分类目标,使用 StratifiedKFold ,对于连续目标,使用 KFold

shufflebool, 默认=True

在拆分为折之前是否在 fit_transform 中打乱数据。注意,每个拆分内的样本不会被打乱。

random_stateint, RandomState 实例或 None, 默认=None

shuffle 为 True 时, random_state 影响索引的顺序,这控制每个折的随机性。否则,此参数无影响。 传递一个 int 以在多次函数调用中获得可重复的输出。详见:term:Glossary <random_state>

Attributes:
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

fit 期间看到的特征数。

feature_names_in_形状为 ( n_features_in_ ,) 的 ndarray

fit 期间看到的特征名称。仅当 X 的特征名称均为字符串时定义。

classes_ndarray 或 None

如果 target_type_ 为 ‘binary’ 或 ‘multiclass’,则保存每个类别的标签,否则为 None

See also

OrdinalEncoder

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

OneHotEncoder

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

References

Examples

使用 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)
>>> # 高 `smooth` 参数在分类编码上更多权重放在全局均值上:
>>> enc_high_smooth = TargetEncoder(smooth=5000.0).fit(X, y)
>>> enc_high_smooth.target_mean_
44...
>>> enc_high_smooth.encodings_
[array([44..., 44..., 44...])]
>>> # 另一方面,低 `smooth` 参数在目标按类别值条件化上更多权重:
>>> enc_low_smooth = TargetEncoder(smooth=1.0).fit(X, y)
>>> enc_low_smooth.encodings_
[array([20..., 80..., 43...])]
fit(X, y)#

拟合 TargetEncoder 到 X 和 y。

Parameters:
X形状为 (n_samples, n_features) 的类数组

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

y形状为 (n_samples,) 的类数组

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

Returns:
selfobject

拟合的编码器。

fit_transform(X, y)#

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

Note

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

Parameters:
Xarray-like of shape (n_samples, n_features)

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

yarray-like of shape (n_samples,)

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

Returns:
X_transndarray of shape (n_samples, n_features) 或 (n_samples, (n_features * n_classes))

转换后的输入。

get_feature_names_out(input_features=None)#

获取变换后的输出特征名称。

Parameters:
input_features字符串数组或None,默认=None

未使用,此处存在是为了通过约定保持API一致性。

Returns:
feature_names_out字符串对象的ndarray

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

get_metadata_routing()#

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

请查看 用户指南 以了解路由机制的工作原理。

Returns:
routingMetadataRequest

MetadataRequest 封装的 路由信息。

get_params(deep=True)#

获取此估计器的参数。

Parameters:
deepbool, 默认=True

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

Returns:
paramsdict

参数名称映射到它们的值。

property infrequent_categories_#

稀有类别对于每个特征。

set_output(*, transform=None)#

设置输出容器。

请参阅 介绍 set_output API 以了解如何使用API的示例。

Parameters:
transform{“default”, “pandas”, “polars”}, 默认=None

配置 transformfit_transform 的输出。

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

  • "pandas" : DataFrame 输出

  • "polars" : Polars 输出

  • None : 转换配置不变

Added in version 1.4: "polars" 选项已添加。

Returns:
self估计器实例

估计器实例。

set_params(**params)#

设置此估计器的参数。

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

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。

transform(X)#

将X转换为目标编码。

Note

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

Parameters:
Xarray-like of shape (n_samples, n_features)

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

Returns:
X_transndarray of shape (n_samples, n_features) 或 (n_samples, (n_features * n_classes))

转换后的输入。