作者:桂。

时间:2017-05-13  14:19:14

链接:http://www.cnblogs.com/xingshansi/p/6847334.html


前言

内容主要是CART算法的学习笔记。

CART算法是一个二叉树问题,即总是有两种选择,而不像之前的ID3以及C4.5B可能有多种选择。CART算法主要有回归树和分类树,二者常用的准则略有差别:回归树是拟合问题,更关心拟合效果的好坏,此处用的是均方误差准则; 分类树是分类问题,更像是离散变量的概率估计,用与熵类似的Gini系数进行度量。

一、CART算法——回归树

因为是回归问题,只要抓住两个要点就好:

1)如何切分;

2)切分后的不同区域,如何取值;

先来分析一下一次划分的操作:

  A-回归树切分

选择第j个变量和它的取值s,作为切分变量和切分点,并定义两个区域:

通过寻找最小均方误差点,实现切分:

  B-回归树的输出值

对固定输入变量j找到最优切分点s,并定义各自区域均值为输出变量:

  C-回归树举例

看一下习题中的例子:

数据的切分点分别为:1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5

从公式

可以看出输出值c就是对应类别内y的均值。

当切分点选择s = 2.5时,区域R1有:

c1 = (4.5+4.75)/2=4.625

区域R2有:

同样c2 = 7.17

从而计算出s = 2.5对应的估计误差:

不同的s切分点,对应的估计误差不同,最后选择最小误差对应的切分点,这就完成了一次切分:

此时的c1,c2分别对应两类输出值。

假设s=6.5处实现了第一次划分,第二次就是分别在子区域进一步划分,如将:

进行二次切分,步骤思路与上面完全一致。

总结一下CART回归树的算法思路:

二、CART算法——分类树

  A-基尼系数

CART分类树不再是基于信息增益,而是引入了Gini系数,给出基尼系数定义:

二分问题中Gini系数与熵之半的对比:

可以看出基尼系数与熵的特性类似,也是不确定性(信息量)的一种量度。

一方面,如果对于样本集合D,基尼系数:

其中是D中属于第k类的样本子集,K是类的个数。

如果D被特征A划分为D1、D2两部分,这个时候就是统计均值,D的基尼系数:

  B-CART决策树生成

CART决策树的生成,抓住两个基本要点:

1)基尼系数计算,确定二叉树;

2)确定决策树层次结构

举例说明:

分别以表示年龄、有工作、有自己的房子、信贷情况。

对于A1是分为中年、老年、青年,计算基尼系数

A1、A3都可以,选择A1,,即青年是一类,非青年(中年、老年)是一类,

有工作、有自己的房子,都是二分,可以不用切分。信贷情况A4:

最小,故选为最优切分点。

至此,完成了基尼系数计算以及二叉树划分。下面确定决策树层次结构:

由小到大,A3为最优切分点,依次在A1,A2,A4选择,故选择A2为次优切分点......依次类推。

给出决策树生成算法:

主要分两步走:

1)计算各种情况的基尼系数,划分每个节点的二叉树;

2)根据基尼系数的大小,确定二叉树不同节点的层次结构,形成决策树。

 

三、CART树剪枝

回归树(拟合问题)与决策树都存在过拟合问题,防止过拟合(过渡细化)都需要剪枝的操作。

先来看看剪枝用到的准则函数:

关于C(T)之前文章有分析,它是叶节点特性的度量,C4.3里它是熵的均值,CART决策树里它是基尼系数的概率均值,原理类似。多一个正则项,就是稀疏性约束。

ID3、C4.5算法中的剪枝原理是给定α,事实上很难一次给出理想的α。CART剪枝不再给定一个α,然后选择最优决策树,而是通过设定不同的α,通过交叉验证选择最优CART树,也就是:

训练集:得到不同的子树;

测试集:交叉验证选择最优树.

从有限个子树中计算最优子树,最优子树由验证集得出的测试误差决定,哪个最小就是哪个。

这里就引出了一个问题,每次剪哪一个节点呢?先看分析剪枝的两个极端情况:

1)完全没剪:

2)只剩根节点:

在α较小或者为0时,有:

在α取+∞大时,有:

α是连续变量,因此总有临界点:

为了不混淆变量,重新定义:

α大于g(t)就是该剪。简而言之:

对于同一棵树的结点,α都是一样的,当α从0开始缓慢增大(或者从+∞慢慢减小),总会有某棵子树该剪,其他子树不该剪的情况,即α超过了某个结点的g(t),但还没有超过其他结点的g(t)。这样随着alpha不断增大,不断地剪枝,就得到了n+1棵子树,接下来只要用独立数据集测试这n+1棵子树,试试哪棵子树的误差最小 就知道那棵是最好的方案了。

给出CART剪枝算法:

原书的算法勘误:

(4)修改为:

(6)修改为:

参考:

  • 李航《统计学习方法》

