机器学习算法之决策树(Decision tree)

转自
算法杂货铺--决策树
决策树和随机森林学习笔记-欢迎补充

http://www.cnblogs.com/fionacai/p/5894142.html

决策树- 基础概念


熵是表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量,其概率分布为
P(X=xi)=pi,i=1,2,⋯,n
则随机变量的熵定义为
另外,0log0=0,当对数的底为2时,熵的单位为bit;为e时,单位为nat。
熵越大,随机变量的不确定性就越大。从定义可验证
0≤H(p)≤logn

算法思想

基本思想是以信息熵为度量构造一棵熵值下降最快的树,到叶子节点处的熵值为零,此时每个叶节点中的实例都属于同一类。

就是通过一棵按照属性分裂出来的二叉树,多叉树,最后决定这一组样本所属的类别。
内部节点标示属性、叶子节点存放所属的类别。
图示如下:

西瓜决策树

通过根节点根据这些属性对下走,很容易判断出来这组属性的瓜是属于好瓜还是坏瓜。

信息熵下降越快,说明信息越明确,就是寻找纯度最好的分类方法,纯度通俗点理解就是目标变量要分得足够开(y=1的和y=0的混到一起就会不纯)。

决策树分裂算法

决策树使用比较简单,那么如何构建就成了关键。
一般来说,可以选择的属性很多,那么每一步应该选择哪个分支,这是根据前面的原来判断信息熵下降最快的分支作为分裂的分支。
而判断信息熵下降情况的有三种算法:
ID3算法: 使用信息增益作为不纯度,核心思想是以信息增益度量属性选择,选择分裂后的信息增益最大的,也就是熵在分裂前后差值最大的属性进行分裂。

信息增益计算

根据log(x)的函数可知,p值越小,熵越大,所以当分组完全是会出现p=0此时熵最大,概率为0说明已经最纯了。
学习数据挖掘技术的最好方法是找到详细案例和看懂计算过程。有时算法虽然不难,但公式表达很难理解。

案例分享

表中S、M和L分别表示小、中和大。
设L、F、H和R表示日志密度、好友密度、是否使用真实头像和账号是否真实,试用ID3算法构造决策树。
解:设D为10个样本集,其中决策属性(真实账户/R)有7个YES、3个NO。决策属性信息熵为:

决策属性信息熵

如果按照日志密度来分类:计算日志密度熵值,日志密度分为3类S,L,M
其中L分类,样本总数10,L类3,L类中假账号0 真实账号3

L+M+S

所以:
所以gain(L) = 0.876-0.603 = 0.273
同理计算好友密度信息增益:


image.png

计算真实头像的信息增益:

image.png

因为好友密度(F)具有最大的信息增益(好友密度信息熵最小,最易分割),所以第一次分裂选择好友密度F为分裂属性(实际中如果特征非常多是随机选择一些特征然后计算后选取的不能遍历所有情况),分裂后的结果如下:

第一次分裂的结果

图中:按好友密度(F)分割树,水平M和L为单一水平决策属性分支(树叶),没有必要继续分割。水平S包含决策属性的不同水平,应该继续分割。待分割决策信息表为:

带分裂决策表

此时,设D为4个样本集,其中决策属性(真实账户/R)有1个YES、3个NO。决策属性信息熵为:

决策属性信息熵

日志密度属性期望信息熵为:


日志密度属性信息熵

真实头像属性期望信息熵为:

真实头像信息熵
信息增益

因为日志密度(L)具有最大的信息增益,所以第二次分裂选择日志密度(L)为分裂属性,分裂后的结果如下图表示:

日志密度分裂

图中,日志密度为M时,无法做出判断、也无法继续进行分裂。至此,决策树构建完毕。

设某人在SNS社区中的好友密度为L或M,无论其它属性水平取值如何,均可判定为是真实账户;如果某人在SNS社区中的好友密度为S、日志密度也为S,可判定为是虚假账户;如果某人在SNS社区中的好友密度为S、日志密度为M,应根据真实头像信息做出判断,由于样本过少,无法继续进行。

