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 的可能输入包括:
None,使用 cross_validate 的默认 5 折交叉验证
int,用于指定 (Stratified)KFold 中的折数。
一个生成 (train, test) 分割的迭代器,作为索引数组。
对于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)[源代码]#
拟合数据,然后进行转换。
将转换器拟合到
X
和y
,并使用可选参数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_metadata_routing()[源代码]#
获取此对象的元数据路由。
请查看 用户指南 以了解路由机制的工作原理。
- 返回
- 路由MetadataRequest
一个封装了路由信息的
MetadataRequest
。
- get_params(deep=True)[源代码]#
获取此估计器的参数。
- 参数
- 深度bool, 默认=True
如果为 True,将返回此估计器及其包含的作为估计器的子对象的参数。
- 返回
- 参数dict
参数名称映射到它们的值。