ML——决策树模型
决策树模型
优点:高效简单、易于理解,可以处理不相关特征。
缺点:容易过拟合,训练集在特征上是完备的
决策树过程:特征选择、划分数据集、构建决策树、决策树剪枝
决策树选择最优的划分特征,将数据集按照最优划分特征的取值划分成不同的子集,然后依次对子集重复上述步骤,指导子集中数据都归属于同一个类别,或者没有特征可以再划分了。
特征选择通常有三种方法:
- ID3——信息信息
- C4.5——信息增益比
- CART——基尼指数
一、信息增益
首先信息论中熵表示随机变量不确定性度量,熵越大,不确定性越大。
熵的定义是:

其中pi表示随机变量(决策树中是类别变量label)的概率,通常用频率估计(下同)。所以说熵是随机变量的分布的熵。
条件熵(某个特征下的加权熵,某个特征下熵的期望)定义是:

其中pi表示X=xi的概率,
表示X=xi条件下,随机变量Y的熵。可以看做是特征X不同取值下,Y的熵的期望(熵的加权求和)。所以条件熵是某个特征条件下熵。
信息增益的定义就是随机变量本来的熵减去在某个特征下的条件熵:
IG(Y,X) = H(Y) - H(Y|X)
这些概念对应于数据集中如下所示:
根据能力、学历、性别等来预测一个人的收入情况

收入这个随机变量按取值高和低本来就有一个熵=-4.0/7*log(4.0/7)-3.0/7*log(3.0/7)=0.6829

在性别这个随机变量的不同取值下,收入的条件熵=(性别为男的比例)*(性别男中收入的熵)+(性别为女的比例)*(性别女中收入的熵)
=(05.0/7)*(-3.0/5*log(3.0/5)-2.0/5*log(2.0/5)) + (2.0/7)*(-1.0/2*log(1.0/2)-1.0/2*log(1.0/2))
=0.6788
所以在性别这个特征下,收入的信息增益为=0.6829-0.6788=0.0041,可以认为性别这个特征对收入高低的确定影响不大,或者关系不大。信息增益同时也度量了收入在性别上基本上不存在倾斜分布,一个2/3,一个1/2。
以此类推,可以计算每一个特征下的信息增益,特征的信息增益越大说明对收入的区分度越大。所以算法选择信息增益最大的特征作为当前的最优特征来划分数据集。
ps:这个过程可以看做依次选取每个特征,然后按照这个特征在Excel做排序,排序后会将类别变量(收入)划分为多个子集,在当前排序下,分别计算收入各个子集的加权熵。上图就是按照性别排序后的结果
二、信息增益比
信息增益会使得算法倾向于选择取值多的特征,因此提出按照信息增益比来选择最优特征,信息增益比越大,特征对类别的区分度越大。
信息增益比的定义是当前特征下的信息增益比上该特征的熵(之前所计算的熵都是计算类别变量Y的熵,而这里计算的是该特征的分布的熵,计算公式都一样,只是计算的随机变量不同而已)
三、基尼指数
基尼的定义是:

其中K是随机变量的所有取值个数;基尼是随机变量的基尼,决策树中是类别变量的基尼。基尼与熵类似,都可以表示随机变量的不确定性。
基尼指数的定义是:

