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 的可能输入包括:
None,使用 cross_validate 的默认 5 折交叉验证
int,用于指定 (Stratified)KFold 中的折数。
一个生成 (训练, 测试) 分割的迭代器,作为索引数组。
对于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_format
是False
,编码器将自动选择类型为对象或分类的变量,或检查用户输入的变量是否为对象或分类类型。如果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
将转换器拟合到X
和y
,并返回X
的转换版本。- 参数
- X类数组的形状 (n_samples, n_features)
输入样本。
- y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组对象,默认=None
目标值(无监督变换时为 None)。
- **拟合参数dict
附加拟合参数。
- 返回
- X_newndarray 数组,形状为 (n_samples, n_features_new)
转换后的数组。
- 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
..