首页 > 编程语言 >Python+sklearn决策树算法使用入门

Python+sklearn决策树算法使用入门

时间:2023-06-10 16:03:55浏览次数:64  
标签:None False min Python 算法 sklearn 节点 决策树


在学习决策树算法之前,首先介绍几个相关的基本概念。

Python+sklearn决策树算法使用入门_算法

决策树算法原理与sklearn实现

简单地说,决策树算法相等于一个多级嵌套的选择结构,通过回答一系列问题来不停地选择树上的路径,最终到达一个表示某个结论或类别的叶子节点,例如有无贷款意向、能够承担的理财风险等级、根据高考时各科成绩填报最合适的学校和专业、一个人的诚信度、商场是否应该引进某种商品、预测明天是晴天还是阴天。

决策树属于有监督学习算法,需要根据已知样本来训练并得到一个可以工作的模型,然后再使用该模型对未知样本进行分类。

在决策树算法中,构造一棵完整的树并用来分类的计算量和空间复杂度都非常高,可以采用剪枝算法在保证模型性能的前提下删除不必要的分支。剪枝有预先剪枝和后剪枝两大类方法,预先剪枝是在树的生长过程中设定一个指标,当达到指标时就停止生长,当前节点为叶子节点不再分裂,适合大样本集的情况,但有可能会导致模型的误差比较大。后剪枝算法可以充分利用全部训练集的信息,但计算量要大很多,一般用于小样本的情况。

决策树常见的实现有ID3(Iterative Dichotomiser 3)、C4.5、C5.0和CART,ID3、C4.5、C5.0是属于分类树,CART属于分类回归树。其中ID3以信息论为基础,以信息熵和信息增益为衡量标准,从而实现对数据的归纳分类。ID3算法从根节点开始,在每个节点上计算所有可能的特征的信息增益,选择信息增益最大的一个特征作为该节点的特征并分裂创建子节点,不断递归这个过程直到完成决策树的构建。ID3适合二分类问题,且仅能处理离散属性。

C4.5是对ID3的一种改进,根据信息增益率选择属性,在构造树的过程中进行剪枝操作,能够对连续属性进行离散化。该算法先将特征取值排序,以连续两个值中间值作为划分标准。尝试每一种划分,并计算修正后的信息增益,选择信息增益最大的分裂点作为该属性的分裂点。

分类与回归树CART(Classification And Regression Tree)以二叉树的形式给出,比传统的统计方法构建的代数预测准则更加准确,并且数据越复杂、变量越多,算法的优越性越显著。

扩展库sklearn.tree中使用CART算法的优化版本实现了分类决策树DecisionTreeClassifier和回归决策树DecisionTreeRegressor,官方在线帮助文档为https://scikit-learn.org/stable/modules/tree.html。本文重点介绍分类决策树DecisionTreeClassifier的用法,该类构造方法的语法为:

__init__(self, 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=False)

其中,常用参数及含义如下表所示。

表  DecisionTreeClassifier类构造方法参数及含义

参数名称

含义

criterion

用来执行衡量分裂(创建子节点)质量的函数,取值为'gini'时使用基尼值,为'entropy'时使用信息增益

splitter

用来指定在每个节点选择划分的策略,可以为'best'或'random'

max_depth

用来指定树的最大深度,如果不指定则一直扩展节点,直到所有叶子包含的样本数量少于min_samples_split,或者所有叶子节点都不再可分

min_samples_split

用来指定分裂节点时要求的样本数量最小值,值为实数时表示百分比

min_samples_leaf

叶子节点要求的样本数量最小值

max_features

用来指定在寻找最佳分裂时考虑的特征数量

max_leaf_nodes

用来设置叶子最大数量

min_impurity_decrease

如果一个节点分裂后可以使得不纯度减少的值大于等于min_impurity_decrease,则对该节点进行分裂

min_impurity_split

用来设置树的生长过程中早停的阈值,如果一个节点的不纯度高于这个阈值则进行分裂,否则为一个叶子不再分裂

presort

用来设置在拟合时是否对数据进行预排序来加速寻找最佳分裂的过程

 该类对象常用方法如下表所示。

表  DecisionTreeClassifier类常用方法

方法

功能

fit(self, X, y, sample_weight=None, check_input=True, X_idx_sorted=None)

根据给定的训练集构建决策树分类器

predict_log_proba(self, X)

预测样本集X属于不同类别的对数概率

predict_proba(self, X, check_input=True)

预测样本集X属于不同类别的概率

apply(self, X, check_input=True)

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

decision_path(self, X, check_input=True)

返回树中的决策路径

predict(self, X, check_input=True)

返回样本集X的类别或回归值

score(self, X, y, sample_weight=None)

根据给定的数据和标签计算模型精度的平均值

