sklearn.tree.DecisionTreeRegressor

class sklearn.tree.DecisionTreeRegressor(*, criterion='mse', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, presort='deprecated', ccp_alpha=0.0)

[源码]

决策树回归器。

用户指南中阅读更多内容。

参数 说明
criterion {“mse”, “friedman_mse”, “mae”}, default=”mse”
测量分割质量的函数。支持的标准是均方误差的“ mse”,等于方差减少作为特征选择标准,并使用每个终端节点的均值“ friedman_mse”来最小化L2损失,该方法使用均方误差和弗里德曼改进分数作为潜在值拆分,并使用“ mae”表示平均绝对误差,使用每个终端节点的中值将L1损失最小化。
版本0.18中的新功能:平均绝对误差(MAE)标准。
splitter {“best”, “random”}, default=”best”
用于在每个节点上选择拆分的策略。支持的策略是“best”选择最佳拆分,“random”选择最佳随机拆分。
max_depth int, default=None
树的最大深度。如果为None,则将节点展开,直到所有叶子都是纯净的,或者直到所有叶子都包含少于min_samples_split个样本。
min_samples_split int or float, default=2
拆分内部节点所需的最少样本数:
- 如果为int,则认为min_samples_split是最小值。
- 如果为float,min_samples_split则为分数, ceil(min_samples_split * n_samples)是每个拆分的最小样本数。
在版本0.18中更改:添加了分数的浮点值。
min_samples_leaf int or float, default=1
在叶节点处需要的最小样本数。任何深度的分割点只有在左、右分支中至少留下min_samples_leaf训练样本时才会被考虑。这可能具有平滑模型的效果,尤其是在回归中。
min_weight_fraction_leaf float, default=0.0
在所有叶节点处(所有输入样本)的权重总和中的最小加权分数。如果未提供sample_weight,则样本的权重相等。
max_features int, float or {“auto”, “sqrt”, “log2”}, default=None
寻找最佳分割时要考虑的特征数量:
- 如果为int,则max_features在每个分割处考虑特征。
- 如果为float,max_features则为小数,并且int(max_features * n_features)是在每次拆分时考虑要素。
- 如果为“auto”,则为max_features=n_features
- 如果是“ sqrt”,则max_features=sqrt(n_features)
- 如果为“ log2”,则为max_features=log2(n_features)
- 如果为”None“,则max_features=n_features
注:直到找到至少一个有效的节点样本分区,分割的搜索才会停止,即使它需要有效检查多个max_features要素也是如此。
random_state int, RandomState instance, default=None
控制估算器的随机性。即使splitter设置为"best",这些特性总是在每次拆分时随机排列。当max_features < n_features时,算法将在每个分割处随机选择max_features特征,然后在其中找到最佳分割。即使max_features=n_features,但最佳分割可能因不同的运行而有所不同,这种情况下,如果标准的改进对于多个分割是相同的,必须随机选择一个分割。为了在拟合过程中获得确定性行为,必须将其固定为整数。有关详细信息,请参见词汇表
max_leaf_nodes int, default=None
以最好的方式种植一棵树,树上有max_l节点。最佳节点定义为杂质相对减少。如果没有,则叶节点的数量不受限制。
min_impurity_decrease float, default=0.0
如果节点分裂会导致杂质的减少大于或等于该值,则该节点将被分裂。
加权杂质减少方程如下:
N_t / N * (impurity - N_t_R / N_t * right_impurity N_t_L / N_t * left_impurity)
其中,N是样本总数,N_t是当前节点的样本数,N_t_L是左子节点中的样本数,N_t_R是右子节点中的样本数。
NN_tN_t_RN_t_L都指的是加权和,如果sample_weight可以通过。
版本0.19中的新功能。
min_impurity_split float, (default=0)
尽早停止树的生长的阈值。如果节点的杂质高于阈值,则该节点将分裂,否则为叶。
从版本0.19min_impurity_split开始不推荐使用:在版本0.19中不再推荐使用 min_impurity_decreasemin_impurity_split的默认值在0.23中从1e-7更改为0,将会在0.25中删除。使用min_impurity_decrease将其代替。
presort deprecated, default=’deprecated’
此参数已弃用,并将在v0.24中删除。
从0.22版开始不推荐使用。
ccp_alpha non-negative float, default=0.0
用于最小代价复杂度修剪的复杂度参数。选择代价复杂度最大且小于ccp_alpha的子树。默认情况下,不执行修剪。有关详细信息,请参见 最小成本复杂性修剪
0.22版中的新功能。
属性 说明
feature_importances_ ndarray of shape (n_features,)
返特征的重要性。
max_features_ int
max_features的推断值。
n_features_ int
fit执行时的特征数量。
n_outputs_ int
fit执行时的输出数量。
tree_ Tree
基础的Tree对象。有关树对象的属性请参阅help(sklearn.tree._tree.Tree), 有关这些属性的基本用法,请参阅 决策树结构

