-- 基本概念

决策树是一种非常常见的机器学习算法,采用的是自顶向下的递归方法,利用信息熵为基本度量构造一颗熵值下降最快的树,理想情况下到叶子节点的熵值为零,对应每个叶子节点的实例都属于同一类。叶子节点对应于决策结果,节点则对应一个属性测试。相比于线性模型,树形模型更接近于人的思维方式,可以产生可视化的分类规则,产生的模型具有比较强的可解释性。

决策树的节点,也就是属性是怎么划分的呢,先要了解几个基本概念:

信息熵:度量样本集合纯度最常用的指标,当前数据集中第k类样本所占比例为Pk,计算公式如下,Ent(D)越小,则数据纯度越高。

信息增益:计算公式如下,a是离散属性,有V个可能的取值,|Dv|/|D|是第V个属性的权重。信息增益越大,意味着使用属性a来进行划分所获得的数据纯度越大。需要注意的是,对于某一类属性,如果可取值数目较多时,信息增益会越大。

信息增益率:与信息增益相反,属性的可取数目较少时,信息增益率更大,其中IV(a)称为属性a的固有值,属性a的可能数目越多(V越大),则IV(a)越大,则信息增益率则越小。

基尼指数:反映了从数据集中随机抽取两个样本,其类别标记不一致的概率,越小表示数据纯度越高。
      

-- 算法介绍

信息增益、增益率、基尼指数都是决策树划分属性的纯度度量方法,根据不同的方法,就衍生出3种不同的决策树算法:

1、ID3算法:以信息增益为准则来选择划分属性,选择划分后信息增益最大的属性进行划分,这种算法对属性可取数目较多时有偏好。

2、C4.5算法:选择具有最大增益率的属性作为划分属性,具体做法是先从候选划分属性中找到信息增益高于平均水平的属性,再从中选择增益率最高的作为划分属性。

3、CART算法:选择划分后基尼指数最小的属性最为最优划分属性。

几种算法的比较:

ID3属于比较早期的决策树算法,倾向于选择属性划分比较多的作为分裂属性,可能会导致生成一个水平节点庞大但深度浅的树;输入变量必须是离散值,并且无法处理空值。

C4.5对ID3做了一些改进,结合信息增益和增益率来选择分裂属性,避免了ID3中倾向于选择取值较多属性的问题,并且可以处理连续值。

CART既可以创建分类树,也可以创建回归树。分类树中,CART树是一个二叉树,所以不适合用于离散属性取值大于2的情况,对于连续值的处理和C4.5算法基本相同。

-- 决策树生成示例

这个例子是西瓜书上的,比较好理解,有一份描述西瓜是好瓜还是坏瓜的数据集,共有17个样本,每条数据有6个属性,数据集如下:

(1)以ID3算法为例生成决策树,先计算各个属性划分后的信息增益:

(2)发现“纹理”属性的信息增益最大,则选择它作为分裂属性,得到下列图:

(3)接着对每个分支再进行分裂,以第一个分支为例,对属性继续计算信息增益,发现“根蒂”、“脐部”、“触感”3个属性的信息增益一样,可以随机选择一个继续分裂。

(4)图中{“根蒂=蜷缩”}这个节点已经全部是好瓜类型,则不需要继续分裂,递归返回

(5)针对每一个节点递归应用上面的分裂方法,最后得到一个完整决策树:

-- 剪枝处理

决策树分支过多,太庞大的话容易导致过拟合,可以通过“剪枝(pruning)”的方法来降低过拟合风险。剪枝的基本策略分为“预剪枝”和“后剪枝”。

预剪枝:在决策树生成过程中,对每个节点在分裂前进行估计,若当前节点的划分不能带来决策树泛化性能提升,则停止分裂,并将当前节点标记为叶节点并返回。下图是针对西瓜数据集的预剪枝处理,可以发现比原决策树精简了很多。

后剪枝:先通过算法生成一棵完整的决策树,然后自底向上的对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树泛化能力的提升,则将该子树替换为叶节点。下图是针对西瓜数据集的后剪枝处理。

从上面预剪枝和后剪枝的例子看,一般情况下后剪枝比预剪枝保留了更多的分支,后剪枝的泛化性能一般更优,欠拟合风险更小;但由于后剪枝是自底向上对各节点进行考察,其训练时间及开销比预剪枝更大。