基尼指数的计算跟条件熵的计算十分相似,几乎没有什么区别,只是一个是计算某个特征下的熵的期望,一个是计算某个特征下的基尼的期望。在选择最优特征的时候,这里是选择基尼指数最小的特征作为最优特征。
基于基尼指数构建的CART树是二分的,等于某个特征值的划分到左子树,不等于的划分到右子树,以此类推再对左右子树划分。这样做的好处一个是可以处理连续型的特征,另一个好处是特征可以反复利用,不像ID3或者C4.5那样每次划分数据集都是特征消耗的。
划分数据集
以上三种策略都可以计算最优特征,然后按照最优特征将数据集划分为不同子集,以此类推继续划分子集,可以递归的实现。
决策树剪枝
剪枝是为了防止决策树过拟合,而提出的删除部分叶节点或者子树的策略。剪枝分预剪枝和后剪枝,预剪枝是在构建决策树之前就已经设置了决策树的深度、最大宽度maxBin等。后剪枝是在决策树已经生成之后,定义决策树的代价函数(损失函数),有了代价函数评估决策树的代价。然后递归的将叶节点为一个叶节点,得到新的决策树,如果新的决策树代价更小则剪枝生效。
ML——决策树模型的更多相关文章
- 决策树模型 ID3/C4.5/CART算法比较
决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...
- 决策树模型比较:C4.5,CART,CHAID,QUEST
(1)C4.5算法的特点为: 输入变量(自变量):为分类型变量或连续型变量. 输出变量(目标变量):为分类型变量. 连续变量处理:N等分离散化. 树分枝类型:多分枝. 分裂指标:信息增益比率gain ...
- chapter02 三种决策树模型:单一决策树、随机森林、GBDT(梯度提升决策树) 预测泰坦尼克号乘客生还情况
单一标准的决策树:会根每维特征对预测结果的影响程度进行排序,进而决定不同特征从上至下构建分类节点的顺序.Random Forest Classifier:使用相同的训练样本同时搭建多个独立的分类模型, ...
- 用决策树模型求解回归问题(regression tree)
How do decision trees for regression work? 决策树模型既可以求解分类问题(对应的就是 classification tree),也即对应的目标值是类别型数据, ...
- 机器学习之使用sklearn构造决策树模型
一.任务基础 导入所需要的库 import matplotlib.pyplot as plt import pandas as pd %matplotlib inline 加载sklearn内置数据集 ...
- Python 实现基于信息熵的 ID3 算法决策树模型
版本说明 Python version: 3.6.6 |Anaconda, Inc.| (default, Jun 28 2018, 11:21:07) [MSC v.1900 32 bit (Int ...
- R_针对churn数据用id3、cart、C4.5和C5.0创建决策树模型进行判断哪种模型更合适
data(churn)导入自带的训练集churnTrain和测试集churnTest 用id3.cart.C4.5和C5.0创建决策树模型,并用交叉矩阵评估模型,针对churn数据,哪种模型更合适 决 ...
- 吴裕雄 python 机器学习——分类决策树模型
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_s ...
- 吴裕雄 python 机器学习——回归决策树模型
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_s ...
随机推荐
- debian var目录
1 /usr和/var /usr,只读数据. /var,可变数据. 2 /var/lib和/var/cache /var/lib,保存应用或者系统可变的状态信息,真的只是状态信息,比如/var/lib ...
- 区分虚拟机和machine simulator
1 虚拟机和machine simulator的不同 虚拟机是让多个操作系统同时共用现有的硬件架构,它不会模拟新的硬件架构.qemu这样的模拟器是模拟新的硬件架构,这个架构和host不同.
- phpexcel导出后乱码或者是打不开文件必须修复的问题
百度了一下找到了解决办法,只要在header前面加上ob_end_clean();这句代码,清除缓冲区,这样就可以了,完美的解决了我的问题
- NEU 1683: H-Index
题目描述 Given an array of citations (each citation is a non-negative integer) of a researcher, write a ...
- 分享一个好用的函数吧,将js中的对象转成url参数
JavaScript&jQuery获取url参数方法 这个函数呢是自己在写基于Vue+ElementUI管理后台时用到的,,下面列出来两种使用方式: 最普通的,封装一个js函数 /** * 对 ...
- RegistryView
https://docs.microsoft.com/en-us/dotnet/api/microsoft.win32.registryview?view=netframework-4.7 On th ...
- eclipse软件启动弹窗端口问题解决
如果启动eclipse,弹出一个窗口,上面显示,8080 .8009.……等的提示,说明端口有冲突, 解决办法如下: 1.打开cmd 2.输入 netstat -ano|findstr 8080 ...
- 一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- golang OOP面向对象
摘自:http://www.01happy.com/golang-oop/ golang中并没有明确的面向对象的说法,实在要扯上的话,可以将struct比作其它语言中的class. 类声明 1 2 3 ...
- php判断某个变量是否存在
sset— 检测变量是否设置,empty — 检查一个变量是否为空(是否存在也检测了,不存在或为空返回true)