当前位置: 首页 > news >正文

【机器学习】机器学习的基本分类-监督学习-决策树-CART(Classification and Regression Tree)

CART(Classification and Regression Tree)

CART(分类与回归树)是一种用于分类和回归任务的决策树算法,提出者为 Breiman 等人。它的核心思想是通过二分法递归地将数据集划分为子集,从而构建一棵树。CART 算法既可以生成分类树,也可以生成回归树


1. CART 的特点

  1. 二叉树结构:CART 始终生成二叉树,每个节点只有两个分支(左子树和右子树)。
  2. 分裂标准不同
    • 对于分类任务,CART 使用**基尼指数(Gini Index)**作为分裂标准。
    • 对于回归任务,CART 使用**最小均方误差(MSE)**作为分裂标准。
  3. 支持剪枝:通过后剪枝减少过拟合。
  4. 处理连续和离散数据:支持连续特征的划分点选择。

2. CART 的基本流程

  1. 输入:训练数据集 D,目标变量类型(分类或回归)。
  2. 递归分裂
    • 按照基尼指数(分类)或均方误差(回归)选择最佳划分点。
    • 对数据集划分为两个子集,递归构造子树。
  3. 停止条件
    • 节点样本数量小于阈值。
    • 划分后不再能显著降低误差。
  4. 剪枝
    • 通过校验集性能优化,剪去不显著的分支。
  5. 输出:最终的二叉决策树。

3. 分类树

(1) 基尼指数

基尼指数(Gini Index)用于衡量一个节点的“纯度”,越小表示越纯:

Gini(D) = 1 - \sum_{k=1}^K \left(\frac{|D_k|}{|D|}\right)^2

其中:

  • D_k:类别 k 的样本数量。
  • K:类别的总数。

节点分裂的基尼指数计算为:

Gini_{split}(D) = \frac{|D_1|}{|D|} Gini(D_1) + \frac{|D_2|}{|D|} Gini(D_2)

最佳划分点是使 Gini_{split}(D) 最小的特征和对应的划分点。


(2) 示例:分类树

数据集

天气温度湿度风力是否运动
晴天30
晴天32
阴天28
雨天24正常
雨天20正常
  1. 计算每个特征的基尼指数

    • 对离散特征(如天气),分别计算不同类别划分后的基尼指数。
    • 对连续特征(如温度),尝试所有划分点,计算每个划分点的基尼指数。
  2. 选择最优特征和划分点

    • 选择基尼指数最小的划分点。
  3. 生成子树

    • 对每个子集递归分裂,直到满足停止条件。

4. 回归树

(1) 分裂标准

对于回归任务,CART 使用**均方误差(MSE)**作为分裂标准:

MSE(D) = \frac{1}{|D|} \sum_{i=1}^{|D|} \left(y_i - \bar{y}\right)^2

其中:

  • y_i:第 i 个样本的目标值。
  • \bar{y}​:节点中所有样本目标值的均值。

节点分裂的误差计算为:

MSE_{split}(D) = \frac{|D_1|}{|D|} MSE(D_1) + \frac{|D_2|}{|D|} MSE(D_2)

最佳划分点是使 MSE_{split}(D) 最小的特征和对应的划分点。


(2) 示例:回归树

假设我们有如下数据集(目标值为房价):

面积(平方米)房价(万元)
50150
60180
70210
80240
90270
  1. 尝试划分点

    • 例如,划分点为 656565。
    • 左子集:{50,60},右子集:{70, 80, 90}。
  2. 计算误差

    • 左子集的均值:\bar{y}_L = (150 + 180) / 2 = 165
    • 右子集的均值:\bar{y}_R = (210 + 240 + 270) / 3 = 240
    • 计算分裂后的总均方误差。
  3. 选择最佳划分点

    • 选择误差最小的划分点,继续构造子树。

 

5. 剪枝

CART 使用后剪枝来防止过拟合:

  1. 生成完全生长的决策树

  2. 计算子树的损失函数

    Cost(T) = \sum_{i=1}^n MSE(T_i) + \alpha \cdot |T|

    其中:

    • T_i:第 i 个叶子节点。
    • |T|:叶子节点的数量。
    • α:正则化参数,控制树的复杂度。
  3. 剪去对验证集性能提升不大的分支


