sklearn 决策树例子_决策树的原理、推导、Python实现和Sklearn可视化

本文深入浅出地介绍了决策树的基础知识,包括最优码、信息熵、分类与回归任务。详细讲解了CART、ID3、C4.5决策树的原理,并通过Python实现和可视化进行示例。最后总结了决策树的优缺点、与其他模型的对比以及其演化到GBDT、XGBoost的过程。
摘要由CSDN通过智能技术生成

27852f8aa3199dc7e82cd1c0e205e842.png

决策树(Decision Tree,DT),是树模型系列的根基模型。后续的随机森林(RF)、提升树(Boosting Tree)、梯度提升树(GBDT)、XGBoost都是在其基础上演化而来。

决策树及其演化模型(RF、GBDT、XGBoost)在数据挖掘、推荐系统、金融风控、计算广告、智能营销等领域得到广泛应用,是机器学习最基础模型之一,应该必须掌握。

本文以PPT的形式,首先回顾最优码、信息熵等决策树背后的数学逻辑(概率论、信息论);接着,介绍ID3树、C4.5树,CART树的原理;然后,介绍使用Sklearn实现ID3树、C4.5树,CART树的可视化;最后,对决策树优缺点、对比、演化进行总结。本文主要目录如下:

一、决策树基础
1、最优码
2、信息熵
3、分类、回归 二、决策树原理
1、决策树原理
2、CART决策树
3、ID3决策树
4、C4.5决策树 三、决策树可视化
1、ID3分类树可视化
2、CART分类树可视化
3、CART回归树可视化 四、决策树总结
1、决策树的优缺点
2、决策树 VS 线性回归
3、决策树的演化

直接上PPT。

940de4d1b14a8ca196ea9e36ad937a31.png
决策树的原理、推导、Python实现和Sklearn可视化

一、决策树基础

072402a1ba56727a1492b4dc9bf35f21.png
决策树基础的目录

1、最优码

信息熵的公式离不开Kraft不等式定理、最优码。

所以首先要搞清楚:什么是Kraft不等式定理?什么是最优码?

2fb032d9cb972e9bc2dd1db454e903d9.png
什么是最优码?

2、信息熵

什么是熵?什么是信息熵?

af83be8d43e7e356049970df0bd98fe2.png
什么是熵?什么是信息熵?

3、分类、回归

机器学习世界两个基本任务:分类任务、回归任务。

cbb7b21798e840d3966087a5fdc2287e.png
分类、回归

二、决策树原理

fd0aaf393be8312dc3535b3e5803b85e.png
决策树原理的目录

1、决策树原理

什么是决策树?

用一系列分支语句表示的模型。

a3d856dcb374ffefa736f381972c4d9f.png
什么是决策树?

所以决策树的本质是:分支语句。

2abf47ec332b9a9cadf85ca92c6e158b.png
决策树的本质是:分支语句

决策树有一个很强的假设:信息是可分的,否则无法进行特征分支。

f736022b8bab180839caffe3266d2844.png
决策树的假设:信息是可分的

2、CART决策树

什么是分类与回归树(Classification and regression tree,CART)?

4df7c3ce60becd39e53615dafbd9a23f.png
CART决策树

CART回归树算法如下:

0adea2631c0c0e478250d2ba484d3971.png
CART回归树算法

举个CART回归树的例子如下:

a1f9bd2e987e32ffcd5622e131b6d8e2.png
RT回归树

例1的CART回归树的第1次切分、第2次切分:

e03558e39df58330b858d7303f3076b9.png
CART回归树的第1次切分、第2次切分

例1的CART回归树的第3次切分、第4次切分:

c8fecedf04fa2fd40fd8efd658a27ccb.png
CART回归树的第3次切分、第4次切分

例1的第5次切分,得到最终CART回归树:

012337cd5576c89b3bcecd2caa34e88e.png
第5次切分,得到最终CART回归树

例1的CART回归树的可视化如下:

643fd2ac25d3219b23ba87a0879756f7.png
例1的CART回归树的可视化

例1的CART回归树的Python实现如下:

7bf95f0f34d4feba8805b7393b182e96.png
例1的CART回归树的Python实现

例1的CART回归树的Python实现代码如下:

"""
@author: 刘启林
@des:基于 sklearn 实现 CART 回归树的可视化
"""
import numpy as np
from sklearn.tree import DecisionTreeRegressor

X = np.arange(1, 11).reshape(-1, 1)
y = np.array([5.56, 5.70, 5.91, 6.40, 6.80, 7.05, 8.90, 8.70, 9.00, 9.05])

tree = DecisionTreeRegressor(max_depth=4).fit(X, y)
# import os     
# os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'

