博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
决策树基础
阅读量:4541 次
发布时间:2019-06-08

本文共 2652 字,大约阅读时间需要 8 分钟。

决策树的学习分三步:特征选择、决策树生成和决策树剪枝

一、特征选择

  特征选择可以用的指标有:信息增益、信息增益率和基尼指数

  首先要了解什么是信息熵。设样本为D,共有n个类,样本中第k类样本占的比例为pk(k = 1,2,.....,n),那么D的信息熵为

H(D) = - Σnk=1 pk log2pk

  信息熵反应D的“纯度”,值越小纯度越高。

  另外还要了解条件熵。设特征A有V个取值,用A对D进行划分,每个取值上样本集记为Dv(v = 1,2,....,V),那么条件熵H(D|A)为

H(D|A) = ΣVv=1 |Dv| H(Dv) / |D| 

  1、信息增益,又叫做互信息

g(D,A) = H(D) - H(D|A)

  信息增益表明使用特征A进行划分,可以使“纯度提升多少”。值越大,“纯度提升”越多。

但是信息增益倾向于选择取值较多的特征,比如:有10个样本,特征A有10个取值,每个取值有一个样本,这时分支节点的纯度达到最大,相应的信息增益最大,利用信息增益对特征进行选择,结果更可能选择这样的特征A。但这样的特征无法对新样本进行有效的预测。

2、信息增益率

使用信息增益率,可以对信息增益的这一问题进行校正。

g_ratio(D,A) = g(D,A)/h(A)

其中h(A) = - ΣVv=1 (|Dv|/|D|)  log2(|Dv|/|D|)

需要注意的是,增益率对可取值较少的特征有偏好,所以C4.5算法并不是直接选择增益率最大的特征进行划分,而是先从候选属性中找出信息增益高于平均水平的属性,再从中选择信息增益率最高的。

3、基尼指数

Gini(D) = 1-Σnk=1pk2

Gini_index(D,A) = ΣVv=1 |Dv| Gini(Dv) / |D| 

基尼指数越小越越有利于划分。

二、决策树生成

决策树生成算法比较著名的就是ID3、C4.5以及CART了。其中ID3主要用到特征选择的方法是信息增益、C4.5是信息增益率、CART是基尼指数。

基本算法

——————————————————————————————————————————————————————————————

输入:训练集D = {(x1,y1),......,(xm,ym)}

      属性集A = {A1,......Ad}

过程:TreeGenerate(D,A)

生成节点node;if D中样本全属于同一类别C:    将node标记为C类叶节点    return if A == 空集 or D中样本在A上的取值相同:    将node标记为叶节点,其类别标记为D中样本数最多的类    return从A中选择最优划分属性A*  #使用不同的特征选择方法将得到不同的算法for A*的每个取值a:    为node生成一个分支;令Da为D中在A*上取值为a的样本子集    if Da为空:        将分支节点标记为叶节点,其类别标记为D中样本最多的类        return    else:        以TreeGenerate(Da,A\{A*})为分支节点

三、决策树剪枝

  剪枝是决策是学习算法对付“过拟合”的主要手段。下面主要记录两种方法。

  1、简单方法(见周志华《机器学习》)

从训练集中留出一部分作为验证集,利用余下的数据生成一棵完整的决策树,再自底向上对每一个非叶节点进行:将以该节点为根节点的树杈剪掉,即将该节点替换成叶节点,类标记为样本数最多的类。计算替换前与替换后的验证集精度,如果替换前比替换后验证集精度大,则不剪枝。

2、复杂方法(见李航《统计学习方法》)

  先定义一个决策树学习的损失函数:

  设树T有|T|个叶节点,叶节点t上的样本数记为Nt,其中k类的样本的有Ntk个(k = 1,2,...,n),Ht(T)为叶节点t上的熵,损失函数

Cα(T) = Σ|T|t=1 Nt Ht(T) +α|T|

  损失函数的前一项记为C(T),表示模型对训练数据的预测误差(为什么可以表示预测误差,个人理解:熵表示“纯度”也表示“混乱度”,值越大纯度越低,比如t包括三个白球和三个黑球的熵比六个白球的大,三个白球和三个黑球的t节点的类标不管是白还是黑都有三个被分错,而六个白球都不会被分错)。

  损失函数的后一项|T|表示模型复杂度(树的叶节点越多树越庞大,相应的越复杂),α≥0可以权衡模型复杂度和训练误差(树越大,训练误差越小,但|T|越大。α越大倾向于寻找复杂度低,训练误差也相对较低的树,α=0意味着只考虑模型与训练数据的拟合程度,不考虑模型复杂度)

  剪枝,就是在α确定时,选择损失函数最小的模型。


剪枝算法

输入:生成的树T,参数α

输出:修剪后的子数Tα

(1)计算每个节点的熵

(2)递归地从树的叶节点向上回缩。设一组叶节点回缩到其父节点前后的整棵树记为TA,TB,其对应的损失函数值分别为Cα(TA),Cα(TB),如果Cα(TA) ≤ Cα(TB),则进行剪枝,并将父节点变为新的叶节点。

(3)返回(2),直到不能继续为止,得到损失函数最小的子数Tα


 

 α的确定

自动确定α算法


输入:生成的树T0

输出:最优决策树Tα

(1)设k = 0,T = T0

(2)设α = +∞

(3)自下而上地对每个内部结点t计算C(Tt),|T|以及

g(t) = [C(t) - C(Tt)] / [|Tt| - 1]

α = min(α,g(t))

  其中Tt表示以t为根节点的子树,C(Tt)是对训练数据的预测误差,|Tt|是Tt的叶节点个数。

(4)对g(t) = α的内结点t进行剪枝,并对叶结点t以多数表决法决定其类,得到树T。

(5)k = k+1,αk=α,Tk = T.

(6)如果Tk不是由根节点及两个叶节点构成的树,则返回步骤(3);否则令Tk= Tn.

(7)采用交叉验证法在子树序列T0,......,Tn中选取最优子树Tα

 


 具体为什么这样做就能选择比较好的α和最优树,以及怎么做交叉检验选取最优树,在李航《统计学习基础》上,贴个图吧

四、关于连续性特征的划分方法,见周志华《机器学习》和李航《统计学习方法》。虽然都是书上搬过来的,码字也很累。。。。写到这吧

 

转载于:https://www.cnblogs.com/miranda-zxh/p/7458656.html

你可能感兴趣的文章
深度学习面试
查看>>
asp.net之DataList的使用方法,及分页(存储过程创建),编辑,更新,删除
查看>>
JQuery弹出层,点击按钮后弹出遮罩层,有关闭按钮【转】
查看>>
Codeforces 138D World of Darkraft
查看>>
CentOS 6.4 64位 搭建MySQL-Cluster 7.3.8 集群
查看>>
操作headers
查看>>
[zz] linux kill 进程
查看>>
普林斯顿大学算法课 Algorithm Part I Week 3 比较器 Comparators
查看>>
MySQL之增删改查
查看>>
zeromq示例代码
查看>>
数据库知识点积累
查看>>
好看的背景
查看>>
类名&函数名 是什么意思
查看>>
Silverlight 4 的 WCF NET.TCP 协议
查看>>
关于换位思考
查看>>
设置VSS2005使支持通过Internet访问
查看>>
word2010更改样式
查看>>
百家姓
查看>>
Xcode代码提示里的字母含义
查看>>
[CQOI2017]小Q的表格(数论+分块)
查看>>