目录
[🍔 案例剖析](#🍔 案例剖析)
[🍔 通过sklearn实现决策树分类并进一步认识决策树](#🍔 通过sklearn实现决策树分类并进一步认识决策树)
[🍔 基于规则构建决策树](#🍔 基于规则构建决策树)
[🍔 构建决策树的三个步骤](#🍔 构建决策树的三个步骤)
[🍔 小结](#🍔 小结)
学习目标
🍀 了解决策树算法的基本思想
🍀 了解Sklearn的决策树API
🍀 知道构建决策树的三个步骤
🍔 案例剖析
有的同学可能在大学学习过一门课程叫《数据结构》,里面有一个重要的结构就是"树",和现实生活中的树一样,树的主要由四部分树根、树干、树枝、树叶组成,今天的决策树也是一种树结构,大家学习的时候可以想象现实生活中的树来来理解。
决策树算法是一种监督学习算法,英文是Decision tree。
决策树思想的来源非常朴素,试想每个人的大脑都有类似于if-else这样的逻辑判断,这其中的if表示的是条件,if之后的then就是一种选择或决策。程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。
比如:你母亲要给你介绍男朋友,是这么来对话的:
女儿:多大年纪了?
母亲:26。
女儿:长的帅不帅?
母亲:挺帅的。
女儿:收入高不?
母亲:不算很高,中等情况。
女儿:是公务员不?
母亲:是,在税务局上班呢。
女儿:那好,我去见见。
于是你在脑袋里面就有了下面这张图:
作为女孩的你在决策过程就是典型的分类树决策。相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见。
🍔 通过sklearn实现决策树分类并进一步认识决策树
基于鸢尾花数据绘制图像
python
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:,2:]
y = iris.target
plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])
plt.scatter(X[y==2,0],X[y==2,1])
plt.show()
训练决策树模型
python
from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier(max_depth=2,criterion="entropy")
tree.fit(X,y)
依据模型绘制决策树的决策边界
python
#找到模型的决策边界,并绘制图像(此方法所用到的api不需要掌握,能够调用就行)
def plot_decision_boundary(model,axis):
x0,x1 = np.meshgrid(
np.linspace(axis[0],axis[1],int((axis[1]-axis[0])*100)).reshape(-1,1),
np.linspace(axis[2],axis[3],int((axis[3]-axis[2])*100)).reshape(-1,1)
)
X_new = np.c_[x0.ravel(),x1.ravel()]
y_predict = model.predict(X_new)
zz = y_predict.reshape(x0.shape)
from matplotlib.colors import ListedColormap
custom_map = ListedColormap(["#EF9A9A","#FFF59D","#90CAF9"])
plt.contourf(x0,x1,zz,linewidth=5,cmap=custom_map)
plot_decision_boundary(tree,axis=[0.5,7.5,0,3])
plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])
plt.scatter(X[y==2,0],X[y==2,1])
plt.show()
树模型可视化
python
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt
plot_tree(tree,filled=True)
plt.show()
从上面的可视化图形中看出
X[1] <=0.8 作为第一次分割的依据,满足条件的所有样本均为统一类别
X[1]>0.8的,依据 X[1]<=0.75 为划分依据
由于设置了树的最大深度为2,第二层的两个叶子节点没有完全区分开
🍔 基于规则构建决策树
在商业的数据挖掘中,不同的消费行为顾客特征的提炼和表述极为重要。
我们模拟了部分顾客及其消费行为数据,包括如下特征:
用户是否购买某种产品(0购买,1不购买)
年龄(青年0,中年1,老年2)
收入(高0,中1,低2)
学生(是1,否0)
信誉(良0,优1)。
我们收集了如表1-1的部分用户购买数据,建立了一张统一的调查表,统计几个月的销售数据。我们要对下表中潜在的客户进行分析,并根据得到的一些特征用于销售人员制定销售策略等工作。
总结为两个问题:
(1) 如何对客户进行分类?
(2) 如何根据分类的依据,给出销售人员的指导意见?
通过上述分析,即可解决问题:
(1)如何对客户进行分类?
答:根据数据集中收集的用户的特征信息
(2)如何根据分类依据,给出销售指导意见呢?
答:给出这样的销售意见:
中年人通常会无条件购买
青年人中如果是学生一般会购买
老年人中信誉好的常常会购买
下面我们思考,如何得到这样的分析结果信息?我们可以通过基于规则建树实现。
从定性的角度画出决策树:
从定量的角度画出决策树:
为什么需要从定量角度来分析呢?
答:这样会更精确的分析用户的特征信息,给出销售人员更准确的数据信息。
根据该树可以解决问题:
(1)如何对客户进行分类?
答:根据数据集中收集的用户的特征信息
(2)如何根据分类依据,给出销售指导意见呢?
答:给出这样的销售意见:
中年人通常会无条件购买
青年人中如果是学生一般会购买
老年人中信誉好的常常会购买
-
以上就是基于规则建树,接下来我们总结构建决策树三要素。
-
同时思考,上述建树过程有哪些地方可以优化?
接下来总结出构建决策树三要素
🍔 构建决策树的三个步骤
🐼 通过上述总结分析,归纳总结构建决策树包括三个步骤:
特征选择:选取有较强分类能力的特征
决策树生成
决策树剪枝
🍔 小结
🍬 决策树算法:
是非参数学习算法
可以解决分类(多分类)问题
可以解决回归问题:落在叶子节点的数据的平均值作为回归的结果
🍬 决策树API:
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import plot_tree
🍬 构建决策树的三个步骤:
特征选择:选取有较强分类能力的特征
决策树生成
决策树剪枝