老饼讲解-机器学习 机器学习 神经网络 深度学习
入门教程
1.学前解惑
2.第一课:初探模型
3.第二课:逻辑回归与梯度下降
4.第三课:决策树
5.第四课:逻辑回归与决策树补充
6.第五课:常见的其它算法
7.第六课:综合应用

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

作者 : 老饼 日期 : 2022-06-26 03:39:42 更新 : 2023-12-19 16:41:56
本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com



本文我们介绍CART决策树的模型结构,决策树模型的预测流程,

并通过一个简单实例,讲解如何构建一棵CART决策树模型



  01. CART决策树模型简介 



本节讲述CART决策树的模型结构和它的运作原理

初步认识CART决策树模型是一个什么样的模型



     CART决策树模型结构     


CART决策树模型结构
CART分类树的模型结构如下:

 
CART决策树模型 
 CART分类树的模型是一棵二叉树
 二叉树指的就是从一个根节点开始,不断一分为二从而得到的树结构
 
CART决策树的每个非叶子节点都记录一个特征(变量)和阈值,作为节点的判断依据
而在CART决策树的叶子节点,则记录样本类别,它是样本类别的判别依据
     决策树模型的预测方式     
 
决策树模型按如下方式对样本进行预测:
 
CART决策树的预测流程
如图所示,决策树模型就是根据样本的各个特征的值,进行判断,
一直到达叶子,根据叶子类别确定样本是属于哪个类别
  叶子节点不作判断,叶子节点只负责告诉我们,决策树模型的预测结果是什么



      CART决策树的模型表示     


决策树是一种描述型的模型,它没有数学表达式
 
 决策树往往是用 一套 if else判断语句去描述树的样子
 
但不管用什么形式表达决策树,都必须包含如下三点:
👉1. 树结构 :树长什么样子                                        
👉2. 节点分枝依据:分枝节点的特征名称和特征阈值  
👉3. 叶子节点类别:叶子节点所属类别                       






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



本节通过一个实例,认识怎么利用软件包中的决策树函数构建一棵CART决策树



  CART决策树实例-问题描述  


现有鸢尾花样本数据如下(即sklearn中的iris数据):
 CART决策树例子数据
数据共150条,
每条数据包括四个鸢尾花特征和鸢尾花的类别,如下:
特征:花萼长度 sepal length               
花萼宽度 sepal width          
花瓣长度 petal length        
花瓣宽度 petal width         
类别:0:山鸢尾,1:杂色鸢尾,2:弗吉尼亚鸢尾 
现需要用以上鸢尾花数据,训练一棵cart决策树,
通过鸢尾花的特征来预测鸢尾花的类别



   CART决策树实例-代码实现   


利用sklearn中的决策树函数DecisionTreeClassifier,编写python代码如下:
from sklearn.datasets import load_iris
from sklearn import tree
import numpy  as np
#----------------数据准备----------------------------
iris = load_iris()                          # 加载数据

#---------------模型训练----------------------------------
clf = tree.DecisionTreeClassifier(min_samples_leaf=15)   # sk-learn的决策树模型
clf = clf.fit(iris.data, iris.target)                     # 用数据训练树模型构建()

#---------------模型预测结果------------------------
test_x = iris.data[[0], :]
pred_target = clf.predict(test_x)              # 预测类别

#---------------打印结果---------------------------
print("\n===模型结构======")
print("树结构-左节点:"+str(clf.tree_.children_left))
print("树结构-右节点:"+str(clf.tree_.children_right))
print("节点分裂特征:"+str(clf.tree_.feature))
print("节点分裂阈值:"+str(np.round(clf.tree_.threshold,2)))
print("节点类别:"+str(clf.classes_.take( [ np.argmax(i) for i in clf.tree_.value])))
print("\n===模型预测=====")
print("数据:"+str(test_x)+',预测类别:'+str(pred_target))
代码运行结果如下:
===模型结构======
树结构-左节点:[ 1 -1  3  4 -1 -1  7 -1 -1]
树结构-右节点:[ 2 -1  6  5 -1 -1  8 -1 -1]
节点分裂特征:[ 2 -2  3  2 -2 -2  0 -2 -2]
节点分裂阈值:[ 2.45 -2.    1.75  4.45 -2.   -2.    6.35 -2.   -2.  ]
节点类别:[0 0 1 1 1 1 2 2 2]

===模型预测=====
数据:[[5.1 3.5 1.4 0.2]],预测类别:[0]



    CART决策树实例-结果解读    


代码的运行结果中共包括两部分,
👉1. 第一部分是训练好的决策树模型结构       
👉2. 第二部分是决策树模型的预测结果     
     
1、决策树模型结构
 
代码的第一部分输出是训练好的决策树模型结构
 
CART决策树模型结果
 
决策树模型结构包括树结构、节点划分时的依据,节点的类别等
将上述结果进行分类整理后如下:
 CART决策树模型结果-数据形式 
 
   这里对决策树模型的结构描述采用的是“左右节点编号”的方式
 
它代表的是下述的决策树, 可结合下图进行理解上述各个数据的意义:
 CART决策树模型结果
2、决策树模型预测结果
 
代码第二部分是决策树模型的预测结果:
 CART决策树的预测结果
它代表使用上面训练好的决策树,
对 样本【花萼长度,花萼宽度,花瓣长度,花瓣宽度】 = 【5.1 ,3.5,1.4 ,0.2】进行预测
得到了类别预测结果:0(山鸢尾)
 预测的具体流程如下: 
 CART决策树的预测




以上就是CART决策树模型简介与实例的全部内容了~






 End 




联系老饼