Cart决策树算法原理学习

一、分类树

1.1特征选择(基尼指数)

在构建cart决策树的时候,是通过选择基尼系数来评价特征的重要性,选择基尼指数最小的来作为划分依据。
基尼指数最早是应用在经济学当中,主要用来衡量收入分配公平度的指标,cart决策树中用它来衡量数据的不纯度或者不确定性
公式如下:
G i n i ( D ) = 1 − ∑ p i 2 Gini(D)=1-\sum{p_i}^{2} Gini(D)=1pi2
在分类问题中,样本点属于第i类的概率为pi
基尼指数越小,说明数据很纯。
G i n i ( D , a ) = ∑ v ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini(D,a)=\sum_{v} \frac{|D_v|}{|D|}Gini(D_v) Gini(D,a)=vDDvGini(Dv)
对于特征A,将集合D划分成D1和D2,基尼指数Gini(D,A)表示经过A=a划分后集合D的不确定性。
上述公式表示某个特征是a时,数据集根据这个特征的取值来划分成两个不同的数据集,在两个数据集中分别计算基尼指数。

1.2建树流程

举个例子:
在这里插入图片描述
这儿有个数据集
按工资这个特征算,工资中有三个数据是1,5个数据是0,那么可以划分成0,1两个数据集,这两个数据集分别在算基尼指数。注意算基尼系数是针对样本结果来说,这里3个中全部是好,5个中3个好,2个不好.
G i n i ( D , 工 资 ) = 3 8 ( 1 − ( 3 3 ) 2 − ( 0 3 ) 2 + 1 − ( 3 5 ) 2 − ( 2 5 ) 2 ) = 0.3 Gini(D,工资)= \frac{3}{8}(1-(\frac{3}{3})^2-(\frac{0}{3})^2+1-(\frac{3}{5})^2-(\frac{2}{5})^2)=0.3 Gini(D,)=83(1(33)2(30)2+1(53)2(52)2)=0.3
同理可以算的其他的特征:
在这里插入图片描述
注意这里面平台这个特征可以取三个值,所以对于每个特征取值的时候,要拆分为平台等于0和平台不等于0这样去计算。
得到所有的值,选择最小的基尼函数的特征作为划分依据。选择工资作为划分标准。
在这里插入图片描述
可以发现工资为1的工作都是1。
继续第二轮选择,除开工资,计算其他的特征
在这里插入图片描述
选择平台作为第二层划分的特征。
在这里插入图片描述
划分到这里之后,发现都是不好的数据了,停止划分,得到如下的一个决策树。
在这里插入图片描述
cart算法构造出来的决策树一定是2叉树。

二、回归树

2.1特征选择(平方误差)

回归树和分类树的区别在于标签是否连续,分类树的标签是工作好或者不好,回归树的标签是一系列连续的值来评价工作好坏情况。
回归树采取平方误差来选择特征划分。
如图,一个数据集如下:
在这里插入图片描述
那么平均误差计算为:在这里插入图片描述
可以看到数据的方差乘以数据的长度等于平方误差。

2.2建树流程

遍历所有特征,比如工资可以取0和1,那么可以把数据分为≤0的和大于0的两个数据集,计算两个数据集label的方差。分别乘上两个数据集的长度得到平均误差。
在这里插入图片描述

如上图,工资数据分为≤0的数据集的标签方差为0.1421,工资数据大于0的数据集的方差为0.0067,数据长度分别为5和3。得到如下公式。
黄色的部分是工资小于0的,绿色的部分是工资大于0的。
在这里插入图片描述
注意平台这个特征,也是要遍历所以特征的值,来把数据划分为两个部分。
可以发现工资的平方误差最小,所以选择工资这个特征作为第一层。
在剩下的数据中继续建树。
在这里插入图片描述
选择平台小于0作为划分特征。
直到划分到没有数据,停止建树。
回归树的叶子节点的取值等于该叶子节点里面所有的样本的label的平均值。
关于训练结束的标志:
1.确定叶子节点的个数或者树的深度
2.确定叶子节点包含的样本数
3.给定确定的精度

### CART决策树算法的工作原理 CART(Classification And Regression Trees)是一种经典的二叉决策树算法,由 Leo Breiman 等人在1984年提出[^1]。该算法可以用于分类和回归两种任务,并通过递归分裂的方式构建一棵二叉树。 #### 原理概述 CART的核心思想是通过对数据集进行递归分割来生成一颗二叉树结构。每次分割的目标是最小化某种衡量标准下的误差或不确定性。具体来说,在分类任务中,CART使用 **基尼指数** 来评估最佳分割点;而在回归任务中,则采用 **方差减少** 的策略[^2]。 --- ### 实现步骤 以下是基于CART算法的一般实现流程: #### 1. 数据准备 加载并预处理数据集,确保其满足建模需求。例如,对于鸢尾花数据集,可以通过 `sklearn` 提供的功能完成加载与划分操作: ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载数据集 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) ``` 此部分涉及将原始数据划分为训练集和验证集以便后续模型评估[^5]。 #### 2. 构建决策树模型 利用 `DecisionTreeClassifier()` 或者自定义逻辑创建一个 CART 决策树实例。默认情况下,它会自动选择最优参数来进行分类或回归分析。 ```python from sklearn.tree import DecisionTreeClassifier clf = DecisionTreeClassifier(random_state=42) # 初始化模型 clf.fit(X_train, y_train) # 使用训练数据拟合模型 ``` 这里调用了 scikit-learn 库中的方法快速搭建了一个基础版本的 CART 模型[^4]。 #### 3. 测试与评价 在独立的测试集合上运行预测功能,并计算相应的性能指标如准确度等。 ```python from sklearn.metrics import accuracy_score y_pred = clf.predict(X_test) # 对测试样本做出预测 accuracy = accuracy_score(y_test, y_pred) # 计算预测精度 print("模型准确率:", accuracy) ``` 最终输出的结果展示了当前配置下所建立模型的表现情况[^5]。 #### 4. 剪枝优化 为了防止过拟合并提升泛化能力,通常还需要引入剪枝机制调整树形大小。这一步骤可通过设置最大深度(`max_depth`)或其他超参限制生长规模,或者借助成本复杂度修剪法(Cost Complexity Pruning),依据特定公式 $ C_{\alpha}(T)=C(T)+\alpha |T| $ 进行动态控制[^3]。 --- ### 总结 综上所述,CART 决策树不仅具备强大的表达能力和直观可读的特点,而且适用于多种类型的监督学习问题解决之中。然而需要注意的是,由于其固有的局限性——比如容易受到噪声干扰以及难以适应增量更新模式等问题的存在,实际应用时往往还需结合具体情况采取额外措施加以改进。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值