sklearn 决策树算法

https://cloud.tencent.com/developer/article/1819247


决策树三大流行算法ID3、C4.5和CART
3个算法的主要区别在于度量信息方法、选择节点特征还有分支数量的不同。
ID3:采用熵(entropy)来度量信息不确定度,选择“信息增益”最大的作为节点特征,它是多叉树,即一个节点可以有多个分支。
C4.5:同样采用熵(entropy)来度量信息不确定度,选择“信息增益比”最大的作为节点特征,同样是多叉树,即一个节点可以有多个分支。
CART:采用基尼指数(Gini index)来度量信息不纯度,选择基尼指数最小的作为节点特征,它是二叉树,即一个节点只分两支。
 
sklearn的DecisionTreeClassifier的帮助文档,可以发现,度量信息的方法默认是Gini,但可以改成entropy,请按需选择;构建的树是二叉树;可以通过设置max_deepth、max_leaf等来实现“剪枝”,这是根据CART的损失函数减少的理论进行的。所以总结说,如果信息度量方法按照默认的设置,那么sklearn所用的决策树分类器就是CART,如果改成了entropy,那么只是使用了别的度量方法而已。

 

主要阐述sklearn中分类决策树(tree.DecisionTreeClassifier)的参数,回归决策树类似,不再赘述。

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, min_impurity_split=None, 
class_weight=None, presort='deprecated', ccp_alpha=0.0)

部分参数详解:

criterion:构建决策树寻找最佳节点和最佳分枝时可选的两种衡量标准,【“entropy”,“gini”】,默认采用“gini”作为划分标准。

splitter:特征划分标准,【“best”,“random”】。默认值best,即在特征的所有划分点中找出最优划分点,random指随机地在部分特征中找局部最优划分点。

max_depth:控制树的最大深度,若节点的深度超过最大深度则剪枝,防止过拟合。默认值None,即节点将展开到所有叶子都是纯的或直到所有叶子都含有少于最小分割的样本。

min_samples_split:拆分内部节点所需的最小样本数,默认值2。

min_samples_leaf:一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分枝就不会发生,或者分枝会朝着满足每个子节点都包含min_samples_leaf个样本的方向去建树。

min_weight_fraction_leaf:叶子节点最小的样本权重和,如果小于这个值,则会和兄弟节点一起被剪枝。默认值0,即不考虑权重问题,所有样本权重相同。

max_feature:分枝时考虑的最大特征数,默认值None,即考虑所有特征。如果数据类型为int,该值为每次分枝的最大特征数。如果数据类型为float,(max_features*n_features)为每次分枝的最大特征数。

random_state:设置分枝中随机模式的参数,默认值None。输入任意整数,会一直长出同一棵树,让模型稳定下来,类似随机种子。

max_leaf_nodes:最大叶子节点个数,默认值None,即不限制最大的叶子节点数。

min_impurity_split:节点划分最小不纯度,默认值None,

class_weight:设置样本各类别的权重,为了防止训练集中某些类别的样本过多,导致训练的决策树过于偏向这些类别。默认值None,自动给数据集中的所有标签相同的权重。可以自己指定各个样本的权重,如果使用“balanced”,则算法会自己计算权重,样本量少的类别所对应的样本权重会高。

presort:拟合之前对数据进行预排序来加快树的构建。如果数据集非常庞大,预排序反而会导致整个分类变得缓慢,当数据集较小,且树的深度有限制时,采取预排序才会加速。

 

决策树可视化工具  graphviz

from sklearn import tree  #导入sklearn中的树模块

clf = tree.DecisionTreeClassifier(criterion='gini', max_depth=3, min_samples_split=100)
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest)

import graphviz

dot_data = tree.export_graphviz(clf,
                               out_file =None,
                               feature_names = columns_model,
                               filled = True,
                               rounded = True
                               )
print("criterion=",'entropy',"score=",score)
graph = graphviz.Source(dot_data.replace('helvetica','"Microsoft YaHei"'), encoding='utf-8')
graph.render(filename='MyPicture',view=True)   #结果保存在MyPicture.pdf中

 可视化工具安装:

1.官网下载graphviz 安装包 进行安装

2.conda下载安装 python-graphviz(调用接口)

conda install python-graphviz

https://blog.csdn.net/weixin_43848614/article/details/106462676

posted @ 2022-11-22 17:15  wangssd  阅读(160)  评论(0编辑  收藏  举报