决策树一一CART算法(第三部分)

决策树一一CART算法(第三部分)


CART-回归树模型

如果输出变量是 连续 的,对应的就是 回归 问题,对于决策树而言,输出的信息一定就是叶子结点,所以需要将连续变量按照一定的要求划分。

回归树模型

假设将输入空间划分成 M个单元, , R 1 , R 2 , . . . . , R M R_1,R_2,....,R_M R1,R2,....,RM,并在每个单元 上有一个固定的输出值 ,回归树模型可以表示为:
f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) f(x)=\sum_{m=1}^{M} c_{m} I\left(x \in R_{m}\right) f(x)=m=1McmI(xRm)
f ( x ) f(x) f(x) 就是CART回归树模型, c m c_m cm 代表输出的类, I ( x ∈ R m ) I\left(x \in R_{m}\right) I(xRm) 就是指示性函数。

假设输入和输出变量如下表:

输入 R 1 R_1 R1 R 2 R_2 R2 R m R_m Rm
输出 C 1 C_1 C1 C 2 C_2 C2 C M C_M CM

I ( x ∈ R m ) I\left(x \in R_{m}\right) I(xRm)就是指当 ( x ∈ R m ) \left(x \in R_{m}\right) (xRm)时1, x ∉ R m x\notin R_m x/Rm时取0

也就是说当某个输出单元也就是类 C m C_m Cm而言,当输入单元 R m R_m Rm和它一致时就存在,不一致则不存在,把所有输入单元对应的类求和之后,便是最终的回归树模型。

平方误差最小化找切分点

选择第 x j x^{j} xj个变量和取值s ,分别作为切分变量和切分点,并定义两个区域:
R 1 ( j , s ) = x ∣ x ( j ) ≤ s R_{1}(j, s)=x \mid x^{(j)} \leq s R1(j,s)=xx(j)s

