CART分类回归树
2015-11-20 23:03
344 查看
这一篇主要是CART,有几个重点的词语先写下来,重点哦:基尼指数(Gini index,跟经济学的基尼系数长这么像,八杆子打得着吗)、最小二乘回归树(least squares regression tree)
CART:classification and regression tree。分类回归树。
简单的说呢,CART就是个二叉树(广义的决策树并不一定就是二叉树,可能好几叉。。。哈哈),所以内部节点的取值就是“是”“否”的了。
直接介绍算法吧,CART的基本原理和广义的决策树是一样的,就相当于二叉树都有普通树的特征。
下面直接介绍回归树的算法:
1. 回归树的生成:基于训练数据集生成决策树,尽量大点。
2. 回归树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
完了,,,很简单的。哈哈
下面介绍一下详细的算法,重点还是大多参考了统计学习方法的:
简单介绍一下理论:给定数据集
假设已经将输入空间划分为M个单元R_1、R_2、…R_M,并且每个单元都有一个固定的输出值C_m,则回归树的模型为:
训练数据集的预测误差为:平方误差
平方误差是用来球每个单元上的最优输出值
即:
那么怎么选择划分的那条线呢?
选择第j个变量x_j和取得值s,定义两个区域:
那么在这里我们就寻找最优的j和s,也就是求解:
书上是这样的,但是我感觉中括号里的两个min就不要了。删掉就好。
求解的过程待会见回归树生成算法。
通常,通过以上过程建立的回归树叫做最小二乘回归树。
最小二乘回归树的生成算法:
输入:训练数据集D
输出:回归树f(x)
在训练数据集所在的输入空间中,递归的将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二车决策树:
1). 选择最优划分变量j和s;
求解:
遍历变量j,对固定的j扫描s,选择是上式最小值的(j,s);
2). 用选定的(j,s)划分区域并决定相应的输出值;
3). 继续1)、2)步骤,直至满足条件;
4).将输入空间划为M个区域,R_1…….R_m,生成决策树:
接下来是什么呢?上边是回归,下边就是分类了,分类树的生成是怎么做的呢?
最开始的基尼指数就要开始登场了:
分类树是通过基尼指数来选择最优特征的,同时决定该特征的最优切分点。
基尼指数:假设有k个类,样本属于第k个类的概率为P_k, 则此概率分布的基尼指数定义为:
对于给定的离散数据集D, 其基尼指数为:
如果样本集合D根据特征A是否去某一个值a被分割为D_1、D_2,
即:
那么这就是在特征A的条件下D的基尼指数是:
基尼指数求出来了,那么基尼指数有什么意义呢?
基尼指数表示集合D的不确定性,基尼指数
表示经过特征A分割后D的不确定性,跟条件熵是不是很相似。。。Gini(D)和熵也是很类似的。
CART的分类树生成算法:
输入: 训练数据集D,停止计算的条件。
输出: CART决策树.
根据训练数据集,从根节点开始,递归的对每一个结点进行以下操作,构建决策树。
1. 设结点的训练集为D,计算现有特征对该数据集的基尼指数,此时,对每一个特征A,对其可能取的每一个值a,根据样本点对A=a的测试是“是”还是“否”,将D分割成D_1,D_2,利用上边的式子计算A=a时的基尼指数。
2. 在所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点(基尼指数越大不确定性越大,不好,所以选小的)。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
3. 对两个子结点递归的调用步骤1. 2.直至满足条件。
4. 生成CART决策树。
算法停止的条件是结点中的样本个数小于预定阈值,或样本的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征了。
完了。。。。。这就是分类回归树的理论原理,还剩了个剪枝没记录,但是剪枝就涉及自己实现的时候用到的,等以后自己实现的时候用到了再详细解释吧。下一个是随机森林和随机蕨。
CART:classification and regression tree。分类回归树。
简单的说呢,CART就是个二叉树(广义的决策树并不一定就是二叉树,可能好几叉。。。哈哈),所以内部节点的取值就是“是”“否”的了。
直接介绍算法吧,CART的基本原理和广义的决策树是一样的,就相当于二叉树都有普通树的特征。
下面直接介绍回归树的算法:
1. 回归树的生成:基于训练数据集生成决策树,尽量大点。
2. 回归树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
完了,,,很简单的。哈哈
下面介绍一下详细的算法,重点还是大多参考了统计学习方法的:
简单介绍一下理论:给定数据集
假设已经将输入空间划分为M个单元R_1、R_2、…R_M,并且每个单元都有一个固定的输出值C_m,则回归树的模型为:
训练数据集的预测误差为:平方误差
平方误差是用来球每个单元上的最优输出值
即:
那么怎么选择划分的那条线呢?
选择第j个变量x_j和取得值s,定义两个区域:
那么在这里我们就寻找最优的j和s,也就是求解:
书上是这样的,但是我感觉中括号里的两个min就不要了。删掉就好。
求解的过程待会见回归树生成算法。
通常,通过以上过程建立的回归树叫做最小二乘回归树。
最小二乘回归树的生成算法:
输入:训练数据集D
输出:回归树f(x)
在训练数据集所在的输入空间中,递归的将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二车决策树:
1). 选择最优划分变量j和s;
求解:
遍历变量j,对固定的j扫描s,选择是上式最小值的(j,s);
2). 用选定的(j,s)划分区域并决定相应的输出值;
3). 继续1)、2)步骤,直至满足条件;
4).将输入空间划为M个区域,R_1…….R_m,生成决策树:
接下来是什么呢?上边是回归,下边就是分类了,分类树的生成是怎么做的呢?
最开始的基尼指数就要开始登场了:
分类树是通过基尼指数来选择最优特征的,同时决定该特征的最优切分点。
基尼指数:假设有k个类,样本属于第k个类的概率为P_k, 则此概率分布的基尼指数定义为:
对于给定的离散数据集D, 其基尼指数为:
如果样本集合D根据特征A是否去某一个值a被分割为D_1、D_2,
即:
那么这就是在特征A的条件下D的基尼指数是:
基尼指数求出来了,那么基尼指数有什么意义呢?
基尼指数表示集合D的不确定性,基尼指数
表示经过特征A分割后D的不确定性,跟条件熵是不是很相似。。。Gini(D)和熵也是很类似的。
CART的分类树生成算法:
输入: 训练数据集D,停止计算的条件。
输出: CART决策树.
根据训练数据集,从根节点开始,递归的对每一个结点进行以下操作,构建决策树。
1. 设结点的训练集为D,计算现有特征对该数据集的基尼指数,此时,对每一个特征A,对其可能取的每一个值a,根据样本点对A=a的测试是“是”还是“否”,将D分割成D_1,D_2,利用上边的式子计算A=a时的基尼指数。
2. 在所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点(基尼指数越大不确定性越大,不好,所以选小的)。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
3. 对两个子结点递归的调用步骤1. 2.直至满足条件。
4. 生成CART决策树。
算法停止的条件是结点中的样本个数小于预定阈值,或样本的基尼指数小于预定阈值(样本基本属于同一类),或者没有更多特征了。
完了。。。。。这就是分类回归树的理论原理,还剩了个剪枝没记录,但是剪枝就涉及自己实现的时候用到的,等以后自己实现的时候用到了再详细解释吧。下一个是随机森林和随机蕨。
相关文章推荐
- VirtualBox的网络设置(6种方式)
- hiho 11 树的最长路径
- maxSubArray
- 常见数据结构和常见算法
- 树及树的遍历
- 同步函数多线程
- iisexpress权限
- Linux禁止普通用户使用su切换到root用户
- 没有躲过的坑--抽象类不能实例化对象(但是你明明定义的不是抽象类)
- 没有躲过的坑--抽象类不能实例化对象(但是你明明定义的不是抽象类)
- mongodb--windows下安装
- [AlwaysOn Availability Groups]排查:Primary上的修改无法在Secondary体现
- Linux时间同步:ntpd,ntpdate
- zabbix添加自定义item、触发器、图形,并执行远端命令
- LeetCode 第7题 翻转数字
- Java中的final关键字
- 顾客存钱到银行
- CyclicBarrier
- Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算
- 树状数组