本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com
CART决策树全称为classification and regression tree,即,分类与回归树
本文介绍CART分类树的模型结构,模型决策流程,并展示一个简单的CART决策树使用例子
通过本文,可以初步认识CART决策树是什么,长什么样子,以及它的工作原理
本节讲述CART决策树的模型结构和运作原理,初步认识CART决策树是什么
CART决策树-模型结构
CART决策树(分类树)模型主要用于模式识别,即样本的类别识别
CART分类树的模型结构如下:
![]()
CART分类树的模型是一棵二叉树
二叉树指的就是从一个根节点开始,不断一分为二从而得到的树结构
CART决策树的每个非叶子节点都记录一个特征(变量)和阈值,作为节点的判断依据
而在CART决策树的叶子节点,则记录样本类别,它是样本类别的判别依据
✍️决策树的模型表述
决策树是一种描述型的模型,它没有数学表达式
决策树往往是用 一套 if else判断语句去描述树的样子
但不管用什么形式表达决策树,都必须包含如下三点:
👉1. 树结构 :树长什么样子
👉2. 节点分枝依据:分枝节点的特征名称和特征阈值
👉3. 叶子节点类别:叶子节点所属类别
决策树模型的预测方式
决策树模型按如下方式对样本进行预测:
如图所示,决策树模型就是根据样本的各个特征的值,进行判断,
一直到达叶子,根据叶子类别确定样本是属于哪个类别
叶子节点不作判断,叶子节点只负责告诉我们,决策树模型的预测结果是什么
本节通过一个实例,认识怎么利用sklearn来构建一棵CART决策树
CART决策树实例与代码
现有鸢尾花样本数据如下(即sklearn中的iris数据):
数据共150条,,每条数据包括四个鸢尾花特征和鸢尾花的类别
现需要用以上鸢尾花数据,训练一棵cart决策树,通过鸢尾花的特征来预测鸢尾花的类别
利用sklearn中的决策树函数DecisionTreeClassifier可以实现快速一棵决策树
具体代码如下:
from sklearn.datasets import load_iris
from sklearn import tree
import numpy as np
#----------------数据准备---------------
iris = load_iris() # 加载数据
clf = tree.DecisionTreeClassifier(min_samples_leaf=15) # 初始化决策树模型
clf = clf.fit(iris.data, iris.target) # 用数据构建决策树
test_x = iris.data[[0], :] # 用于预测的x
pred_target = clf.predict(test_x) # 预测类别
#---------------打印结果----------------
print("\n===模型结构======") # 打印
print("树结构-左节点:",clf.tree_.children_left) # 打印左节点编号
print("树结构-右节点:",clf.tree_.children_right) # 打印右节点编号
print("节点分裂特征:",clf.tree_.feature) # 打印分裂所用的特征
print("节点分裂阈值:",np.round(clf.tree_.threshold,2)) # 打印分裂所用的阈值
print("节点类别:",clf.classes_.take([np.argmax(i) for i in clf.tree_.value])) # 打印节点的类别
print("\n===模型预测=====") # 打印
print("数据:",test_x,',预测类别:',pred_target) # 打印预测结果
代码运行结果如下:
CART决策树实例-结果解读
树的模型结构
代码的第一部分输出是训练好的决策树模型结构,如下:
这里决策树的结构描述采用的是“左右节点编号”的方式
如下:
它代表节点0的左右节点为1、2号节点,
节点1的左右节点都为-1(这里的-1代表没有左右节点),节点2的左右节点为3、6号节点
...如此类似,则可以构造出整棵决策树的结构如下:
其中,每个树节点的信息如下:
![]()
将上述信息补充到决策树上,则如下图所示:
这就是构建好的决策树了~
决策树模型预测结果
代码第二部分是决策树模型的预测结果:
它代表使用上面训练好的决策树
对样本x = 【5.1 ,3.5,1.4 ,0.2】进行预测,得到了类别预测结果:0(山鸢尾)
预测的具体流程如下:
以上就是CART决策树模型简介与实例的全部内容了~
End