R 1 ( j , s ) = x ∣ x ( j ) > s R_{1}(j, s)=x \mid x^{(j)} > s R1(j,s)=xx(j)>s
用「平方误差最小化」来寻找最优切分变量 j和最优切分点 s:
min ⁡ j , s [ min ⁡ c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min ⁡ c e ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min _{j, s}\left[\min _{c_{1}} \sum_{x_{i} \in R_{1}(j, s)}\left(y_{i}-c_{1}\right)^{2}+\min _{c_{e}} \sum_{x_{i} \in R_{2}(j, s)}\left(y_{i}-c_{2}\right)^{2}\right] j,sminc1minxiR1(j,s)(yic1)2+ceminxiR2(j,s)(yic2)2
这个公式将输出变量按照输入变量分为了两类,求出每次分类后的各个分类的平方误差最小值之和,相当于整体的最小平方误差。平方误差最小,分类和实际最吻合。

其中:
c ^ 1 = a v e ( y i ∣ x i ∈ R 1 ( j , s ) ) \hat c_1=ave(y_i|x_i\in R_1(j,s)) c^1=ave(yixiR1(j,s))

c ^ 2 = a v e ( y i ∣ x i ∈ R 2 ( j , s ) ) \hat c_2=ave(y_i|x_i\in R_2(j,s)) c^2=ave(yixiR2(j,s))

要让平方误差最小,则每次分类后的 c ^ 1 和 c ^ 2 \hat c_1和\hat c_2 c^1c^2应设置为对应的每个区域内的输出变量的平均值。

回归树步骤

输入:训练数据集D,停止条件
输出:CART决策树T

  1. 从根节点出发,进行操作,构建二叉树:

  2. 结点处的训练数据集为D,计算变量的最优切分点,并选择最优变量。

    min ⁡ j , s [ min ⁡ c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min ⁡ c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min _{j, s}\left[\min _{c_{1}} \sum_{x_{i} \in R_{1}(j, s)}\left(y_{i}-c_{1}\right)^{2}+\min _{c_{2}} \sum_{x_{i} \in R_{2}(j, s)}\left(y_{i}-c_{2}\right)^{2}\right] j,sminc1minxiR1(j,s)(yic1)2+c2minxiR2(j,s)(yic2)2
    ——在第j变量下,对其可能取的每个值s,根据样本点分割成 R 1 R_1 R1 R 2 R_2 R2两部分,计算切分点为s时的平方误差。
    ——选择平方误差最小的那个值作为该变量下的最优切分点。
    ——计算每个变量下的最优切分点,并比较在最优切分下的每个变量的平方误差,选择平 方误羞最小的那个变量,即最优变量。

  3. 根据最优特征与最优切分点(j,s),从现结点生成两个子结点,将训练数据集依变量配到两个子结点中去,得到相应的输出值。
    R 1 ( j , s ) = x ∣ x ( j ) ≤ s , R 1 ( j , s ) = x ∣ x ( j ) > s R_{1}(j, s)=x \mid x^{(j)} \leq s ,R_{1}(j, s)=x \mid x^{(j)} > s R1(j,s)=xx(j)sR1(j,s)=xx(j)>s

    c ^ m = 1 N m ∑ x i ∈ R m ( j , s ) y i , x ∈ R m , m = 1 , 2 \hat{c}_{m}=\frac{1}{N_{m}} \sum_{x_{i} \in R_{m}(j, s)} y_{i}, \quad x \in R_{m}, \quad m=1,2 c^m=Nm1xiRm(j,s)yi,xRm,m=1,2

  4. 继续对两个子区域调用上述步骤,直至满足停止条件,即生成CART决策树。

f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) f(x)=\sum_{m=1}^{M} c_{m} I\left(x \in R_{m}\right) f(x)=m=1McmI(xRm)


回归树例题

拿西瓜为例,对于甜度这个特征,可以分成好吃和不好吃的西瓜两类,可以把连续变量的样本拿来进行划分:

「输入」:用 [0,0.5]来表示由不甜到甜的程度

「输出」:用 [1,10]来表示由不好吃到好吃的程度

甜度0.050.150.250.350.45
好吃的程度5.57.69.59.78.2

由于CART算法是二叉树,所以我们[每次划分只能划分成两类

比如:甜度 ≤ 0.1 \leq0.1 0.1和甜度>0.1 这样两类,然后可以再继续在甜度 >0.1这个范围内,以此类推,选择最优切分点继续划分。

第一次划分:以甜度s=0.1 进行划分

R 1 R_{1} R1

甜度0.05
好吃程度5.5

R 2 R_{2} R2

甜度0.150.250.350.45
好吃的程度7.69.59.78.2

R 1 R_{1} R1类平均值 c ^ 1 = 5.5 \hat c_1=5.5 c^1=5.5

R 2 R_{2} R2类平均值 c ^ 2 = 7.6 + 9.5 + 9.7 + 8.2 4 = 8.75 \hat c_2=\frac{7.6+9.5+9.7+8.2}{4}=8.75 c^2=47.6+9.5+9.7+8.2=8.75

代入平方误差公式
min ⁡ j , s [ min ⁡ c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min ⁡ c e ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] = 0 + ( 7.6 − 8.75 ) 2 + ( 9.5 − 8.75 ) 2 + ( 9.7 − 8.75 ) 2 + ( 8.2 − 8.75 ) 2 = 3.09 \min _{j, s}\left[\min _{c_{1}} \sum_{x_{i} \in R_{1}(j, s)}\left(y_{i}-c_{1}\right)^{2}+\min _{c_{e}} \sum_{x_{i} \in R_{2}(j, s)}\left(y_{i}-c_{2}\right)^{2}\right]\\ =0+(7.6-8.75)^2+(9.5-8.75)^2+(9.7-8.75)^2+(8.2-8.75)^2=3.09 j,sminc1minxiR1(j,s)(yic1)2+ceminxiR2(j,s)(yic2)2=0+(7.68.75)2+(9.58.75)2+(9.78.75)2+(8.28.75)2=3.09
同理

第二次划分:以甜度s=0.2 进行划分,得到平方误差为3.53

第三次划分:以甜度s=0.3进行划分,得到平方误差为9.13

第四次划分:以甜度s=0.4 进行划分,得到平方误差为11.52

比较四次的结果,选择平方误差最小值的的点作为切割点,即s=0.1为切割点

输出CART回归树模型:
f ( n ) = { 5.5 , s ≤ 0.1 8.75 , s > 0.1 f(n)= \begin{cases} 5.5, & s \leq 0.1 \\ 8.75, & s>0.1 \end{cases} f(n)={5.5,8.75,s0.1s>0.1
剩下的部分还可以对s>0.1区域进行回归划分。

总结:

通过对【连续】 变量进行划分,转换为【离散】的变量来进行计算,那么就和之前的分类树模型相通,这也就是为什么常见的都是CART分类树模型啦。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随机森林是现代机器学习中一个常用且强大的算法,它可以用于分类和回归问题。下面是基于cart决策树的随机森林回归算法的MATLAB代码: ```matlab %% 导入数据 load housing %% 随机森林回归算法 rng(1); % 控制随机数生成器的状态,以确保结果可重复 numTrees = 100; % 森林中树的数量 M = round(size(trainData,1)/3); % 每棵树使用的样本数量 N = size(trainData,2); % 样本特征数量 Nsplit = 20; % 每个节点的最大分裂次数 tree = cell(numTrees,1); % 存储每棵树的数据结构 for i = 1:numTrees % 随机抽取M个样本 idx = randsample(size(trainData,1), M, true); data = trainData(idx,:); % 随机抽取Nsplit个特征 vars = randsample(N, Nsplit, true); % 构建树 tree{i} = fitrtree(data(:,vars), data(:,end),'MinLeafSize',5); end % 测试 testLabels = zeros(size(testData,1),numTrees); for i = 1:numTrees % 对每棵树进行预测 testLabels(:,i) = predict(tree{i}, testData(:,vars)); end % 每棵树的预测值求平均得出最终预测值 finalPrediction = mean(testLabels,2); mse = sum((finalPrediction - testLabels(:,end)).^2)/size(testData,1); fprintf('Mean Squared Error = %.2f\n',mse); % 画出第一棵树 view(tree{1},'Mode','graph'); ``` 代码的注释已经非常详细,这里只是简单说明一下算法的流程。首先,随机抽取M个样本和Nsplit个特征,使用这两个随机样本集合构建一棵决策树。随机抽取数据和特征是随机森林的核心之一,它可以避免决策树算法中过拟合的问题。重复上述过程100次,就得到了100棵树。对测试集合中的每个样本,将它们送入这100棵树中,每棵树都会输出一个预测值。将这些预测值求平均,就得到了最终的预测值。最后,计算预测值与真实值之间的均方误差。如果需要,可以使用MATLAB自带的`view`函数画出一棵树的结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值