决策树特征#
- class feature_engine.creation.DecisionTreeFeatures(variables=None, features_to_combine=None, precision=None, cv=3, scoring='neg_mean_squared_error', param_grid=None, regression=True, random_state=0, missing_values='raise', drop_original=False)[源代码][源代码]#
DecisionTreeFeatures()
向数据中添加新变量,这些变量是由使用一个或多个特征训练的决策树的输出结果。由决策树预测结果产生的特征很可能与目标呈单调关系,因此可以提高线性模型的性能。在各种特征上训练的决策树所产生的特征可以帮助捕捉到简单模型可能遗漏的特征交互。
DecisionTreeFeatures()
仅适用于数值变量。你可以传递一个变量列表作为决策树的输入。或者,转换器将自动选择并组合所有数值变量。在使用此转换器之前,应先对缺失数据进行插补。
更多详情请参见 用户指南。
- 参数
- 变量: 列表, 默认=无
要转换的数值变量的列表。如果为 None,转换器将自动查找并选择所有数值变量。
- features_to_combine: 整数, 列表或元组, 默认=None
用于确定如何通过使用决策树将`variables`中指示的变量组合以获得新特征。如果为`integer`,则该值对应于特征之间允许的最大组合大小。例如,如果你想组合三个变量,[“var_A”, “var_B”, “var_C”],并且:
features_to_combine = 1
,转换器基于此返回新的特征。基于每个单独变量训练的决策树的预测,生成3个新特征。
features_to_combine = 2
,转换器返回特征来自features_to_combine=1
,加上基于决策树对所有可能的两变量组合的预测结果生成的新特征,即(“var_A”,“var_B”),(“var_A”,“var_C”),和(“var_B”,“var_C”),总共生成6个新特征。
features_to_combine = 3
,转换器返回特征来自features_to_combine=2
,再加上基于对3个变量[“var_A”, “var_B”, “var_C”]训练的决策预测的额外特征,总共生成7个新特征。
如果是
list
,该列表必须包含整数,表示应作为决策树输入的特征数量。例如,如果数据有 4 个变量,[“var_A”, “var_B”, “var_C”, “var_D”],并且features_to_combine = [2,3]
,那么将返回所有可能的 2 个和 3 个变量的组合。这将产生以下组合:(“var_A”, “var_B”), (“var_A”, “var_C”), (“var_A”, “var_D”), (“var_B”, “var_C”), (“var_B”, “var_D”), (“var_C”, “var_D”), (“var_A”, “var_B”, “var_C”), (“var_A”, “var_B”, “var_D”), (“var_A”, “var_C”, “var_D”), 和 (“var_B”, “var_C”, “var_D”)。- |
如果
tuple
,该元组必须包含字符串和/或元组,指示如何组合变量以创建新特征。例如,如果features_to_combine=("var_C", ("var_A", "var_C"), "var_C", ("var_B", "var_D")
,那么,转换器将基于元组中的每个值训练决策树,从而生成4个新特征。- |
如果
None
,那么转换器将创建所有可能的 1 个或更多特征的组合,并将这些组合作为决策树的输入。这等同于传递一个等于要组合的变量数量的整数。- 精度: int, 默认=None
预测的精度。换句话说,新特征值在小数点后的位数。
- 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_stateint, 默认=None
用于初始化决策树训练的 random_state。它是 Scikit-learn 的 DecisionTreeRegressor() 或 DecisionTreeClassifier() 的参数之一。为了可重复性,建议将 random_state 设置为一个整数。
- missing_values: string, default=’raise’
指示是否应忽略缺失值或引发异常。如果设置为
'raise'
,当fit
或transform
的数据集包含缺失值时,转换器将返回错误。如果设置为'ignore'
,在学习参数或执行转换时将忽略缺失数据。- drop_original: bool, default=False
如果为 True,则转换的原始变量将从数据框中删除。
- 属性
- 变量_
将要被转换的变量组。
- input_features_ = list
包含用于创建新特征的所有特征组合的列表。
- estimators_: 列表
在特征组合上训练的决策树。
- 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 pandas as pd >>> from feature_engine.creation import DecisionTreeFeatures >>> X = dict() >>> X["Name"] = ["tom", "nick", "krish", "megan", "peter", >>> "jordan", "fred", "sam", "alexa", "brittany"] >>> X["Age"] = [20, 44, 19, 33, 51, 40, 41, 37, 30, 54] >>> X["Height"] = [164, 150, 178, 158, 188, 190, 168, 174, 176, 171] >>> X["Marks"] = [1.0, 0.8, 0.6, 0.1, 0.3, 0.4, 0.8, 0.6, 0.5, 0.2] >>> X = pd.DataFrame(X) >>> y = pd.Series([4.1, 5.8, 3.9, 6.2, 4.3, 4.5, 7.2, 4.4, 4.1, 6.7]) >>> dtf = DecisionTreeFeatures(features_to_combine=2) >>> dtf.fit(X, y) >>> dtf.transform(X) Name Age Height ... tree(['Age', 'Height']) tree(['Age', 'Marks']) 0 tom 20 164 ... 4.100 4.2 1 nick 44 150 ... 6.475 5.6 2 krish 19 178 ... 4.000 4.2 3 megan 33 158 ... 6.475 6.2 4 peter 51 188 ... 4.400 5.6 5 jordan 40 190 ... 4.400 4.2 6 fred 41 168 ... 6.475 7.2 7 sam 37 174 ... 4.400 4.2 8 alexa 30 176 ... 4.000 4.2 9 brittany 54 171 ... 6.475 5.6 tree(['Height', 'Marks']) 0 6.00 1 6.00 2 4.24 3 6.00 4 4.24 5 4.24 6 6.00 7 4.24 8 4.24 9 6.00
方法
拟合:
训练决策树。
fit_transform:
拟合数据,然后进行转换。
get_feature_names_out:
获取转换后的输出特征名称。
get_params:
获取此估计器的参数。
设置参数:
设置此估计器的参数。
转换:
创建新功能。
- fit(X, y)[源代码][源代码]#
基于输入变量组合,使用交叉验证和网格搜索来拟合决策树的超参数。
- 参数
- X: pandas 数据框,形状为 [n_samples, n_features]
训练输入样本。可以是整个数据框,而不仅仅是需要转换的变量。
- y: pandas Series 或 np.array = [n_samples,]
用于训练决策树的目标变量。
- 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
参数名称映射到它们的值。