探索CART决策树:从原理到应用

目录

一、CART决策树的原理 

1. 决策树的生成

1.1 特征选择

 1.2 树的生成

2. 决策树的剪枝

二、CART决策树的特点

三、CART决策树的优缺点

四、代码示例


在机器学习领域,决策树是一种常见且强大的模型之一,而CART决策树则是其中的重要代表。本文将介绍CART决策树的原理、特点以及应用场景。

一、CART决策树的原理 

1. 决策树的生成

 CART决策树的生成是一个递归构建二叉决策树的过程。该过程主要包括特征选择和树的生成两个步骤。

1.1 特征选择

 分类树:使用基尼指数(Gini Index)作为特征选择的准则。基尼指数越小,表示样本集合的纯度越高。

对于给定的样本集合D,基尼指数Gini(D)的计算公式为:

Gini(p)=\sum_{k=1}^{k}p_{k}(1-p_{k})=1-\sum_{k=1}^{k}p_{k}^{2}

其中K表示数据集D中类的总数,p_{k}是样本集合D中属于第k类的样本子集。

如果样本集合D根据特征A是否取某一可能值a被分割成D和D两部分,即_{}

D_{1}=\left \{ \left ( x,y \right )\in D\mid A\left ( x \right )=a \right \}

D_{2}=D-D_{1} 

则在特征A的条件下,集合D的基尼指数定义为:

Gini\left ( D,A \right )=\frac{\left |D _{1} \right |}{\left | D \right |}Gini\left ( D_{1} \right )+\frac{\left |D _{2} \right |}{\left | D \right |}Gini\left ( D_{2} \right )

基尼指数 Gini(D)表示集合D的不确定性,基尼指数Gini(D,4)表示经 A=a分割后集合D的不确定性,基尼指数值越大,样本集合的不确定性也就越大。

回归树:使用均方误差(MSE)作为特征选择的准则。目标是找到一个分界点,使得按照该点划分后的数据集D1和D2的均方差最小。

 1.2 树的生成

 从根节点开始,递归地对每个节点进行以下操作:
在所有可能的特征A以及他们所有可能的切分点a中,选择基尼指数(或均方误差)最小的特征及其对应的切分点作为最优特征与最佳切分点。
依最优特征与最优切分点,从当前节点生成两个子节点,将训练数据集依特征分配到两个子节点中去。
对两个子节点递归调用上述步骤,直至满足停止条件(如节点中的样本个数小于预定的阈值,或样本集的基尼指数小于预定的阈值,或者没有更多特征)。

2. 决策树的剪枝

 CART决策树的剪枝是为了避免过拟合,主要目的是降低决策树的复杂度。剪枝过程通过损失函数最小化来实现,具体步骤如下:

从完整的决策树T0开始,自下而上地对各内部节点t计算剪枝前后的损失函数变化量g(t)。
剪去g(t)最小的子树Tt,得到新的子树T1,并将最小的g(t)设为α1。
如此剪枝下去,得到一系列子树T0, T1, ..., Tn,并在这些子树中通过交叉验证法选取最优子树Tα。

二、CART决策树的特点

  1. 二叉树结构:CART决策树是一棵二叉树,即树的每个节点只有两个子节点(左子节点和右子节点)。
  2. 分类与回归:CART决策树既能用于分类任务,也能用于回归任务。当用于分类任务时,CART采用GINI值作为节点分裂的依据;当用于回归任务时,CART采用均方误差(MSE)作为节点分裂的依据。
  3. 大样本统计方法:CART决策树是一种大样本统计方法,当样本量较小时,模型可能不稳定。
  4. 易于理解和解释:CART决策树的计算相对简单,易于理解和解释,且具有较强的可解释性。

三、CART决策树的优缺点

优点

  1. 计算简单,易于理解。
  2. 比较适合处理有缺失属性的样本。
  3. 不仅能够处理不相关的特征,还能在相对短的时间内对大型数据源得出可行且效果良好的结果。

缺点

  1. 不支持在线学习,即当有新样本产生时,需要重新构建决策树模型。
  2. 容易出现过拟合现象,生成的决策树可能对训练数据有很好的分类能力,但对未知的测试数据却未必有很好的分类能力。
  3. 对于连续型特征的处理相对较弱。
  4. 对数据集中的噪声和缺失值较为敏感,需要进行数据预处理。

四、代码示例

# 导入所需的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建CART决策树模型
clf = DecisionTreeClassifier()

# 在训练集上训练模型
clf.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = clf.predict(X_test)

# 计算模型准确率
accuracy = accuracy_score(y_test, y_pred)
print("模型准确率:", accuracy)

这段代码演示了如何使用CART决策树模型对鸢尾花数据集进行分类任务,并计算模型在测试集上的准确率。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值