DecisionTreeEncoder#

class feature_engine.encoding.DecisionTreeEncoder(encoding_method='arbitrary', cv=3, scoring='neg_mean_squared_error', param_grid=None, regression=True, random_state=None, variables=None, ignore_format=False, precision=None, unseen='raise', fill_value=None)[源代码][源代码]#

DecisionTreeEncoder() 使用决策树的预测结果对分类变量进行编码。

编码器拟合一个单一特征决策树来预测目标,并据此创建从类别到预测值的映射。然后,它使用这些映射来替换特征的类别。编码器为每个特征训练一个决策树进行编码。

DecisionTreeEncoder() 默认只对类别变量(类型为 ‘object’ 或 ‘categorical’)进行编码。你可以传递一个变量列表进行编码,或者编码器会自动查找并编码所有类别变量。

使用 ignore_format=True 时,您可以选择将数值变量也进行编码。在这种情况下,您可以输入要编码的变量列表,或者转换器将自动选择所有变量。

更多详情请参见 用户指南

参数
encoding_method: str, default=’arbitrary’

在拟合决策树之前,用于将类别编码为数值的方法。

‘ordered’: 类别按每个类别的目标平均值的升序编号。

‘arbitrary’ : 类别是任意编号的。

cv: int, 交叉验证生成器或可迭代对象, 默认=3

确定交叉验证的分割策略。cv 的可能输入包括:

对于int/None输入,如果估计器是分类器且y是二分类或多分类,则使用StratifiedKFold。在所有其他情况下,使用KFold。这些分割器以`shuffle=False`实例化,因此分割在多次调用中将保持一致。更多详情请查看Scikit-learn的`cross_validate`文档。

scoring: str, 默认=’neg_mean_squared_error’

期望的指标以优化决策树的性能。来自sklearn.metrics。更多选项请参见DecisionTreeRegressor或DecisionTreeClassifier模型评估文档:https://scikit-learn.org/stable/modules/model_evaluation.html

param_grid: 字典, 默认=None

用于决策树的网格搜索的超参数。param_grid 可以包含 Scikit-learn 的 DecisionTreeRegressor() 或 DecisionTreeClassifier() 允许的任何超参数。如果为 None,则 param_grid 将在 [1, 2, 3, 4] 上优化 ‘max_depth’。

回归: 布尔值, 默认=True

指示编码器是否应该训练回归或分类决策树。

random_state: int, 默认为None

用于初始化决策树训练的 random_state。它是 Scikit-learn 的 DecisionTreeRegressor() 或 DecisionTreeClassifier() 的参数之一。为了可重复性,建议将 random_state 设置为一个整数。

变量: 列表, 默认=None

将要编码的分类变量的列表。如果为 None,编码器将默认查找并转换所有类型为对象或分类的变量。你也可以使转换器接受数值变量,参见参数 ignore_format

ignore_format: bool, default=False

此转换器仅对对象类型或分类类型的变量进行操作。要覆盖此行为并允许转换器也转换数值变量,请设置为 True

如果 ignore_formatFalse,编码器将自动选择类型为对象或分类的变量,或检查用户输入的变量是否为对象或分类类型。如果 True,编码器将选择所有变量或接受用户输入的所有变量,包括那些被转换为数值类型的变量。

简而言之,当你想要编码数值变量时,设置为 True

precision: int, 默认=None

存储和显示类别映射的精度。换句话说,树预测结果中小数点后的位数。

unseen: string, default=’ignore’

指示在转换过程中遇到训练集中不存在的类别时应执行的操作。如果为 'raise',则未见过的类别将引发错误。如果为 'ignore',则未见过的类别将被编码为 NaN,并引发警告。如果为 'encode',则未见过的类别将被编码为 fill_value

fill_value: float, default=None

用于编码未见类别的值。仅在 unseen='encode' 时使用。

属性
encoder_dict_:

按类别、按变量预测的字典。

变量_

将被转换的变量组。

feature_names_in_:

列出在 fit 过程中看到的特征名称。

n_features_in_:

在拟合中使用的训练集中的特征数量。

参见

sklearn.ensemble.DecisionTreeRegressor
sklearn.ensemble.DecisionTreeClassifier
feature_engine.discretisation.DecisionTreeDiscretiser
feature_engine.encoding.RareLabelEncoder
feature_engine.encoding.OrdinalEncoder

