网站建设服务合同交印花税吗,wordpress json数据,导购网站怎么做视频教学,杭州做网站hzyzeCART#xff08;Classification and Regression Tree#xff09;
CART#xff08;分类与回归树#xff09;是一种用于分类和回归任务的决策树算法#xff0c;提出者为 Breiman 等人。它的核心思想是通过二分法递归地将数据集划分为子集#xff0c;从而构建一棵树。CART …CARTClassification and Regression Tree
CART分类与回归树是一种用于分类和回归任务的决策树算法提出者为 Breiman 等人。它的核心思想是通过二分法递归地将数据集划分为子集从而构建一棵树。CART 算法既可以生成分类树也可以生成回归树。 1. CART 的特点
二叉树结构CART 始终生成二叉树每个节点只有两个分支左子树和右子树。分裂标准不同 对于分类任务CART 使用**基尼指数Gini Index**作为分裂标准。对于回归任务CART 使用**最小均方误差MSE**作为分裂标准。支持剪枝通过后剪枝减少过拟合。处理连续和离散数据支持连续特征的划分点选择。 2. CART 的基本流程
输入训练数据集 D目标变量类型分类或回归。递归分裂 按照基尼指数分类或均方误差回归选择最佳划分点。对数据集划分为两个子集递归构造子树。停止条件 节点样本数量小于阈值。划分后不再能显著降低误差。剪枝 通过校验集性能优化剪去不显著的分支。输出最终的二叉决策树。 3. 分类树
(1) 基尼指数
基尼指数Gini Index用于衡量一个节点的“纯度”越小表示越纯 其中
类别 k 的样本数量。K类别的总数。
节点分裂的基尼指数计算为 最佳划分点是使 最小的特征和对应的划分点。 (2) 示例分类树
数据集
天气温度湿度风力是否运动晴天30高弱否晴天32高强否阴天28高弱是雨天24正常弱是雨天20正常强否 计算每个特征的基尼指数 对离散特征如天气分别计算不同类别划分后的基尼指数。对连续特征如温度尝试所有划分点计算每个划分点的基尼指数。 选择最优特征和划分点 选择基尼指数最小的划分点。 生成子树 对每个子集递归分裂直到满足停止条件。 4. 回归树
(1) 分裂标准
对于回归任务CART 使用**均方误差MSE**作为分裂标准 其中
第 i 个样本的目标值。节点中所有样本目标值的均值。
节点分裂的误差计算为 最佳划分点是使 最小的特征和对应的划分点。 (2) 示例回归树
假设我们有如下数据集目标值为房价
面积平方米房价万元5015060180702108024090270 尝试划分点 例如划分点为 656565。左子集{50,60}右子集{70, 80, 90}。 计算误差 左子集的均值。右子集的均值。计算分裂后的总均方误差。 选择最佳划分点 选择误差最小的划分点继续构造子树。 5. 剪枝
CART 使用后剪枝来防止过拟合 生成完全生长的决策树。 计算子树的损失函数 其中 第 i 个叶子节点。叶子节点的数量。α正则化参数控制树的复杂度。 剪去对验证集性能提升不大的分支。 6. CART 的优缺点
优点
生成二叉树逻辑清晰易于实现。支持分类和回归任务。支持连续特征和缺失值处理。剪枝机制增强了泛化能力。
缺点
易受数据噪声影响可能生成复杂的树。对高维数据表现一般无法处理稀疏特征。生成的边界是轴对齐的可能不适用于复杂分布。 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 是机器学习中非常经典的算法同时也是随机森林、梯度提升决策树等模型的基础。