6. CART 的优缺点

优点
  1. 生成二叉树,逻辑清晰,易于实现。
  2. 支持分类和回归任务。
  3. 支持连续特征和缺失值处理。
  4. 剪枝机制增强了泛化能力。
缺点
  1. 易受数据噪声影响,可能生成复杂的树。
  2. 对高维数据表现一般,无法处理稀疏特征。
  3. 生成的边界是轴对齐的,可能不适用于复杂分布。

7. 与其他决策树算法的比较

特点ID3C4.5CART
划分标准信息增益信息增益比基尼指数 / MSE
支持连续特征
树结构多叉树多叉树二叉树
剪枝后剪枝后剪枝
应用分类分类分类与回归

 8. 代码实现

以下是一个简单的 CART 分类树实现:

import numpy as np# 计算基尼指数
def gini_index(groups, classes):total_samples = sum(len(group) for group in groups)gini = 0.0for group in groups:size = len(group)if size == 0:continuescore = 0.0for class_val in classes:proportion = [row[-1] for row in group].count(class_val) / sizescore += proportion ** 2gini += (1 - score) * (size / total_samples)return gini# 划分数据集
def split_data(data, index, value):left, right = [], []for row in data:if row[index] < value:left.append(row)else:right.append(row)return left, right# 示例数据
dataset = [[2.771244718, 1.784783929, 0],[1.728571309, 1.169761413, 0],[3.678319846, 2.81281357, 0],[3.961043357, 2.61995032, 0],[2.999208922, 2.209014212, 1],
]# 计算基尼指数
split = split_data(dataset, 0, 2.5)
gini = gini_index(split, [0, 1])
print("基尼指数:", gini)

输出结果

基尼指数: 0.30000000000000004

CART 是机器学习中非常经典的算法,同时也是随机森林、梯度提升决策树等模型的基础。

http://www.lryc.cn/news/497499.html

相关文章:

  • 【金猿CIO展】复旦大学附属中山医院计算机网络中心副主任张俊钦:推进数据安全风险评估,防范化解数据安全风险,筑牢医疗数据安全防线...
  • 工业机器视觉-基于深度学习的水表表盘读数识别
  • 基于ZooKeeper搭建Hadoop高可用集群
  • 力扣88题:合并两个有序数组
  • python 笔记之线程同步和死锁
  • SpringBoot小知识(4):高级配置知识与bean的绑定
  • Python毕业设计选题:基于大数据的淘宝电子产品数据分析的设计与实现-django+spark+spider
  • Lua面向对象实现
  • OpenCV的圆形检测‌HoughCircles
  • iOS视图控制器的生命周期及各阶段的作用
  • 四轮阿克曼(前轮转向、后轮驱动)车子仿真控制
  • Blender均匀放缩模型
  • Python基于 Opencv+wxPython 的人脸识别上课考勤系统,附源码
  • 【AI工具】强大的AI编辑器Cursor详细使用教程
  • DApp开发与APP开发的五大区别
  • 哪款云手机适合多开?常用云手机功能对比
  • Python几种常用数据结构(重制版)
  • C++ 游戏开发:开启游戏世界的编程之旅(2)
  • 用 Python 做数据分析需要掌握哪些基础?
  • UE5 像素流进行内网https证书创建
  • Envoy-istio
  • CTF-PWN: WEB_and_PWN [第一届“吾杯”网络安全技能大赛 Calculator] 赛后学习(不会)
  • 【数据结构与算法】排序算法(上)——插入排序与选择排序
  • Linux操作系统性能优化
  • iOS与Windows间传文件
  • 在数据库设计中同步冗余字段的思考与实践
  • Qt 带数据库功能的项目部署之后,数据库无法打开问题解决方法
  • 汇编语言学习-二
  • 【嘟嘟早教卡】 小程序源码分享带后台管理
  • JavaEE-经典多线程样例