
决策树是什么?
决策树是一种常见的机器学习算法,它的思想十分朴素,类似于我们平时利用选择做决策的过程。类似流程图的结构,每个节点都可以进行判断,然后进入不同得决策子树中,直至到达叶子节点。
比如在相亲中,我们要判断是否要见对方,通常会根据几个衡量标准来做出决策,生成的决策树图如下所示:

通过上面例子,我们可以得出两个比较核心的问题:
1. 我们应该选择什么作为划分特征,即年龄、长相、收入等
2. 我们应该选择什么数值作为划分标准,即年龄大于30,小于30等
所以我们应该如何找到这样的特征及标准,可以让我们的决策树可以进行最优的划分?
决策树的最优划分特征
信息熵
熵是热力学中的概念,表示混乱程度。熵越大,热力系统中粒子无规则的运动越剧烈;熵越小,粒子越趋近于静止的状态。引入到信息论中,信息熵表示随机变量的不确定度,即对于一组数据来说,越随机,不确定性就越高,信息熵越大;不确定性越低,信息熵就越小。
熵的公式如下:
Pi 是指每一类信息所占的比例。假设我们有三组数据,每一组数据分为三类,占的比例分别为:
对上面的数据根据公式分别求取信息熵:
我们发现第一组数据的信息熵最大,即当每一类数据出现的概率都相等时,此刻数据是最不确定的。而第三组数据信息熵最小,即数据全都属于第一类的,数据是确定的。基尼指数
基尼指数(Gini),也被称为基尼不纯度,表示在样本集合中一个随机选中的样本被分错的概率。Gini系数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,基尼指数集合越不纯。数学公式为:基尼指数(基尼不纯度)= 样本被选中的概率 * 样本被分错的概率假设有K个类,样本点属于第K类的概率为Pk,则概率分布的的基尼指数定义为:
用上面的数据进行基尼指数计算
我们得到的结论和信息熵的一样,即基尼指数越小,数据越稳定。那么信息熵和基尼指数有什么区别呢?1. 信息熵的计算比基尼系数稍慢2. Sklearn中默认为基尼指数3. 对于大多数二分类没有特别的效果优劣 如何划分决策树?
信息熵和基尼指数告诉了我们决策树的划分标准,那么我们该如何进行划分呢?于是有了一系列的决策树划分算法:CART、ID3、C4.5等。这里主要来说CART。CART算法是基于基尼指数来做分类任务的特征选择的。CART算法的一般流程:算法从根节点开始,用训练集递归建立CART分类树。输入:训练集D,基尼系数的阈值,样本个数阈值。输出:决策树T。1. 对于当前节点的数据集为D,如果样本个数小于阈值或没有特征,则返回决策子树,当前节点停止递归。2. 计算样本集D的基尼系数,如果基尼系数小于阈值,则返回决策树子树,当前节点停止递归。3. 计算当前节点现有的各个特征的各个特征值对数据集D的基尼系数。4. 在计算出来的各个特征的各个特征值对数据集D的基尼系数中,选择基尼系数最小的特征A和对应的特征值a。根据这个最优特征和最优特征值,把数据集划分成两部分D1和D2,同时建立当前节点的左右节点,左节点的数据集D为D1,右节点的数据集D为D2。5. 对左右的子节点递归的调用1-4步,生成决策树。Sklearn实现
import numpy as npimport matplotlib.pyplot as pltfrom sklearn import datasets# 加上0.25的噪音X,y = datasets.make_moons(noise=0.25,random_state=666)plt.scatter(X[y==0,0], X[y==0,1])plt.scatter(X[y==1,0], X[y==1,1])plt.show()
# 绘制决策边界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_cmap = ListedColormap(['#EF9A9A','#FFF59D','#90CAF9']) plt.contourf(x0, x1, zz, cmap=custom_cmap) # 生成决策树模型dt_clf = DecisionTreeClassifier(min_samples_split=10)# 拟合模型dt_clf.fit(X, y)# 绘制plot_decision_boundary(dt_clf, axis=[-1.5, 2.5, -1.0, 1.5])plt.scatter(X[y==0,0], X[y==0,1]) plt.scatter(X[y==1,0], X[y==1,1]) plt.show()
这里设定决策树的参数 min_samples_split:是指对一个内部结点划分时,要求该结点上的最小样本数。此外Sklearn还提供了很多参数,可以根据之前提到的网格搜索方法进行参数调优。决策树优缺点
优点
1. 决策树易于理解和解释,易提取出规则,便于可视化分析。2. 可以同时处理标称型和数值型数据。3. 天然支持多分类。3. 比较适合处理有缺失属性的样本。4. 能够处理不相关的特征。缺点
1. 决策树容易发生过拟合,但是随机森林可以很大程度上减少过拟合。2. 容易忽略数据集中属性的相互关联。3. 决策树划分的决策边界都是与横平竖直的,对倾斜的数据不能够很好的划分。总结
我们此次学习了决策树的基本概念、决策树中特征划分的原理,最后结合CART算法和Sklearn实现了决策树的划分。相信大家对决策树已经有了一定的了解,后面我们会看到决策树的更多应用,不要走开
往期推荐 🔗机器学习入门系列之KNN机器学习入门系列之线性回归机器学习入门系列之评价模型的好坏机器学习入门系列之特征处理机器学习入门系列之梯度下降机器学习入门系列之PCA降维机器学习入门系列之逻辑回归


本文介绍了决策树算法的基础概念,探讨了决策树特征划分的原理,包括信息熵与基尼指数的概念及其计算方法,并通过CART算法实例展示了如何使用Sklearn库实现决策树。
9789

被折叠的 条评论
为什么被折叠?



