机器学习-入门教程

【初识】CART决策树模型简介与实例

作者 : 老饼 发表日期 : 2024-03-14 06:11:50 更新日期 : 2025-03-30 13:46:02
本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com



CART决策树全称为classification and regression tree,即,分类与回归树

本文介绍CART分类树的模型结构,模型决策流程,并展示一个简单的CART决策树使用例子

通过本文,可以初步认识CART决策树是什么,长什么样子,以及它的工作原理




  01. CART决策树模型简介 





本节讲述CART决策树的模型结构和运作原理,初步认识CART决策树是什么





     CART决策树-模型结构     


CART决策树(分类树)模型主要用于模式识别,即样本的类别识别
CART分类树的模型结构如下:

 
cart决策树的模型结构 
 CART分类树的模型是一棵二叉树
 二叉树指的就是从一个根节点开始,不断一分为二从而得到的树结构
 
CART决策树的每个非叶子节点都记录一个特征(变量)和阈值,作为节点的判断依据
而在CART决策树的叶子节点,则记录样本类别,它是样本类别的判别依据
✍️决策树的模型表述
决策树是一种描述型的模型,它没有数学表达式
 
 决策树往往是用 一套 if else判断语句去描述树的样子
 
但不管用什么形式表达决策树,都必须包含如下三点:
 👉1. 树结构 :树长什么样子                                        
 👉2. 节点分枝依据:分枝节点的特征名称和特征阈值    
 👉3. 叶子节点类别:叶子节点所属类别                        





    决策树模型的预测方式    


   决策树模型按如下方式对样本进行预测:
 
决策树的决策机制
如图所示,决策树模型就是根据样本的各个特征的值,进行判断,
一直到达叶子,根据叶子类别确定样本是属于哪个类别
  叶子节点不作判断,叶子节点只负责告诉我们,决策树模型的预测结果是什么









   02. CART决策树模型-实例讲解   





本节通过一个实例,认识怎么利用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 




内容纠正