C4.5算法:使用信息增益率作为不纯度。
ID3算法是决策树的一个经典的构造算法,但ID3算法也存在一些问题,比较突出的缺陷是信息增益的计算依赖于特征水平较多的特征,而属性取值最多的属性并不一定最优。例如,投掷一枚分币和一个色子这两个随机试验,所有可能的期望信息熵为:

信息熵

通过信息熵的定义可知,在给定特征水平数条件下,各水平发生概率相等(如掷筛子6个数字发生的概率都为1/6。期望信息熵最大。所以,当决策信息中某个变量特征水平较多时,ID3算法按信息增益指标往往会选择该变量或属性做为分割节点。
I、“分裂信息”公式
C4.5算法首先定义了“分裂信息”,其定义可以表示成:

分裂信息

II、增益率

增益率

III、分裂信息和增益率计算实例
在ID3算法案例中(SNS社区中不真实账号检测),决策属性信息熵为:

决策属性信息熵

把决策属性替换成其它属性,即为各属性分裂信息熵。
日志密度分裂信息:

日志密度分裂信息

好友密度分裂信息:

好友密度分裂

真实头像分裂信息:

真实头像分裂

由前面ID3算法已知,

image.png

各属性增益率为,

信息增益率

由上述计算结果可知“好友密度”在属性中具有最大的信息增益比,取“好友密度”为分割属性,引出一个分枝,样本按此划分。对引出的每一个分枝再用此分类法进行分类,再引出分枝。
某属性的信息增益除以分裂信息,消除了属性水平数量多少的影响,使得分裂属性的选择更加合理。

CART:: 使用基尼系数函数作为不纯度。
决策树方法是会把每个特征都试一遍,然后选取那个,能够使分类分的最好的特征,也就是说将A属性作为父节点,产生的纯度增益(GainA)要大于B属性作为父节点,则A作为优先选取的属性。既可以做分类,也可以做回归。只能形成二叉树。
分支条件:二分类问题

分支方法:对于连续特征的情况:比较阈值,高于某个阈值就属于某一类,低于某个阈值属于另一类。对于离散特征:抽取子特征,比如颜值这个特征,有帅、丑、中等三个水平,可以先分为帅和不帅的,不帅的里面再分成丑和中等的。

得分函数(y):就是上面提到的gt(x),对于分类树取得是分类最多的那个结果(也即众数),对于回归树取得是均值。

损失函数:其实这里的损失函数,就是分类的准则,也就是求最优化的准则

对于分类树(目标变量为离散变量):同一层所有分支假设函数的基尼系数的平均。

对于回归树(目标变量为连续变量):同一层所有分支假设函数的平方差损失

对于分类树(目标变量为离散变量):使用基尼系数作为分裂规则。比较分裂前的gini和分裂后的gini减少多少,减少的越多,则选取该分裂规则,这里的求解方法只能是离散穷举。关于基尼系数,可以参考周志华的西瓜书决策树那章,讲得比较简洁,也比较易懂。“直观来说,(数据集D的基尼系数)Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率,因此Gini(D)越小,则数据集D的纯度越高。”

具体这个的计算,我觉得有例子才好理解,下面这个红绿球的例子很好的说明了,如何根据损失函数最小(也就是基尼系数最小)来选取分裂规则。最后GIINs2更小,因此选择它作为分类规则。

基尼系数

对于回归树(目标变量为连续变量):使用最小方差作为分裂规则。只能生成二叉树。

image.png
image.png

缺点补充几点,不是很稳点,数据变化一点,你的树就会发生变化;没有考虑变量之间相关性,每次筛选都只考虑一个变量(因此不需要归一化);只能线性分割数据;贪婪算法(可能找不到最好的树)。优点也补充三点,同时可以处理分类变量和数值变量(但是可能决策树对连续变量的划分并不合理,所以可以提前先离散化);可以处理多输出问题;另外决策树不需要做变量筛选,它会自动筛选;适合处理高维度数据。

image.png

三种方法对比:

ID3的缺点,倾向于选择水平数量较多的变量,可能导致训练得到一个庞大且深度浅的树;另外输入变量必须是分类变量(连续变量必须离散化);最后无法处理空值。
C4.5选择了信息增益率替代信息增益。
CART以基尼系数替代熵;最小化不纯度而不是最大化信息增益。

剪树:

如何停止分裂

下面这六种情况都会停止分裂。
其中第一种其实属于树的完全长成,但这会出现过拟合问题,所有之前很流行一种抑制这种情况的方法,叫树的剪枝

树的剪枝分为预剪枝和后剪枝,预剪枝,及早的停止树增长控制树的规模,方法可以参考如下6点停止分类的条件。后剪枝在已生成过拟合决策树上进行剪枝,删除没有意义的组,可以得到简化版的剪枝决策树,包括REP(设定一定的误分类率,减掉对误分类率上升不超过阈值的多余树)、PEP,还有一种CCP,即给分裂准则—基尼系数加上惩罚项,此时树的层数越深,基尼系数的惩罚项会越大。

image.png

随机森林

尽管有剪枝等等方法,一棵树的生成肯定还是不如多棵树,因此就有了随机森林,解决决策树泛化能力弱的缺点。(可以理解成三个臭皮匠顶过诸葛亮)

而同一批数据,用同样的算法只能产生一棵树,这时Bagging策略可以帮助我们产生不同的数据集。Bagging策略来源于bootstrap aggregation:从样本集(假设样本集N个数据点)中重采样选出Nb个样本(有放回的采样,样本数据点个数仍然不变为N),在所有样本上,对这n个样本建立分类器(ID3\C4.5\CART\SVM\LOGISTIC),重复以上两步m次,获得m个分类器,最后根据这m个分类器的投票结果,决定数据属于哪一类。

随机森林在bagging的基础上更进一步:

  1. 样本的随机:从样本集中用Bootstrap随机选取n个样本

  2. 特征的随机:从所有属性中随机选取K个属性,选择最佳分割属性作为节点建立CART决策树(泛化的理解,这里面也可以是其他类型的分类器,比如SVM、Logistics)

  3. 重复以上两步m次,即建立了m棵CART决策树

  4. 这m个CART形成随机森林,通过投票表决结果,决定数据属于哪一类(投票机制有一票否决制、少数服从多数、加权多数)

关于调参:1.如何选取K,可以考虑有N个属性,取K=根号N

           2.最大深度(不超过8层)

           3.棵数

           4.最小分裂样本树

           5.类别比例

决策树的重要参数都是防止过拟合的. 有2个参数是关键,min_samples_leaf 这个sklearn的默认值是1,经验上必须大于100,如果一个节点都没有100个样本支持他的决策,一般都被认为是过拟合;max_depth 这个参数控制树的规模。决策树是一个非常直观的机器学习方法。一般我们都会把它的决策树结构打印出来观察,如果深度太深对于我们的理解是有难度的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容

  • 决策树理论在决策树理论中,有这样一句话,“用较少的东西,照样可以做很好的事情。越是小的决策树,越优于大的决策树”。...
    制杖灶灶阅读 5,832评论 0 25
  • 分类与预测 餐饮企业经常会碰到下面的问题: 如何预测未来一段时间内,哪些顾客会流失,哪些顾客最有可能成为VIP客户...
    Skye_kh阅读 6,293评论 3 15
  • 积跬步以致千里,积怠惰以致深渊 注:本篇文章在整理时主要参考了 周志华 的《机器学习》。 主要内容 决策树是机器学...
    指尖上的魔术师阅读 1,370评论 0 5
  • 这个题目取得比较奇怪,原因是:虽然号称数学是世界上最简洁的语言,但是太多的公式难免看的人心慌;其次公式在hexo+...
    Helen_Cat阅读 2,623评论 0 13
  • 我是社会青年激情四射投身军旅,我是新兵蛋子熔炉中焠火直线加方块中脱变,我是国防线上钢铁长城的刀锋印迹,我是军歌嘹亮...
    9865baf7dbcc阅读 195评论 3 1