Scikit-learn决策树算法库总结与简单实践

本文详细介绍了Scikit-learn中的决策树算法库,包括DecisionTreeClassifier和DecisionTreeRegressor的常用参数,如criterion、splitter、max_depth等,并强调了剪枝参数在防止过拟合中的作用。此外,还探讨了决策树的可视化方法和实践经验,例如使用Graphviz进行决策树的图形化展示。最后,通过鸢尾花数据集展示了决策树的分类实践。
摘要由CSDN通过智能技术生成

       上两篇我们探讨了决策树ID3算法,C4.5算法以及CART算法。CART算法在ID3,C4.5的基础上进行了不少优化,也是Scikit-learn决策树库使用的算法,是我们必须要掌握的算法之一。本篇我们基于上篇的算法原理,来探讨下Scikit-learn决策树算法库的一些常用参数,以及决策树的可视化,最后我们使用DecisionTreeClassifier做一个简单的分类实践。

1)Scikit-learn决策树算法库概述

       Scikit-learn决策树算法库既可以做分类,又可以做回归。分类库类对应DecisionTreeClassifier,回归库类对应DecisionTreeRegressor,两者的绝大多数参数都相同,下面按照参数重要性进行一一介绍。

2)DecisionTreeClassifier常用参数

        Scikit-learn DecisionTreeClassifier类官方API: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, min_impurity_split=None, class_weight=None, presort=‘deprecated’, ccp_alpha=0.0)[source]

  • criterion,不确定性的计算方式,默认“gini”
            可以输入“gini”和“entropy”,“gini”对应CART算法的基尼系数, “entropy”对应信息增益。在实际使用中,信息熵和基尼系数的效果基本相同,但信息熵涉及对数计算,模型会慢一些。实际使用时,大多保持默认“gini”设置。

  • splitter,特征划分方式,默认“best”
            该参数为特征划分的方式,“best”表示在特征所有划分中选择最优的划分点;“random”表示在随机划分中选择最优的划分点。实际使用时,大多保持默认“best”设置。

  • max_depth,树的最大深度,默认“None”
            该参数用来限制树过拟合的剪枝参数,超过指定深度的树枝全部被剪掉。当为“None”是,决策树将将会自由生长。决策树首要调整的剪枝参数,实际使用时,在没有经验的情况下,可以参考从3开始调整。

  • min_samples_leaf,叶节点最小样本个数,默认1
           该参数用来限制树过拟合的剪枝参数。如果叶节点样本数目小于该参数的值,叶节点将会被剪枝。实际使用时,小样本保持默认1设置,大样本(10万)时,需要设置该参数,可以参考从5开始调整。

  • min_samples_split,节点划分所需的最小样本个数,默认2
           该参数用来限制树过拟合的剪枝参数。如果节点样本数小于该参数,节点将会不会再被划分。实际使用时,小样本保持默认设置,大样本(10万)时,可以参考从5开始调整。

  • ccp_alpha,最小剪枝系数,默认为0
           该参数用来限制树过拟合的剪枝参数。对应上一篇决策树原理中的 α \alpha α,模型将会选择小于输入值最大 α \alpha α。ccp_alpha=0时,决策树不剪枝;ccp_alpha越大,越多的节点被剪枝。Scikit learn 0.22版本新增参数。

  • max_features,分枝时考虑的特征个数,默认为“None”
           该参数用来限制树过拟合的剪枝参数。max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃。输入为“None”时,使用所有的特征进行特征选择。否则设定指定数量的特征,如平方根个特征(sqrt),对数个特征(log2)。设定指定数量的特征可能会导致模型学习不足。

  • class_weight,类别权重参数,默认为“None”
           当样本存在不平衡的情况下,需要设置该参数。 这里可以自己指定各个样本的权重,或者用‘balanced’,如果使用‘balanced’ ,则算法会自己计算权重,样本量少的类别所对应的样本权重会高。

  • min_weight_fraction_leaf,叶子节点最小的样本权重和,默认为0。
           当设置了class_weight参数,样本量就不再是单纯地记录数目,而是受输入的权重影响了,因此这时候剪枝,就需要搭配min_ weight_fraction_leaf这个基于权重的剪枝参数来使用。

  • random_state,随机种子,默认为“None”
           当输入为int型数值时,随机数生成器使用的输入值作为种子;输入为None时,则随机数生成器是所使用np.random产生的随机数作为种子。

3)DecisionTreeRegressor常用参数

       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)[source]

       DecisionTreeRegressor中的参数绝大多数参数和DecisionTreeClassifier相同,只有特征选择的方式不同。

  • criterion,不确定性的计算方式,默认“mse”
           可以输入"mse"或者"mae",mse是均方差,mae是和均值之差的绝对值之和。实际使用时,使用默认的"mse"。

4)决策树结果可视化

       scikit-learn中决策树的可视化使用Graphviz,Graphviz是一款开源图形可视化软件包。首先我们到官网下载对应版本的Graphviz进行安装,设置环境变量,将graphviz的bin目录加到PATH,比如我的graphviz的bin目录为:D:\Program Files (x86)\decisionTreeVersion_Graphviz\bin。然后,通过pip安装可视化所需要的graphviz,pydotplus包。
       注意:如果完成环境变量的设置,Python还提醒没有将graphviz的bin目录加到PATH,可使用代码指定环境目录

import os
os.environ["PATH"] += os.pathsep +"D:/Program Files (x86)/decisionTreeVersion_Graphviz/bin/"

       决策树的可视化输出有三种方式,我们放在案例中进行介绍。

5)决策树算法库使用经验总结

  • 在高维数据下,我们需要指定 r a n d o m _ s t a t e random\_state
  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值