【模型】5分钟了解决策树是一个什么模型

本站原创文章,转载请说明来自《老饼讲解-机器学习》[www.bbbdata.com(https://www.bbbdata.com/ml)

决策树模型是机器学习中不可不学的模型之一,本文简单直接地快速讲解决策树是什么,如何实现。

一、决策树模型

决策树一般包括ID3决策树,C4.5决策树与CART决策树。

ID3与C4.5决策树是基于熵的概念构建的决策树,现在已经用得相对较少,目前用得较多的是CART决策树。

CART决策树全称为Classification And Regression Tree,即分类与回归树。因此CART决策树既可以用来做分类,又可以用来做回归。

1.1.ID3决策树

ID3决策树是最早提出的决策树,它的变量是枚举变量,然后根据枚举值不断分枝决策,最终到达的叶子节点就是模型的预测结果。ID3决策树在构建时使用信息熵的来确定选择哪个变量进行构建。

1.2. CART决策树

CART决策树模型是一棵二叉树,如下:

CART决策树模型是一棵二叉树,会根据变量不断地进行判断,最后到达叶子节点时,节点上的类别(做回归时则是值)就是模型的预测结果。CART决策树在构建时一般使用GINI系数来确定选择哪个变量来构建。

CART决策树的详细构建流程可参考:【原理】CART决策树构建过程详细讲解

1.3. C4.5决策树

C4.5决策树可以认为是ID3决策树到CART决策树的过渡,即支持枚举变量,又支持连续变量。C4.5决策树使用信息增益比来确定选择哪个变量进行构建。

二、如何在python中构建一棵决策树

2.1. 数据说明

不妨以鸢尾花数据为例(即sk-learn中的iris数据)

鸢尾花数据共有150个样本,包括鸢尾花的四个特征与鸢尾花的类别,具体数据如下:

花萼长度 sepal length (cm) 、花萼宽度 sepal width (cm)

花瓣长度 petal length (cm) 、花瓣宽度 petal width (cm)

山鸢尾:0,杂色鸢尾:1,弗吉尼亚鸢尾:2

2.2. python中构建一棵CART决策树

下面使用python的sklearn包来构建一棵CART决策树,具体代码如下:

python 复制代码
from sklearn.datasets import load_iris
from sklearn import tree
#----------------数据准备--------------------
iris = load_iris()                                 # 加载数据
#---------------模型训练---------------------
clf = tree.DecisionTreeClassifier()                # sk-learn的决策树模型
clf = clf.fit(iris.data, iris.target)              # 用数据训练树模型构建()
r = tree.export_text(clf, feature_names=iris['feature_names'])

#---------------模型预测结果------------------
text_x = iris.data[[0,1,50,51,100,101], :]
pred_target_prob = clf.predict_proba(text_x)        # 预测类别概率
pred_target = clf.predict(text_x)                   # 预测类别

#---------------打印结果---------------------
print("\n===模型======")
print(r)
print("\n===测试数据:=====")
print(text_x)
print("\n===预测所属类别概率:=====")
print(pred_target_prob)
print("\n===预测所属类别:======")
print(pred_target)

运行结果如下:

构建好的决策树模型:

预测结果:

可以看到模型的预测结果是正确的。

三、如何将决策树可视化

要绘画出决策树的模型结构,可以使用graphviz 包,下面是一个代码示例与实现效果。

python 复制代码
from sklearn.datasets import load_iris
from sklearn import tree
import graphviz 
#----------------数据准备----------------------------
iris = load_iris()                          # 加载数据
#---------------模型训练----------------------------------
clf = tree.DecisionTreeClassifier()         # sk-learn的决策树模型
clf = clf.fit(iris.data, iris.target)       # 用数据训练树模型构建()
r = tree.export_text(clf, feature_names=iris['feature_names'])
dot_data = tree.export_graphviz(clf, out_file=None, 
                     feature_names=iris.feature_names,  
                     class_names=iris.target_names,  
                      filled=True, rounded=True,  
                      special_characters=True)  
graph = graphviz.Source(dot_data)  
graph                                    # 显示图形。(如果没显示,则需要独立运行这一句)
#graph.render("iris")                    # 将图形保存为iris.pdf文件。
#graph.view()                            # 直接打开pdf文件展示

运行后就可以打印出决策树的模型结构,如下:

上面的图比较丑,是graphviz 的默认图案。实际上graphviz 是非常强大的,可以按自己的喜爱设置得更加好看。

特别说明的是,软件中一般都只实现CART决策树, 如果要实现ID3或C4.5决策树,就需要自己仔细地去按原理重新实现了。


相关链接:

《老饼讲解-机器学习》:老饼讲解-机器学习教程-通俗易懂

《老饼讲解-神经网络》:老饼讲解-matlab神经网络-通俗易懂

《老饼讲解-神经网络》:老饼讲解-深度学习-通俗易懂

相关推荐
糕冷小美n1 小时前
jeecgbootvue2重新整理数组数据或者添加合并数组并遍历背景图片或者背景颜色
数据结构·算法
CV万花筒1 小时前
点云欧式聚类,条件欧式聚类算法原理及推导
算法·数据挖掘·聚类
ZZZ_O^O2 小时前
【贪心算法-第三弹——Leetcode-179.最大数】
c++·学习·算法·leetcode·贪心算法
Matlab程序猿小助手2 小时前
【MATLAB源码-第228期】基于matlab的鼠群优化算法(RSO)无人机三维路径规划,输出做短路径图和适应度曲线.
开发语言·算法·matlab·机器人·无人机
z千鑫3 小时前
【C/C++】深入解析 Stack 与 Queue 数据结构(详解):实现原理、应用场景与性能优化
c语言·开发语言·数据结构·c++·深度学习·算法·排序算法
Y编程小白3 小时前
Leecode经典题2--移除元素
数据结构·算法·leetcode
Wils0nEdwards3 小时前
Leetcode 颠倒二进制位
算法·leetcode·职场和发展
醇醛酸醚酮酯3 小时前
两数之和--leetcode100题
数据结构·算法·leetcode
xiaoshiguang33 小时前
LeetCode:19.删除链表倒数第N个节点
算法·leetcode·链表
m0_675988233 小时前
Leetcode3208:交替组 II
c语言·数据结构·算法·leetcode