另见

DecisionTreeClassifier

决策树分类器。

控制树(例如max_depthmin_samples_leaf等)大小的参数的默认值会导致树的完全生长和未修剪,这在某些数据集上可能非常大。为了减少内存消耗,应通过设置这些参数值来控制树的复杂性和大小。

参考文献

1 https://en.wikipedia.org/wiki/Decision_tree_learning

2 L. Breiman, J. Friedman, R. Olshen, and C. Stone, “Classification and Regression Trees”, Wadsworth, Belmont, CA, 1984.

3 T. Hastie, R. Tibshirani and J. Friedman. “Elements of Statistical Learning”, Springer, 2009.

4 L. Breiman, and A. Cutler, “Random Forests”, https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm

实例

>>> from sklearn.datasets import load_diabetes
>>> from sklearn.model_selection import cross_val_score
>>> from sklearn.tree import DecisionTreeRegressor
>>> X, y = load_diabetes(return_X_y=True)
>>> regressor = DecisionTreeRegressor(random_state=0)
>>> cross_val_score(regressor, X, y, cv=10)
...                    # doctest: +SKIP
...
array([-0.39..., -0.46...,  0.02...,  0.06..., -0.50...,
       0.16...,  0.11..., -0.73..., -0.30..., -0.00...])
方法 说明
apply(X[, check_input]) 返回每个样本被预测为的叶子的索引。
cost_complexity_pruning_path(X, y[, …]) 在最小化成本复杂性修剪期间计算修剪路径。
decision_path(X[, check_input]) 返回树中的决策路径。
fit(X, y[, sample_weight, check_input, …]) 根据训练集(X,y)构建决策树回归器。
get_depth() 返回决策树的深度。
get_n_leaves() 返回决策树的叶子数。
get_params([deep]) 获取此估计量的参数。
predict(X[, check_input]) 预测X的类或回归值。
score(X, y[, sample_weight]) 返回预测的确定系数R ^ 2。
set_params(**params) 设置此估算器的参数。
__init__(*, criterion='mse', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, presort='deprecated', ccp_alpha=0.0)

源码

初始化self。请参阅help(type(self))获取准确的签名。

apply(X, check_input=True)

[源码]

返回每个样本被预测为的叶子的索引。

0.17版中的新功能。

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
输入样本。在内部,如果将稀疏矩阵提供给sparse csr_matrix,它将转换为 dtype=np.float32
check_input bool, default=True
允许绕过多个输入检查。除非您知道自己要做什么,否则不要使用此参数。
返回值 说明
X_leaves array-like of shape (n_samples,)
对于X中的每个数据点x,返回以x结尾的叶子的索引。叶子在内编号[0; self.tree_.node_count),可能在编号中带有空格。
cost_complexity_pruning_path(X, y, sample_weight=None)

[源码]

在最小化成本复杂性修剪期间计算修剪路径。

有关修剪过程的详细信息,请参见最小成本复杂性修剪

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
训练输入样本。在内部,如果将稀疏矩阵提供给sparse csr_matrix,它将转换为 dtype=np.float32
y array-like of shape (n_samples,) or (n_samples, n_outputs)
目标值(类标签)为整数或字符串。
sample_weight array-like of shape (n_samples,), default=None
样品重量。如果为None,则对样本进行平均加权。在每个节点中搜索拆分时,将忽略创建净值为零或负权重的子节点的拆分。如果拆分会导致任何单个类在任一子节点中都负负重,则也将忽略拆分。
返回值 说明
ccp_path Bunch
类字典对象,具有以下属性。
ccp_alphas:ndarray
修剪期间子树的有效Alpha。
impurities:ndarray
子树中的杂质总和为ccp_alphas中对应的alpha值。
decision_path(X, check_input=True)

[源码]

返回树中的决策路径。