-- 特征连续值处理

特征属性如果是连续值的话,可取值数目是无限的,不能按照离散值那样通过可取值数目来进行节点划分,最常用的办法是二分法。

数据集D和连续值属性a,假设a在D中出现了n个不同的取值,先把这些值从小到大排序,可以考察包含n-1个候选划分点集合:

即把每两个取值点的中位点作为候选划分点,然后计算每个划分点之后的信息增益,选取信息增益最大的划分点进行分裂,也就是需找使Gain(D,a,t)最大的划分点。

-- sklearn决策树可视化

sklearn其实已经将模型封装得非常好,上面提到的很多细节都已经被屏蔽了,通过模型参数可以对其进行调节,以鸢尾花数据集为例,学习使用下决策树模型。

"criterion"参数填写“entropy”表示采用C4.5算法,“gini”表示采用CART算法

-Python 代码

from sklearn import datasets
from sklearn.cross_validation import train_test_split
from sklearn.metrics import accuracy_score
from sklearn import tree
from sklearn.externals.six import StringIO
import pydotplusdata_iris = datasets.load_iris()
x, y = data_iris.data, data_iris.target
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3,random_state = 0)# 通过C4.5算法决策树模型进行预测
model = tree.DecisionTreeClassifier(criterion="entropy")
model.fit(x_train, y_train)
y_pred = model.predict(x_test)
print(accuracy_score(y_test, y_pred))# 决策树可视化
dot_data = StringIO()
tree.export_graphviz(model,out_file = dot_data,feature_names=data_iris.feature_names,class_names=data_iris.target_names,filled=True,rounded=True,special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("Tree.pdf")

生成的决策树可视化图如下:

这个决策树可视化图信息比较完整,以顶层的3个节点为例看看决策树是怎么分生成的:

节点1(根节点):一共有105个样本(samples=105),3种鸢尾花类别的分布情况value=[34,32,39];通过二分法找出划分点是petal width <=0.75,,信息增益为1.58;如果在此节点停止分裂,则在这个节点上的数据都会被判定为"virginica"类别(class=virginica,以当前数目最多的类别为准)。

节点2:petal width<=0.75的样本都被分到这个节点,样本数为34,信息增益为0,说明该节点数据已经“纯净”,value=[34,0,0],该数据集所有数据都属于类别“setosa”,停止分裂。

节点3:petal width>0.75的样本被分到这个节点,样本数为71;通过二分法找到的划分点是 petal length<=4.95,信息增益为0.993,如果在此节点停止分裂则在此节点的数据都被判定为“virginica”类别。

节点n:...... 自顶向下,完成整个决策树的分裂。

通过完整的决策树可以发现,所有的叶子节点的数据都是“纯净”的,但在很多时候,特别是数据量大,类别较多的情况下,如果要做到每个叶子节点数据都“纯净”的话,整个决策树非常复杂,开销太大,所以一般会对数据“纯净”相关的参数例如信息增益、基尼系数等做限制,在小于某个阈值之后就不再分裂了,在DecisionTreeClassifier分类器中是通过"min_impurity_split"参数限制的。

作者:华为云专家周捷

机器学习笔记(五)---- 决策树相关推荐

  1. 【机器学习笔记】——决策树(Decision Tree)

    目 录 1 决策树 1.1 特征选择 1.1.1 基础定义 1.1.2 最优特征标准 1.2 树的生成 1.2.1 ID3 算法 1.2.2 C4.5 算法 1.2.2.1 如果特征是连续的 1.2. ...

  2. python数据分析/机器学习 笔记之决策树(泰坦尼克号旅客生存预测)

    最近在学习用python数据分析,不可避免的接触到了机器学习的一些算法,所以在这里简单整理一些学习的笔记和心得与大家分享! 首先机器学习分为:监督学习和非监督学习,前者有参照物,后者为参照物:主要分为 ...

  3. 机器学习笔记II: 决策树

    决策树的介绍 决策树是一种常见的分类模型,在金融分控.医疗辅助诊断等诸多行业具有较为广泛的应用.决策树的核心思想是基于树结构对数据进行划分,这种思想是人类处理问题时的本能方法.例如在婚恋市场中,女方通 ...

  4. 机器学习笔记16——决策树剪枝算法原理及python实现案例

    决策树剪枝算法 引言 1.算法目的 2.算法基本思路: 3.决策树损失函数 4.剪枝类型: 4.1 预剪枝 4.2 后剪枝 4.3 两种剪枝策略对比 引言 \quad \quad在决策树.ID3.C4 ...

  5. 机器学习笔记2——决策树

    文章目录 2.1简介 2.2 信息论基础 2.3 特征选择 2.4 ID3与C4.5 2.5 决策树的剪枝 2.6 CART 2.6.1 CART分类树 2.6.2 CART回归树 2.6.3 CAR ...

  6. 机器学习笔记4-sklearn决策树(上)

    决策树两大核心 如何划分数据集:何时停止划分数据集 一.决策树构造 特征选择,决策树生成,决策树修剪 决策树简介 决策树由结点(node)和有向边(directed edged)组成.结点有两种类型: ...

  7. 机器学习笔记(五)神经网络

    5.神经网络 5.1神经元模型 神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应.对这句话的理解,简单提要下,主角是简单单元(输入单 ...

  8. 机器学习笔记(四)决策树

    4.决策树 4.1基本流程 决策树(decisiontree)基于树结构进行决策,符合人的思维机制,是一类常见的机器学习方法.一般的,一棵决策树包含一个根结点.若干个内部结点和若干个叶结点.叶结点就对 ...

  9. 机器学习笔记(五)回归模型

    1.线性回归模型 1.广义线性模型 也就是x和y的线性组合也就是: y = w1x1+w2x2-+wnxn+b coef_是系数矩阵w =[w1,w2-wn],intercept_就是截距 2.普通最 ...

  10. 斯坦福2014机器学习笔记五----正则化

    版权声明:本文为博主原创文章,转载请指明转载地址 一.纲要 欠拟合和过拟合 代价函数正则化 正则化线性回归 正则化逻辑回归 二.内容详述 1.欠拟合和过拟合 欠拟合,也叫高偏差,就是没有很好的拟合数据 ...

最新文章

  1. 关于asp.net mvc中的cookie的对象传递以及加密解密
  2. linux安装mysql 5.7_linux安装mysql5.7
  3. js将docx转换为html,js 将word转换Html
  4. ansible基本模块-shell
  5. spark 设置主类_最近Kafka这么火,聊一聊Kafka:Kafka与Spark的集成
  6. Google+再曝漏洞!5250万用户信息恐泄露
  7. 用Python解决简单的水果分类问题(二)
  8. python中fac函数_python系列-基础
  9. 折纸机器人的步骤图解_简单折纸:折叠小吉普车(步骤图解)
  10. c51单片机学习笔记-LED闪烁编程
  11. lg空调代码大全解决_LG空调故障代码大全-kg空调维修-lg空调维修手册
  12. 苹果手机换电池对手机有影响吗_网上预约手机上门换电池可靠吗?官方回应:售后也这么换!...
  13. VMware 8安装Mac OS X 10.7 Lion
  14. python自动进直播_Python实现自动录制虎牙直播
  15. 基于SSM的医院管理系统
  16. 友谊的小船,说翻就翻
  17. Python解二元一次方程,没想到如此简单
  18. Win10双网卡不双待攻略
  19. windows系统C盘“已用空间”不断增大
  20. HTML中的标记-遁地龙卷风

热门文章

  1. 二十一.激光、视觉和惯导LVIO-SLAM框架学习之相机与雷达外参标定(1)
  2. mysql 更改一行_mysql怎么修改数据表里一行数据?
  3. cimoc 最新版_Cimoc漫画最新版
  4. C#调用SQL Server参数过程传参
  5. 谷歌眼镜Mirror app开发之简单新闻浏览页面
  6. Sdut 2165 Crack Mathmen(数论)(山东省ACM第二届省赛E 题)
  7. 小谈EasyUI中的tree用法
  8. 在Silverlight 2应用程序中集成Virtual Earth
  9. 设计一种网络分播软件
  10. 贪心——无重叠区间(Leetcode 435)