本文简要介绍python语言中 sklearn.tree.DecisionTreeClassifier
的用法。
用法:
class sklearn.tree.DecisionTreeClassifier(*, criterion='gini', 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, class_weight=None, ccp_alpha=0.0)
决策树分类器。
在用户指南中阅读更多信息。
- criterion:{“gini”, “entropy”},默认=”gini”
测量分割质量的函数。支持的标准是用于基尼杂质的“gini” 和用于信息增益的“entropy”。
- splitter:{“best”, “random”},默认=”best”
用于在每个节点处选择拆分的策略。支持的策略是“best” 选择最佳分割和“random” 选择最佳随机分割。
- max_depth:整数,默认=无
树的最大深度。如果没有,则扩展节点直到所有叶子都是纯的或直到所有叶子包含少于min_samples_split 个样本。
- min_samples_split:int 或浮点数,默认=2
拆分内部节点所需的最小样本数:
- 如果是 int,则将
min_samples_split
视为最小数字。 - 如果是浮点数,那么
min_samples_split
是一个分数,而ceil(min_samples_split * n_samples)
是每个拆分的最小样本数。
- 如果是 int,则将
- min_samples_leaf:int 或浮点数,默认=1
叶节点所需的最小样本数。只有在左右分支中的每个分支中至少留下
min_samples_leaf
训练样本时,才会考虑任何深度的分割点。这可能具有平滑模型的效果,尤其是在回归中。- 如果是 int,则将
min_samples_leaf
视为最小数字。 - 如果是浮点数,那么
min_samples_leaf
是分数,而ceil(min_samples_leaf * n_samples)
是每个节点的最小样本数。
- 如果是 int,则将
- min_weight_fraction_leaf:浮点数,默认=0.0
需要在叶节点处的权重总和(所有输入样本的)的最小加权分数。当未提供sample_weight 时,样本具有相同的权重。
- max_features:int、float 或 {“auto”, “sqrt”, “log2”},默认 = 无
寻找最佳分割时要考虑的特征数量:
如果是 int,则在每次拆分时考虑
max_features
特征。如果是浮点数,那么
max_features
是一个分数,并且在每次拆分时都会考虑int(max_features * n_features)
特征。如果 “auto”,那么
max_features=sqrt(n_features)
。如果 “sqrt”,那么
max_features=sqrt(n_features)
。如果 “log2”,那么
max_features=log2(n_features)
。如果没有,那么
max_features=n_features
。
注意:在找到至少一个节点样本的有效分区之前,对拆分的搜索不会停止,即使它需要有效地检查超过
max_features
的特征。- random_state:int、RandomState 实例或无,默认=无
控制估计器的随机性。即使
splitter
设置为"best"
,这些特征总是在每次拆分时随机排列。当max_features < n_features
时,算法将在每次拆分时随机选择max_features
,然后再找到其中的最佳拆分。但是,即使max_features=n_features
,最好的拆分可能会因不同的运行而有所不同。就是这样,如果标准的改进对于几个拆分是相同的,并且必须随机选择一个拆分。为了在拟合期间获得确定性行为,random_state
必须固定为整数。有关详细信息,请参阅词汇表。- max_leaf_nodes:整数,默认=无
以best-first 方式用
max_leaf_nodes
种植一棵树。最佳节点定义为杂质的相对减少。如果 None 则无限数量的叶节点。- min_impurity_decrease:浮点数,默认=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
是右孩子的样本数.N
,N_t
,N_t_R
和N_t_L
都是指加权和,如果通过了sample_weight
。- class_weight:dict,dict列表或“balanced”,默认=None
与
{class_label: weight}
形式的类关联的权重。如果没有,所有的类都应该有一个权重。对于multi-output 问题,可以按照与 y 的列相同的顺序提供字典列表。请注意,对于多输出(包括多标签),应为其自己的字典中的每一列的每个类定义权重。例如,对于four-class,多标签分类权重应该是 [{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}] 而不是 [{1:1}, {2:5}, {3:1}, {4:1}]。
“balanced” 模式使用 y 的值自动调整与输入数据中的类频率成反比的权重,如
n_samples / (n_classes * np.bincount(y))
对于multi-output,y 的每一列的权重将相乘。
请注意,如果指定了 sample_weight,这些权重将乘以 sample_weight(通过 fit 方法传递)。
- ccp_alpha:非负浮点数,默认=0.0
用于最小Cost-Complexity 修剪的复杂度参数。将选择具有最大成本复杂度且小于
ccp_alpha
的子树。默认情况下,不进行剪枝。有关详细信息,请参阅最小 Cost-Complexity 修剪。
- classes_:形状的 ndarray (n_classes,) 或 ndarray 的列表
类标签(单输出问题)或类标签数组列表(multi-output 问题)。
feature_importances_
ndarray 形状 (n_features,)返回特征重要性。
- max_features_:int
max_features 的推断值。
- n_classes_:int 或 int 列表
类数(对于单个输出问题),或包含每个输出的类数的列表(对于multi-output 问题)。
n_features_
int已弃用:属性
n_features_
在 1.0 中已弃用,并将在 1.2 中删除。- n_features_in_:int
拟合期间看到的特征数。
- feature_names_in_:ndarray 形状(
n_features_in_
,) 拟合期间看到的特征名称。仅当
X
具有全为字符串的函数名称时才定义。- n_outputs_:int
执行
fit
时的输出数。- tree_:树实例
基础树对象。请参考
help(sklearn.tree._tree.Tree)
了解 Tree 对象的属性和了解决策树结构了解这些属性的基本用法。
参数:
属性:
注意:
控制树大小的参数的默认值(例如
max_depth
、min_samples_leaf
等)会导致完全生长和未修剪的树在某些数据集上可能非常大。为了减少内存消耗,应该通过设置这些参数值来控制树的复杂性和大小。predict
方法在predict_proba
的输出上使用numpy.argmax
函数进行操作。这意味着,如果最高预测概率是平局,分类器将预测classes_中索引最低的平局类。参考:
- 1
- 2
L. Breiman、J. Friedman、R. Olshen 和 C. Stone,“分类和回归树”,Wadsworth,Belmont,CA,1984 年。
- 3
T. Hastie、R. Tibshirani 和 J. Friedman。 “统计学习要素”,施普林格,2009 年。
- 4
L. Breiman 和 A. Cutler,“Random Forests”,https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm
例子:
>>> from sklearn.datasets import load_iris >>> from sklearn.model_selection import cross_val_score >>> from sklearn.tree import DecisionTreeClassifier >>> clf = DecisionTreeClassifier(random_state=0) >>> iris = load_iris() >>> cross_val_score(clf, iris.data, iris.target, cv=10) ... ... array([ 1. , 0.93..., 0.86..., 0.93..., 0.93..., 0.93..., 0.93..., 1. , 0.93..., 1. ])
相关用法
- Python sklearn DecisionTreeRegressor用法及代码示例
- Python sklearn DetCurveDisplay.from_predictions用法及代码示例
- Python sklearn DetCurveDisplay.from_estimator用法及代码示例
- Python sklearn DetCurveDisplay用法及代码示例
- Python sklearn DummyRegressor用法及代码示例
- Python sklearn DictVectorizer用法及代码示例
- Python sklearn DictVectorizer.restrict用法及代码示例
- Python sklearn DummyClassifier用法及代码示例
- Python sklearn DotProduct用法及代码示例
- Python sklearn DistanceMetric用法及代码示例
- Python sklearn DictionaryLearning用法及代码示例
- Python sklearn DBSCAN用法及代码示例
- Python sklearn jaccard_score用法及代码示例
- Python sklearn WhiteKernel用法及代码示例
- Python sklearn CalibrationDisplay.from_predictions用法及代码示例
- Python sklearn VotingRegressor用法及代码示例
- Python sklearn gen_batches用法及代码示例
- Python sklearn ExpSineSquared用法及代码示例
- Python sklearn MDS用法及代码示例
- Python sklearn adjusted_rand_score用法及代码示例
- Python sklearn MLPClassifier用法及代码示例
- Python sklearn train_test_split用法及代码示例
- Python sklearn RandomTreesEmbedding用法及代码示例
- Python sklearn GradientBoostingRegressor用法及代码示例
- Python sklearn GridSearchCV用法及代码示例
注:本文由纯净天空筛选整理自scikit-learn.org大神的英文原创作品 sklearn.tree.DecisionTreeClassifier。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。