决策树模型回归可视化分析_机器学习入门系列之决策树

e0cf79c28275d1b66d2bb244deb31585.gif

决策树是什么?

决策树是一种常见的机器学习算法,它的思想十分朴素,类似于我们平时利用选择做决策的过程。类似流程图的结构,每个节点都可以进行判断,然后进入不同得决策子树中,直至到达叶子节点。

比如在相亲中,我们要判断是否要见对方,通常会根据几个衡量标准来做出决策,生成的决策树图如下所示:

de469a147375cf2635da926d36e0740e.png

通过上面例子,我们可以得出两个比较核心的问题:

1. 我们应该选择什么作为划分特征,即年龄、长相、收入等

2. 我们应该选择什么数值作为划分标准,即年龄大于30,小于30等

所以我们应该如何找到这样的特征及标准,可以让我们的决策树可以进行最优的划分?

决策树的最优划分特征

信息熵

熵是热力学中的概念,表示混乱程度。熵越大,热力系统中粒子无规则的运动越剧烈;熵越小,粒子越趋近于静止的状态。
引入到信息论中,信息熵表示随机变量的不确定度,即对于一组数据来说,越随机,不确定性就越高,信息熵越大;不确定性越低,信息熵就越小。
熵的公式如下: 2991fb9bfccb071629b9f8ca5fa094f0.png Pi 是指每一类信息所占的比例。 假设我们有三组数据,每一组数据分为三类,占的比例分别为: dd0d127f77205cb51ae592b60c12bd93.png 对上面的数据根据公式分别求取信息熵: 9c7f6f41e9b778f2f3e2457dbf464669.png 我们发现第一组数据的信息熵最大,即当每一类数据出现的概率都相等时,此刻数据 是最不确定的。而第三组数据信息熵最小,即数据全都属于第一类的,数据是确定的。

基尼指数

基尼指数(Gini),也被称为基尼不纯度,表示在样本集合中一个随机选中的样本被分错的概率。 Gini系数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,基尼指数集合越不纯。 数学公式为:基尼指数(基尼不纯度)= 样本被选中的概率 * 样本被分错的概率 假设有K个类,样本点属于第K类的概率为Pk,则概率分布的的基尼指数定义为: 16172a82b417087029b65404e9198f65.png 用上面的数据进行基尼指数计算 6353215d3282e64c3ac49d3211b5dfbd.png 我们得到的结论和信息熵的一样,即基尼指数越小,数据越稳定。 那么信息熵和基尼指数有什么区别呢? 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()
4429c881f5ae2dc596348add637b2f59.png
# 绘制决策边界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()
d7813d207d0bdb5043a7a1709bb5c1b9.png 这里设定决策树的参数 min_samples_split:是指对一个内部结点划分时,要求该结点上的最小样本数。此外Sklearn还提供了很多参数,可以根据之前提到的网格搜索方法进行参数调优。

决策树优缺点

优点

1. 决策树易于理解和解释,易提取出规则,便于可视化分析。 2. 可以同时处理标称型和数值型数据。 3. 天然支持多分类。 3. 比较适合处理有缺失属性的样本。 4. 能够处理不相关的特征。

缺点

1. 决策树容易发生过拟合,但是随机森林可以很大程度上减少过拟合。 2. 容易忽略数据集中属性的相互关联。 3. 决策树划分的决策边界都是与横平竖直的,对倾斜的数据不能够很好的划分。

总结

我们此次学习了决策树的基本概念、决策树中特征划分的原理,最后结合CART算法和Sklearn实现了决策树的划分。相信大家对决策树已经有了一定的了解,后面我们会看到决策树的更多应用,不要走开 590323381eeb06ab1e0f10219872448c.png  往期推荐  🔗 机器学习入门系列之KNN 机器学习入门系列之线性回归 机器学习入门系列之评价模型的好坏 机器学习入门系列之特征处理 机器学习入门系列之梯度下降 机器学习入门系列之PCA降维 机器学习入门系列之逻辑回归

6aa08d8badf4f6b75ace17ffd0fa05fd.png

2cf0eb1d4477091aba20de7e0f39b6c0.png

6bda7bcf5e6405104e3195daba7b4ba3.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值