第三课:决策树
决策树
【原理】CART决策树-介绍
作者 : 老饼 日期 : 2022-06-26 03:39:42 更新 : 2022-09-27 17:10:44
本站原创文章,转载请说明来自《老饼讲解-机器学习》ml.bbbdata.com


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

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



  01. CART决策树模型结构 


  模型结构  


CART分类树是一棵二叉树
 



   模型表达  


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


  模型运作原理  


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




  02、实例讲解  



  问  题  


我们sk-learn中的iris(鸢尾花)数据,训练一棵决策树,
通过鸢尾花的特征来预测鸢尾花的类别。


   数  据   


sk-learn中的iris数据共包含150条鸢尾花样本数据

每条样本包括四个鸢尾花特征和鸢尾花的类别
特征:花萼长度sepal length、花萼宽度sepal width 、花瓣长度petal length、花瓣宽度petal width
类别:山鸢尾,杂色鸢尾,弗吉尼亚鸢尾。



   代 码   


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 




联系小饼