DecisionTreeDiscretiser#

class feature_engine.discretisation.DecisionTreeDiscretiser(variables=None, bin_output='prediction', precision=None, cv=3, scoring='neg_mean_squared_error', param_grid=None, regression=True, random_state=None)[源代码][源代码]#

DecisionTreeDiscretiser() 通过离散的、即有限变量替换数值变量,这些变量的值是决策树的预测、分箱编号或分箱界限。

该方法受到以下来自KDD 2009竞赛获胜者的文章的启发:http://www.mtome.com/Publications/CiML/CiML-v3-book.pdf

DecisionTreeDiscretiser() 为每个变量训练一个决策树。然后它找到每个箱子的边界。最后,它用决策树的预测值、箱子编号或箱子边界替换变量值。

DecisionTreeDiscretiser() 仅适用于数值变量。您可以传递一个包含您希望转换的变量的列表。或者,离散器将自动选择所有数值变量。

更多详情请参见 用户指南

参数
变量: 列表, 默认=None

要转换的数值变量的列表。如果为 None,转换器将自动查找并选择所有数值变量。

bin_output: str, 默认 = “prediction”

是否返回树的预测结果、分箱编号或区间边界。分别取值为“prediction”、“bin_number”和“boundaries”。

precision: int, 默认=None

存储和显示区间标签的精度。换句话说,即小数点后的位数。仅在 bin_output 为 “prediction” 或 “boundaries” 时使用。如果 bin_output="boundaries",则精度不能为 None。

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_stateint, 默认=None

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

属性
binner_dict_:

字典,包含每个变量的区间限制或每个变量的拟合树,具体取决于 bin_output 的设置方式。

scores_dict_:

包含每个变量最佳决策树分数的字典。

变量_

将被转换的变量组。

feature_names_in_:

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

n_features_in_:

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

参考文献

1

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

示例

>>> import numpy as np
>>> import pandas as pd
>>> from feature_engine.discretisation import DecisionTreeDiscretiser
>>> np.random.seed(42)
>>> X = pd.DataFrame(dict(x= np.random.randint(1,100, 100)))
>>> y_reg = pd.Series(np.random.randn(100))
>>> dtd = DecisionTreeDiscretiser(random_state=42)
>>> dtd.fit(X, y_reg)
>>> dtd.transform(X)["x"].value_counts()
-0.090091    90
0.479454    10
Name: x, dtype: int64

你也可以针对分类问题调整评分指标。

>>> y_clf = pd.Series(np.random.randint(0,2,100))
>>> dtd = DecisionTreeDiscretiser(regression=False, scoring="f1", random_state=42)
>>> dtd.fit(X, y_clf)
>>> dtd.transform(X)["x"].value_counts()
0.480769    52
0.687500    48
Name: x, dtype: int64

方法

拟合:

为每个变量拟合一个决策树并找到区间限制。

fit_transform:

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

get_feature_names_out:

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

get_params:

获取此估计器的参数。

设置参数:

设置此估计器的参数。

转换:

将连续变量排序为区间或用预测值替换它们。

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

为每个变量拟合一个决策树,使用交叉验证和网格搜索进行超参数离散化。

参数
X: pandas 数据框,形状为 = [样本数, 特征数]

训练数据集。可以是整个数据框,而不仅仅是需要转换的变量。

y: pandas 系列。

目标变量。训练决策树所必需的。

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

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

将转换器拟合到 Xy,并使用可选参数 fit_params 返回 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)[源代码]#

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

参数
输入特征数组或列表,默认=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

如果为 True,将返回此估计器及其包含的作为估计器的子对象的参数。

返回
参数dict

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

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

设置此估计器的参数。

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

参数
**参数dict

估计器参数。

返回
self估计器实例

估计器实例。

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

用树的预测值替换原始变量值。决策树的预测是有限的,即离散的。

参数
X: pandas 数据框,形状为 = [样本数, 特征数]

输入样本。

返回
X_new: 形状为 [n_samples, n_features] 的 pandas dataframe

包含转换变量的数据框。

rtype

DataFrame ..