另外,sklearn.tree模块的函数export_graphviz()可以用来把训练好的决策树数据导出,然后再使用扩展库graphviz中的功能绘制决策树图形,export_graphviz()函数语法为

export_graphviz(decision_tree, out_file="tree.dot", max_depth=None, feature_names=None, class_names=None, label='all', filled=False, leaves_parallel=False, impurity=True, node_ids=False, proportion=False, rotate=False, rounded=False, special_characters=False, precision=3)

为了能够绘制图形并输出文件,需要从下面的地址下载graphviz安装包,安装之后把安装路径的bin文件夹路径添加至系统环境变量Path。

https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.msi

然后执行下面的代码:

Python+sklearn决策树算法使用入门_决策树_02

代码运行后生成的abc.pdf文件内容:

Python+sklearn决策树算法使用入门_python_03

公众号“Python小屋”

标签:None,False,min,Python,算法,sklearn,节点,决策树
From: https://blog.51cto.com/u_9653244/6454736

相关文章

  • Python编写人机对战小游戏(抓狐狸)(2)
    很久很久以前,在公众号里推送过一个抓狐狸游戏,详见Python编写人机对战小游戏(抓小狐狸),还有免费视频可以看微课|中学生可以这样学Python(例4.6):抓小狐狸游戏,今天再给出另一个版本的实现。在下面的代码中,直接使用整型变量表示狐狸当前位置,如果打开的洞口与狐狸当前位置相同就抓住了,否则就......
  • 使用Python预处理机器学习需要的手写体数字图像文件数据集
    封面图片:《Python程序设计实验指导书》,董付国,清华大学出版社=============问题描述:为演示机器学习算法对手写体数字识别与分类,需要准备大量数据,如果自己写的话需要很长时间,于是找很多同学帮忙,每位同学提供30张图片,每个图片包含一个数字的手写体,分别命名为0_1.png、0_2.png、0_3.png......
  • 常用Python标准库对象速查表(1)
    封面图片:《Python程序设计基础(第2版)》,董付国,清华大学出版社===============常用Python标准库对象速查表(1)标准库对象简要说明mathsin(x)、cos(x)、tan(x)正弦函数、余弦函数、正切函数,参数单位为弧度asin(x)、acos、atan(x)反正弦函数、反余弦函数、反正切函数ceil(x)、floor(x)向上......
  • Python批量导入Excel文件中的不重复数据到SQLite数据库
    自从2015年开始,为了上课方便,我编写了一个课堂管理系统并陆续增加了很多功能,已连续使用7个学期,在使用过程中也经常修补和完善其中一些细节。这个软件也是《Python可以这样学》最后一章的完整案例,涉及tkinter、数据库、多线程、Word文件操作、Excel文件操作、进程管理、二进制序列化......
  • Python+matplotlib绘制多门课程学生成绩分布饼状图
    封面图片:《Python程序设计实验指导书》,董付国,清华大学出版社=================饼状图比较适合展示一个总体中各个类别所占的比例,例如商场年度营业额中各类商品、不同员工的占比,家庭年度开销中不同类别的占比等。扩展库matplotlib.pyplot中的pie()函数可以用来绘制饼状图,语法如下:pie......
  • Python+pandas分离Excel数据到同一个Excel文件中多个Worksheets
    封面图片:《Python程序设计(第2版)》,董付国,清华大学出版社===============问题描述:已知文件“超市营业额2.xlsx”中结构与部分数据如图所示:现在要求把每个员工的交易数据写入文件“各员工数据.xlsx”,每个员工的数据占一个worksheet,结构和“超市营业额2.xlsx”一样,并以员工姓名作为work......
  • 1000道Python题库系列分享23(61个填空题)
    封面图片:《玩转Python轻松过二级》,董付国,清华大学出版社=================本期题目,参考答案在文末:公众号“Python小屋”参考答案:......
  • 常用Python标准库对象速查表(2):文件与文件夹操作
    封面图片:《Python程序设计基础与应用》,董付国,机械工业出版社图书详情:https://item.jd.com/12433472.html===========os模块常用成员方法功能说明access(path,mode)测试是否可以按照mode指定的权限访问文件chdir(path)把path设为当前工作目录chmod(path,mode,*,dir_fd=None,fol......
  • Python花式编程:6种方法计算1!+2!+...+n!
    问题描述:给定任意正整数n,计算1!+2!+3!+...+n!的值。 阅读原文......
  • Python自学指南-第一章-安装运行
    1.1【环境】快速安装Python与PyCharm“工欲善其事,必先利其器”,为了自学之路的顺利顺利进行。首先需要搭建项目的开发环境。1.下载解释器进入Python官网,目前Python最新Python稳定版为3.11,点击如下链接直接跳到最后,根据你电脑系统以及的位数Win64位:选择Windows......