版本0.18中的新功能。

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
输入样本。在内部,如果将稀疏矩阵提供给sparse csr_matrix,它将转换为 dtype=np.float32
check_input bool, default=True
允许绕过多个输入检查。除非您知道自己要做什么,否则不要使用此参数。
返回值 说明
indicator sparse matrix of shape (n_samples, n_nodes)
返回节点指示符CSR矩阵,其中非零元素表示样本通过节点。
property feature_importances_

返回功能的重要性。

特征的重要性计算为该特征带来的标准的(标准化)总缩减。这也被称为基尼重要性。

警告:基于杂质的特征重要性可能会误导高基数特征(许多唯一值)。详情另见 sklearn.inspection.permutation_importance

返回值 说明
feature_importances_ ndarray of shape (n_features,)
按功能对标准的总归约化进行归一化(基尼重要性)。
fit(X, y, sample_weight=None, check_input=True, X_idx_sorted=None)

[源码]

根据训练集(X,y)构建决策树回归器。

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
训练输入样本。在内部,如果将稀疏矩阵提供给sparse csr_matrix,它将转换为 dtype=np.float32
y array-like of shape (n_samples,) or (n_samples, n_outputs)
目标值(实数)。使用dtype=np.float64order='C'获得最高效率。
sample_weight array-like of shape (n_samples,), default=None
样品重量。如果为None,则对样本进行平均加权。在每个节点中搜索拆分时,将忽略创建净值为零或负权重的子节点的拆分。
check_input bool, default=True
允许绕过多个输入检查。除非您知道自己要做什么,否则不要使用此参数。
X_idx_sorted array-like of shape (n_samples, n_features), default=None
排序后的训练输入样本的索引。如果在同一数据集上生长了许多树,则可以在树之间缓存顺序。如果为None,则将在此处对数据进行排序。除非您知道要做什么,否则不要使用此参数。
返回值 说明
self DecisionTreeRegressor
拟合估计量。
get_depth()

[源码]

返回决策树的深度。

一棵树的深度是根与任何叶子之间的最大距离。

返回值 说明
self.tree_.max_depth int
树的最大深度。
get_n_leaves()

[源码]

返回决策树的叶子数。

返回值 说明
self.tree_.n_leaves int
叶子数。
get_params(deep=True)

[源码]

获取此估计量的参数。

参数 说明
deep bool, default=True
如果为True,则将返回此估算量和作为估算量的所包含子对象的参数。
返回值 说明
params mapping of string to any
参数名称映射到其值。
predict(X, check_input=True)

[源码]

预测X的类或回归值。

对于分类模型,返回X中每个样本的预测类。对于回归模型,将返回基于X的预测值。

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
输入样本。在内部,如果将稀疏矩阵提供给sparse csr_matrix,它将转换为 dtype=np.float32
check_input bool, default=True
允许绕过多个输入检查。除非您知道自己要做什么,否则不要使用此参数。
返回值 说明
y array-like of shape (n_samples,) or (n_samples, n_outputs)
预测的类或预测值。
score(X, y, sample_weight=None)

[源码]

返回预测的确定系数R ^ 2。

系数R ^ 2定义为 (1 - u/v),其中u是平方的残差和((y_true - y_pred) ** 2).sum(),而v是平方的总和((y_true - y_true.mean()) ** 2).sum()。可能的最高分数是1.0,并且可能为负(因为该模型可能会更差)。不管输入特征如何,始终预测y的期望值的常数模型将获得0.0的R ^ 2分数。

参数 说明
X array-like of shape (n_samples, n_features)
测试样品。对于某些估计量,这可以是预先计算的核矩阵或一般对象列表,而不是shape = (n_samples, n_samples_fitted),其中n_samples_fitted是用于估计量拟合的样本数。
y array-like of shape (n_samples,) or (n_samples, n_outputs)
X的真实值。
sample_weight array-like of shape (n_samples,), default=None
样品权重。
返回值 说明
score float
self.predict(X) wrt. y的R^2

调用score回归器时使用的R2得分multioutput='uniform_average'从0.23版开始使用 ,r2_score已与默认值保持一致。这会影响score所有多输出回归变量的方法(除外 MultiOutputRegressor)。

set_params(**params)

[源码]

设置此估算量的参数。

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

参数 说明
**params dict
估算量参数。
返回值 说明
self object
估算量实例。