入门课程
1.入门准备
2.第一课:初探模型
3.第二课:逻辑回归与梯度下降
4.第三课:决策树
5.第四课:逻辑回归与决策树补充
6.第五课:模型补充
7.第六课:综合应用
【初识】CART决策树初识
作者 : 老饼 日期 : 2022-06-26 03:39:42 更新 : 2022-12-23 17:48:40
本站原创文章,转载请说明来自《老饼讲解-机器学习》ml.bbbdata.com


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

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



  01. CART决策树模型结构 


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

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


     模型结构     


CART分类树是一棵二叉树
 



      模型表达     


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



  模型运作原理  


来了新样本时,模型的按如下方式进行预测:
 
 

总的来说,
就是根据样本的各个特征的值,进行判断,
一直到达叶子,根据叶子类别确定样本是属于哪个类别。
  叶子节点不作判断,叶子节点只负责告诉我们,模型的预测结果是什么




   02. 实例讲解   


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


  问  题  


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



   代码实现   


利用sklearn中的决策树函数,编写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]



    结果解读    


结果中共两部分,
第一部分是训练好的模型结构
第二部分是预测的结果          
1、模型结构
程序输出的是节点编号型表述
 
 

它代表的是以下的决策树:

   

 
2、模型预测结果
应用上面训练好的决策树,
对 样本【花萼长度,花萼宽度,花瓣长度,花瓣宽度】 = 【5.1 ,3.5,1.4 ,0.2】进行预测
得到了类别预测结果:0(山鸢尾)
 预测的具体流程如下: 
 





 End 




联系老饼