机器学习(四):CART回归树(基础篇)

机器学习(四)CART回归树(基础篇)

在这里插入图片描述
相关的决策树文章:

回归CART(Classification And Regression Trees)

之前的文章,我们学习了ID3决策树,和C4.5决策树以及CART分类树进行分类。决策树不断将数据切分成小数据,直到所有目标标量完全相同,或者数据不能再切分为止。决策树是一种贪心算法,它要在一定情况下做出最佳的选择。

1. ID3算法的弊端

回忆一下,决策树的树构建算法是ID3和C4.5。ID3和C4.5的做法是每次选取当前最佳的特征来分割数据,并按照该特征的所有可能取值来切分。也就是说,如果一个特征有4种取值,那么数据将被切分成4份。一旦按某特征切分后,该特征在之后的算法执行过程中将不会再起作用,所以有观点认为这种切分方式过于迅速。

除了切分过于迅速外,ID3算法还存在另一个问题,它不能直接处理连续型特征。只有事先将连续型特征离散化,才能在ID3算法中使用。但这种转换过程会破坏连续型变量的内在特性。

2. CART算法

与ID3算法相反,CART算法正好适用于连续型特征。CART算法使用二元切分法来处理连续型变量。而使用二元切分法则易于对树构建过程进行调整以处理连续型特征。具体的处理方法是:如果特征值大于给定值就走左子树,否则就走右子树。

CART算法有两步:

  • 决策树生成:递归地构建二叉决策树的过程,基于训练数据集生成决策树,生成的决策树要尽量大;自上而下从根开始建立节点,在每个节点处要选择一个最好的属性来分裂,使得子节点中的训练集尽量的纯。不同的算法使用不同的指标来定义"最好":
  • 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时损失函数最小作为剪枝的标准。

我们先看看决策树的生成:
在决策树的文章中,我们先根据信息熵的计算找到最佳特征切分数据集构建决策树。CART算法的决策树生成也是如此,实现过程如下:

  • 使用CART算法选择特征
  • 根据特征切分数据集合
  • 构造树

函数一:根据特征切分数据集合

CART算法这里涉及到算法,实现起来复杂些,我们先挑个简单的,即根据特征切分数据集合。编写代码如下:

import numpy as np

def binSplitDataSet(dataSet, feature, value):
    """
    函数说明:根据特征切分数据
    :param dataSet: 数据集
    :param feature: 切分的特征
    :param value: 该特征的值
    :return:
    """
    mat0 = dataSet[np.nonzero(dataSet[:, feature] > value)[0], :]
    mat1 = dataSet[np.nonzero(dataSet[:, feature] <= value)[0], :]
    return mat0, mat1

if __name__ == '__main__':
    testMat = np.mat(np.eye(4))
    mat0, mat1 = binSplitDataSet(testMat, 1, 0.5)
    print('原始集合:\n', testMat)
    print('mat0:\n', mat0)
    print('mat1:\n', mat1)

我们看看结果:
在这里插入图片描述
在这里我们先创建了一个单位矩阵,然后根据切分的规则,对数据矩阵进行切分,可以看到函数根据特定的数据规则,对数据矩阵进行了切分。

从结果我们可以看出来,我们已经可以根据特征和特征值对数据进行切分了,mat0存放的大于指定特征值的矩阵,mat1存放的是小于指定特定值的矩阵。

CART算法

假设X与Y分别为输入和输出变量,并且Y是连续变量,给定训练集:
D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . . , ( x n , y n ) D={(x_1,y_1),(x_2,y_2),....,(x_n,y_n)} D=(x1,y1),(x2,y2),....,(xn,yn)
其中,D表示整个数据集合,n为特征数

一个回归树对应着输入空间(即特征空间)的一个划分以及划分的单元上的输出值。假设已将输入空间划分为M个单元R1,R2,…Rm,并且在每一个单元Rm上有一个固定的输出值Cm,于是回归模型可表示为:
在这里插入图片描述
这样就可以计算模型输出值与实际值的误差:
在这里插入图片描述
我们希望每个单元上的Cm,可以的是这个误差平方误差最小化,当Cm为相应单元的所有实际值的均值时,可以得到最优
在这里插入图片描述
那么如何生成这些单元划分?
假设,我们选择变量 xj 为切分变量,它的取值 s 为切分点,那么就会得到两个区域:
在这里插入图片描述
当j和s固定时,我们要找到两个区域的代表值c1,c2使各自区间上的平方差最小:
在这里插入图片描述
前面几经直到C1, C2为区间上的平均:
在这里插入图片描述
那么对固定的 j 只需要找到最优的s,然后通过遍历所有的变量,我们可以找到最优的j,这样我们就可以得到最优对(j,s),并得到两个区间。
这样的回归树通常称为最小二乘回归树(least squares regression tree)。

上述过程表示的算法步骤为:
输入:训练数据集D;
输出:回归树 f ( x ) f(x) f(x)
在训练数据即所在的输入空间中,递归地将每一个区域划分为两个子区域并决定每个子区域上地输出值,构建决策树
(1)选择罪域切分变量j与切分点s,求解
在这里插入图片描述
遍历变量j,对固定地切变量j扫

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值