TargetEncoder#
- class sklearn.preprocessing.TargetEncoder(categories='auto', target_type='auto', smooth='auto', cv=5, shuffle=True, random_state=None)[源]#
用于回归和分类目标的Target Encoder。
每个类别都根据属于该类别的观测值的平均目标值的收缩估计进行编码。编码方案将全局目标均值与以类别值为条件的条件目标均值混合(参见[MIC])。
当目标类型为“multiclass”(多类别)时,编码基于每个类别的条件概率估计。目标首先使用
LabelBinarizer
通过“一对多”方案进行二值化,然后使用每个类别每个类别的平均目标值进行编码,从而产生n_features
*n_classes
个编码输出特征。TargetEncoder
将缺失值(例如np.nan
或None
)视为另一个类别,并像其他类别一样对其进行编码。在fit
期间未见的类别将使用目标均值(即target_mean_
)进行编码。有关
TargetEncoder
内部交叉拟合重要性的演示,请参阅Target Encoder的内部交叉拟合。有关不同编码器的比较,请参阅比较Target Encoder与其他编码器。更多信息请阅读用户指南。添加于 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
将设置为经验贝叶斯估计。- cv整数,默认值=5
确定交叉拟合策略中折叠的数量,用于
fit_transform
。对于分类目标,使用StratifiedKFold
;对于连续目标,使用KFold
。- shuffle布尔值,默认值=True
在
fit_transform
中,在拆分折叠之前是否打乱数据。请注意,每个拆分中的样本不会被打乱。- random_state整数、RandomState 实例或 None,默认值=None
当
shuffle
为True时,random_state
会影响索引的排序,从而控制每个折叠的随机性。否则,此参数无效。传入一个整数可确保在多次函数调用中获得可重现的输出。请参阅术语表。
- 属性:
- encodings_形状为 (n_features,) 或 (n_features * n_classes) 的 ndarray 列表
在所有
X
上学习到的编码。对于特征i
,encodings_[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_字符串
目标类型。
- target_mean_浮点数
目标的整体均值。此值仅在
transform
中用于编码类别。- n_features_in_整数
在fit期间看到的特征数量。
- feature_names_in_形状为 (
n_features_in_
,) 的 ndarray 在fit期间看到的特征名称。仅当
X
的所有特征名称都是字符串时才定义。- classes_ndarray 或 None
如果
target_type_
是“binary”或“multiclass”,则包含每个类别的标签,否则为None
。
另请参见
OrdinalEncoder
对分类特征执行序数(整数)编码。与 TargetEncoder 不同,此编码是非监督的。因此,将所得编码视为数值特征会导致任意排序的值,从而在使用分类器或回归器的预处理时,通常会导致较低的预测性能。
OneHotEncoder
对分类特征执行独热编码。此无监督编码更适合低基数分类变量,因为它为每个唯一类别生成一个新的特征。
参考文献
示例
当
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。- 参数:
- X形状为 (n_samples, n_features) 的类数组
用于确定每个特征类别的输入数据。
- y形状为 (n_samples,) 的类数组
用于编码类别的目标数据。
- 返回:
- self对象
已拟合的编码器。
- fit_transform(X, y)[源]#
拟合
TargetEncoder
并使用目标编码转换 X。- 参数:
- X形状为 (n_samples, n_features) 的类数组
用于确定每个特征类别的输入数据。
- y形状为 (n_samples,) 的类数组
用于编码类别的目标数据。
- 返回:
- X_trans形状为 (n_samples, n_features) 或 (n_samples, (n_features * n_classes)) 的 ndarray
转换后的输入。
- get_feature_names_out(input_features=None)[源]#
获取转换的输出特征名称。
- 参数:
- input_features字符串类数组或 None,默认值=None
未使用,在此处是为了 API 一致性而存在。
- 返回:
- feature_names_out字符串对象的 ndarray
转换后的特征名称。
feature_names_in_
被使用,除非它未定义,在这种情况下会生成以下输入特征名称:["x0", "x1", ..., "x(n_features_in_ - 1)"]
。当type_of_target_
是“multiclass”时,名称格式为“_ ”。
- get_metadata_routing()[源]#
获取此对象的元数据路由。
请查看用户指南,了解路由机制如何工作。
- 返回:
- routingMetadataRequest
一个包含路由信息的
MetadataRequest
。
- get_params(deep=True)[源]#
获取此估计器的参数。
- 参数:
- deep布尔值,默认值=True
如果为 True,将返回此估计器及其包含的作为估计器的子对象的参数。
- 返回:
- params字典
参数名称映射到其值。
- set_output(*, transform=None)[源]#
设置输出容器。
有关如何使用 API 的示例,请参阅Introducing the set_output API。
- 参数:
- transform{“default”, “pandas”, “polars”},默认值=None
配置
transform
和fit_transform
的输出。"default"
: 转换器的默认输出格式"pandas"
: DataFrame 输出"polars"
: Polars 输出None
: 转换配置不变
1.4 版本添加: 添加了
"polars"
选项。
- 返回:
- self估计器实例
估计器实例。