注释

作者最初设计这种方法是为了处理数值变量。我们可以用决策树的预测结果来替换数值变量,利用 DecisionTreeDiscretiser()。在这里,我们将此功能扩展到也能处理分类变量。

参考文献

1

Niculescu-Mizil 等人。“使用集成选择赢得KDD杯Orange挑战”。JMLR: 研讨会和会议论文集 7: 23-34. KDD 2009 http://proceedings.mlr.press/v7/niculescu09/niculescu09.pdf

示例

>>> import pandas as pd
>>> from feature_engine.encoding import DecisionTreeEncoder
>>> X = pd.DataFrame(dict(x1 = [1,2,3,4,5], x2 = ["b", "b", "b", "a", "a"]))
>>> y = pd.Series([2.2,4, 1.5, 3.2, 1.1])
>>> dte = DecisionTreeEncoder(cv=2)
>>> dte.fit(X, y)
>>> dte.transform(X)
   x1        x2
0   1  2.566667
1   2  2.566667
2   3  2.566667
3   4  2.150000
4   5  2.150000

你也可以通过使用 regression=False 来进行分类。

>>> y = pd.Series([0,1,1,1,0])
>>> dte = DecisionTreeEncoder(regression=False, cv=2)
>>> dte.fit(X, y)
>>> dte.transform(X)
   x1        x2
0   1  0.666667
1   2  0.666667
2   3  0.666667
3   4  0.500000
4   5  0.500000

方法

拟合:

为每个变量拟合一个决策树。

fit_transform:

拟合数据,然后进行转换。

get_feature_names_out:

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

get_params:

获取此估计器的参数。

设置参数:

设置此估计器的参数。

inverse_transform:

将数据转换回原始表示形式。

转换:

用决策树的预测结果替换分类变量。

fit(X, y)[源代码][源代码]#

为每个变量拟合一个决策树。

参数
Xpandas 数据框,形状为 = [n_samples, n_features]

训练输入样本。可以是整个数据框,而不仅仅是分类变量。

ypandas 系列。

目标变量。训练决策树和有序序数编码所必需的。

fit_transform(X, y=None, **fit_params)[源代码]#

拟合数据,然后进行转换。

使用可选参数 fit_params 将转换器拟合到 Xy,并返回 X 的转换版本。

参数
X类数组的形状 (n_samples, n_features)

输入样本。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组对象,默认=None

目标值(无监督变换时为 None)。

**拟合参数dict

附加拟合参数。

返回
X_newndarray 数组,形状为 (n_samples, n_features_new)

转换后的数组。

get_feature_names_out(input_features=None)[源代码]#

获取转换后的特征名称。换句话说,返回转换后的数据框的变量名称。

参数
input_features数组或列表,默认=None

此参数仅为了与 Scikit-learn 管道兼容而存在。

  • 如果 None,则使用 feature_names_in_ 作为特征名称。

  • 如果是一个数组或列表,那么 input_features 必须与 feature_names_in_ 匹配。

返回
feature_names_out: 列表

转换后的特征名称。

rtype

List[Union[str, int]] ..

get_metadata_routing()[源代码]#

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

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

返回
路由MetadataRequest

一个封装了路由信息的 MetadataRequest

get_params(deep=True)[源代码]#

获取此估计器的参数。

参数
深度bool, 默认=True

如果为真,将返回此估计器及其包含的子对象(这些子对象也是估计器)的参数。

返回
参数dict

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

inverse_transform(X)[源代码]#

将编码后的变量转换回原始值。

参数
X: pandas 数据框,形状为 [n_samples, n_features]。

转换后的数据框。

返回
X_tr: 形状为 [n_samples, n_features] 的 pandas 数据框。

未转换的数据框,分类变量包含原始值。

rtype

DataFrame ..

set_params(**params)[源代码]#

设置此估计器的参数。

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

参数
**参数dict

估计器参数。

返回
self估计器实例

估计器实例。

transform(X)[源代码][源代码]#

用决策树的预测结果替换分类变量。

参数
Xpandas 数据框,形状为 = [n_samples, n_features]

输入样本。

返回
X_newpandas 数据框,形状为 = [样本数, 特征数]。

使用决策树预测编码变量的数据框。

rtype

DataFrame ..