统计学习方法:CART算法的更多相关文章

  1. paper 85:机器统计学习方法——CART, Bagging, Random Forest, Boosting

    本文从统计学角度讲解了CART(Classification And Regression Tree), Bagging(bootstrap aggregation), Random Forest B ...

  2. 统计学习方法——CART, Bagging, Random Forest, Boosting

    本文从统计学角度讲解了CART(Classification And Regression Tree), Bagging(bootstrap aggregation), Random Forest B ...

  3. 统计学习五:3.决策树的学习之CART算法

    全文引用自<统计学习方法>(李航) 分类与回归树(classification and regression tree, CART)模型是由Breiman等人于1984年提出的另一类决策树 ...

  4. 统计学习方法笔记--EM算法--三硬币例子补充

    本文,意在说明<统计学习方法>第九章EM算法的三硬币例子,公式(9.5-9.6如何而来) 下面是(公式9.5-9.8)的说明, 本人水平有限,怀着分享学习的态度发表此文,欢迎大家批评,交流 ...

  5. 统计学习方法c++实现之六 支持向量机(SVM)及SMO算法

    前言 支持向量机(SVM)是一种很重要的机器学习分类算法,本身是一种线性分类算法,但是由于加入了核技巧,使得SVM也可以进行非线性数据的分类:SVM本来是一种二分类分类器,但是可以扩展到多分类,本篇不 ...

  6. 《统计学习方法》笔记九 EM算法及其推广

    本系列笔记内容参考来源为李航<统计学习方法> EM算法是一种迭代算法,用于含有隐变量的概率模型参数的极大似然估计或极大后验概率估计.迭代由 (1)E步:求期望 (2)M步:求极大 组成,称 ...

  7. Adaboost算法的一个简单实现——基于《统计学习方法(李航)》第八章

    最近阅读了李航的<统计学习方法(第二版)>,对AdaBoost算法进行了学习. 在第八章的8.1.3小节中,举了一个具体的算法计算实例.美中不足的是书上只给出了数值解,这里用代码将它实现一 ...

  8. 决策树模型 ID3/C4.5/CART算法比较

    决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...

  9. 03机器学习实战之决策树CART算法

    CART生成 CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支.这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有 ...

随机推荐

  1. 最小费用最大流模板(POJ 2135-Farm Tour)

    最近正好需要用到最小费用最大流,所以网上就找了这方面的代码,动手写了写,先在博客里存一下~ 代码的题目是POJ2135-Farm Tour 需要了解算法思想的,可以参考下面一篇文章,个人觉得有最大流基 ...

  2. 【quickhybrid】组件(自定义)API的实现

    前言 前文在API规划时就已经有提到过组件API这个概念,本文将会介绍它的原理以及实现 理解组件API这个概念 quick.ui.xxx quick.page.xxx 在quick hybrid中,A ...

  3. Daily Scrum8 11.12

    昨天的任务已完成. 今日任务: 徐钧鸿:个人作业 张艺:构建带有用户管理的框架,并将后端移植好的代码连结. 黄可嵩:完成搜索移植 徐方宇:研究httpclient如何运作,如何利用它实现服务器和客户端 ...

  4. VS2010中配置OpenGL

    下面将对VS2010中配置OpenGL进行简单介绍. 学习OpenGL前的准备工作第一步,选择一个编译环境现在Windows系统的主流编译环境有Visual Studio,Broland C++ Bu ...

  5. 在WPF里实现计算器软件

    一.具体代码 类代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; us ...

  6. python实现树莓派开机自动发送IP到指定邮箱

    #!/usr/bin/python # -*- coding:UTF-8 -*- #测试发送邮件163邮箱发送到qq邮箱 import smtplib from email.mime.text imp ...

  7. b1

    组长:吴晓晖 过去两天完成了哪些任务: 代码重构进行中,界面,预计两个beta单位完成 展示GitHub当日代码/文档签入记录 接下来的计划 更加人性化的推荐算法 还剩下哪些任务 有哪些困难 有哪些收 ...

  8. “吃神么,买神么”的第一个Sprint计划(第五天)

    “吃神么,买神么”项目Sprint计划 ——5.25  星期一(第五天)立会内容与进度 摘要:logo2出来了,修改过不一样的风格,组内总体评价可以,但是颜色要改,色调没注意,统一决定改成与背景色一致 ...

  9. 【CSAPP笔记】2. 整型运算

    现在想补补推荐这本书的理由. Most books on systems-computer architecture, compilers, operating systems, and networ ...

  10. 团队作业4——第一次项目冲刺(Alpha版本)2017.11.14

    1.当天站立式会议照片 本次会议在5号公寓1楼召开,本次会议内容:①:熟悉每个人想做的模块.②:根据老师的要求将项目划分成一系列小任务.③:选择项目的开发模式:jsp+servlet+javabean ...