Python AI 教学 |决策树绘制函数介绍

2019-10-18 15:39:14 浏览数 (1)

以下文章来源于老薛带你学Python,作者薛巍立

1 基本思想

前面的推文Python AI 教学 | 决策树算法及应用中我们已经介绍了如何从数据集中创建树,我们是用字典类型来存储决策树的,然而字典的表示形式非常不易于理解,决策树的主要优点就是直观易于理解,如果不能将其直观地显示出来,就无法发挥其优势。鉴于Python 并没有提供绘制树的工具,本期我们将介绍使用Matplotlib库来创建树形图。Matplotlib库是Python优秀的数据可视化第三方库,下面我们通过具体的算法实现来感受Matplotlib库的绘图魅力。

2 算法实现

1.获取决策树的叶节点数和树的层数

为保证绘制的决策树具有美观的比例和位置,我们必须要知道叶节点数和树的层数,以便正确确定x轴与y轴的长度。

【求叶子节点数】

【求树的层数】

【打印结果】

运行结果(python3):

2.图示决策树

函数说明 —— annotate

可以在数据图形上添加文本注释,内嵌支持带箭头的划线工具,使得可以在其他恰当的地方指向待注释内容。

annotate参数说明:

①xy箭头尖端坐标,即待注释的位置坐标

②xytext注释位置的坐标

③xycoords被注释点的坐标系属性,参数如下

figure points—— 以绘图区左下角为参考,单位是点数

figure pixels—— 以绘图区左下角为参考,单位是像素数

figure fraction—— 以绘图区左下角为参考,单位是百分比

axes points —— 以子绘图区左下角为参考,单位是点数(一个figure可以有多个axex,默认为1个)

axes pixels—— 以子绘图区左下角为参考,单位是像素数

axes fraction ——以子绘图区左下角为参考,单位是百分比

data ——以被注释的坐标点xy为参考 (默认值)

polar——不使用本地数据坐标系,使用极坐标系

④extcoords注释文本的坐标系属性,默认与xycoords属性值相同,也可设为不同的值。除了允许输入xycoords的属性值,还允许输入以下两种:

offset points 相对于被注释点xy的偏移量(单位是点)

offset pixels 相对于被注释点xy的偏移量(单位是像素)

⑤arrowprops 箭头参数,参数类型为字典dict

width ——点箭头的宽度

headwidth——箭头底座的宽度

headlength—— 点箭头的长度

shrink——箭头总长度从两端收缩的百分比

facecolor ——箭头颜色

⑥bbox给标题增加外框 ,常用参数如下:

boxstyle方框外形

facecolor(简写fc)背景颜色

edgecolor(简写ec)边框线条颜色

edgewidth边框线条大小

函数说明 —— text

text语法: text(x,y,string,fontsize=15,verticalalignment="top",horizontalalignment="right")

①x,y:表示坐标点

②string:表示注释文字

③fontsize:表示字体大小

④verticalalignment:垂直对齐方式

参数:[ ‘center’ | ‘top’ | ‘bottom’ | ‘baseline’ ]

⑤horizontalalignment:水平对齐方式

参数:[ ‘center’ | ‘right’ | ‘left’ ]

⑥bbox给标题增加外框 ,常用参数如下:

boxstyle方框外形

facecolor(简写fc)背景颜色

edgecolor(简写ec)边框线条颜色

edgewidth边框线条大小

函数说明 —— plot

plot语法:

plot(x, y, color='green', marker='o', linestyle='dashed',linewidth=2, markersize=12)

① color:绘图颜色

② marker:绘图符号

③ linestyle:线型

④ linewidth:线宽

⑤ markersize:绘图符号大小

函数说明 —— subplot

用参数设置分区模式和当前子图,只有当前子图受到命令的影响。函数的参数有三个整数组成:第一个数字决定图形沿垂直方向被分为几部分,第二个数字决定图形沿水平方向被分为几部分,第三个数字设定可以直接用命令控制的子图.

责编 | 栾申

指导 | 老薛

指导教授简介:

薛巍立,男,博士,东南大学经济管理学院教授,博士生导师,国家自然科学基金优秀青年基金项目获得者。博士毕业于中国香港中文大学系统工程与工程管理系,主要从事供应链物流管理、运营风险管理和医疗服务运作管理等。主要成果发表在Operations Research、Production and Operations Management、Transportation Science、European Journal of Operational Research、Operations Research Letters等期刊上。

0 人点赞