from sklearn.externals.six import StringIO  
from IPython.display import Image  
from sklearn.tree import export_graphviz
import pydotplus

dot_data = export_graphviz(tree, out_file=None,  
                filled=True, rounded=True,
                special_characters=True,
                precision=2)

graph = pydotplus.graph_from_dot_data(dot_data)  
Image(graph.create_png())

3、ID3决策树

ID3的特征选择标准:信息增益。

cd8576c7a0391749e5d97346c5271ee0.png
ID3决策树

4、C4.5决策树

a19d6d42be3bc576c14d55b47bd42d8d.png
C4.5决策树

三、决策树可视化

e7add047fd17474c0edefc457ea83000.png
决策树可视化的目录

1、ID3分类树可视化

574eff3089a01881b94bd46c07e0d087.png
ID3分类树可视化

ID3分类树可视化代码如下:

"""
@author: 刘启林
@des:基于Sklearn的ID3分类树可视化
"""
import pandas as pd
import sklearn.datasets as datasets
from sklearn.tree import DecisionTreeClassifier
 
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns = iris.feature_names)
y = iris.target


# ID3分类树,信息增益特征选择
dtree = DecisionTreeClassifier(criterion='entropy', max_depth=3).fit(df, y)
 
from sklearn.externals.six import StringIO
from IPython.display import Image
from sklearn.tree import export_graphviz
import pydotplus

dot_data = StringIO()
export_graphviz(dtree, out_file = dot_data, filled = True, rounded = True, 
                special_characters = True, precision=2)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())

2、CART分类树可视化

cdabe9a9f4b5368d4edddc331545009c.png
CART分类树可视化

CART分类树可视化的代码如下:

"""
@author: 刘启林
@des:基于Sklearn的CART分类树可视化
"""
import pandas as pd
import sklearn.datasets as datasets
from sklearn.tree import DecisionTreeClassifier
 
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns = iris.feature_names)
y = iris.target

# CART分类树,基尼系数特征选择
dtree = DecisionTreeClassifier(criterion='gini').fit(df, y)
 
from sklearn.externals.six import StringIO
from IPython.display import Image
from sklearn.tree import export_graphviz
import pydotplus

dot_data = StringIO()
export_graphviz(dtree, out_file = dot_data, filled = True, rounded = True, 
                special_characters = True, precision=2)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())

3、CART回归树可视化

033ed7a1597420578b04c898e589eb8b.png
CART回归树可视化

CART回归树可视化的代码如下:

"""
@author: 刘启林
@des:基于 sklearn 实现 CART 回归树的可视化
"""
import numpy as np
from sklearn.tree import DecisionTreeRegressor

X = np.arange(1, 11).reshape(-1, 1)
y = np.array([5.56, 5.70, 5.91, 6.40, 6.80, 7.05, 8.90, 8.70, 9.00, 9.05])

tree = DecisionTreeRegressor(max_depth=4).fit(X, y)

from sklearn.externals.six import StringIO  
from IPython.display import Image  
from sklearn.tree import export_graphviz
import pydotplus

dot_data = export_graphviz(tree, out_file=None,  
                filled=True, rounded=True,
                special_characters=True,
                precision=2)

graph = pydotplus.graph_from_dot_data(dot_data)  
Image(graph.create_png())

四、决策树总结

91422ac6adf684fec19facebf80b033b.png
决策树总结的目录

1、决策树的优缺点

c973ffa42fff0cae483eda052b697cf6.png
决策树的优缺点

2、决策树 VS 线性回归

4bd574cce88ef9a45d0454496b0ce8ed.png
决策树 VS 线性回归

3、决策树的演化

d48ad1ba99fbe2ce1b5184d5bdd84974.png
决策树的演化

决策树演化发展成GBDT、XGBoost模型,在工业界有很广泛的应用。

更多GBDT的内容,可参考:

刘启林:GBDT的原理、公式推导、Python实现、可视化和应用​zhuanlan.zhihu.com
05f93007ae35cd458c2a83546843be5d.png

更多XGBoost的内容,可参考:

刘启林:XGBoost的原理、公式推导、Python实现和应用​zhuanlan.zhihu.com
66c563ec485e43300520420ab3274722.png

结束语:

决策树的数学原理清晰,可解释强,运行快,在数据挖掘、推荐系统、金融风控、计算广告、智能营销等领域得到广泛应用,你值得掌握。

参考文献:

1、都有为等,物理学大词典[M],科学出版社,2017.12

2、Thomas M. Cover,信息论基础[M],机械工业出版社,2007.11

3、https://developers.google.com/machine-learning/glossary

4、李航, 统计学习方法(第2版)[M], 清华大学出版社, 2019.05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值