数学建模系列_决策树

【前言】

数学建模备赛内容

参考视频:57 什么是决策树_哔哩哔哩_bilibili

【简介】

什么是决策树:

决策树(Decision Tree)是一种常用于机器学习和数据挖掘领域的监督学习算法,它用于建立一个类似于树状结构的模型,用于进行分类和回归任务。决策树模型基于一系列的决策规则,每个规则都将数据集中的样本分割成不同的子集,直到最终达到某个决策或目标。

在构建决策树模型时,算法会根据训练数据集中的特征和目标值来自动选择最优的分割点和规则,以最大程度地提高模型的预测性能。常见的决策树算法包括ID3、C4.5、CART(Classification and Regression Trees)以及随机森林(Random Forest)等。

决策树模型易于理解和解释,同时也具有一定的可解释性。它们适用于各种领域的问题,包括分类和回归任务。

【正文】

(一)理论部分

1. 决策树组成部分

决策树的主要组成部分包括以下几个要素:

  1. 根节点(Root Node):决策树的顶端节点,表示整个数据集。
  2. 决策节点(Decision Node):树中的内部节点,代表一个决策规则。它将数据集分割成不同的子集,每个子集对应一个特定的条件。
  3. 叶节点(Leaf Node):树中的叶子节点,表示最终的决策或预测结果。每个叶节点对应一个类别(用于分类问题)或一个数值(用于回归问题)。
  4. 分支(Branch):决策树中的连接线,连接节点表示数据集的分割。
  5. 特征(Feature):用于决策树节点分割的输入变量或属性。

决策树举例:

image-20240119172913219


2. 决策树的优缺点

优点:

  1. 易于理解和解释: 决策树的模型结构类似于人类的决策过程,因此非专业人员也能够理解和解释决策树模型的工作原理,这使得决策树在实际应用中非常受欢迎。
  2. 可处理混合数据类型: 决策树可以处理混合数据类型,包括数值型和类别型特征,无需进行太多的数据预处理。
  3. 能够捕捉特征的重要性: 决策树可以通过特征的分裂情况来衡量特征的重要性,从而可以用于特征选择和特征工程。
  4. 可用于分类和回归问题: 决策树不仅适用于分类问题,还可以用于回归问题,如树回归(Regression Trees)。
  5. 适用于大型数据集: 在一些变种算法的帮助下,决策树也可以应对大型数据集。

缺点:

  1. 容易过拟合: 决策树容易在训练数据上过度匹配,导致在新数据上性能下降。这可以通过剪枝等技术来缓解,或者使用随机森林等集成方法来减少过拟合的风险。
  2. 对噪声敏感: 决策树对数据中的噪声和离群点非常敏感,可能导致不稳定的模型。
  3. 不稳定性: 数据的小变化可能导致生成的决策树结构发生较大变化,这使得决策树在一些情况下不稳定。
  4. 不能很好地处理连续型数据: 决策树通常需要在连续型数据上进行离散化处理,这可能导致信息损失。
  5. 有时候不是最优选择: 决策树算法在每个节点上选择最优的分裂条件,但这不一定会产生全局最优的树结构,因此可能存在更好的模型。
  6. 容易忽略属性的相互关联

关键:对于单棵决策树而言,最重要的是它的深度

image-20240119173448610


3. 特征选择

补充:信息论

(1)信息熵

信息熵是一个用于衡量数据集的不确定性或混乱程度的指标。在决策树中,信息熵被用来度量一个节点的纯度,即在该节点中不同类别的样本混合程度。信息熵的取值范围为0到1,当数据集完全纯净(所有样本属于同一类别)时,信息熵为0;当数据集混合程度最高(各类别样本均匀分布)时,信息熵为1。

image-20240119174237451

(2)条件熵

新增一个属性作为条件后的信息熵

image-20240119174319658

(3)信息增益

原信息熵-条件熵

image-20240119174452666

(4)基尼指数

相较于信息熵,省略了对数运算,运算量较小,加快建模效率

image-20240119174904691

(1)ID3方法

根据信息增益来进行特征划分

工作原理

  1. 输入数据集:算法接受一个已标记的数据集,其中包含一系列样本,每个样本都有一组特征和一个类别标签。
  2. 特征选择:从所有可能的特征中选择一个最佳的特征来进行分割。这通常通过计算每个特征的信息增益(或信息熵)来完成。信息增益表示在选择某个特征后,数据集的不确定性减少的程度。信息增益高的特征被认为是最佳的选择。
  3. 创建一个决策节点:将选定的特征用于创建一个决策节点,并将数据集分割成多个子集,每个子集对应于该特征的不同取值。
  4. 递归操作:对每个子集重复上述步骤,直到满足停止条件。停止条件可以是以下之一:所有样本都属于同一类别,或者没有更多的特征可用于分割数据。
  5. 构建决策树:最终,算法通过连接所有的决策节点来构建一个完整的决策树,其中叶节点表示最终的分类结果。

局限

  1. 没有使用剪枝的方法
  2. 容易受信息增益影响
  3. 只能用于分类场景
  4. 多叉树,运算效率低

image-20240120082549154

(2)C4.5算法

根据信息增益率进行特征选择,引入悲观剪枝策略进行后剪枝

工作原理

  1. 特征选择:与ID3类似,C4.5也通过计算特征的信息增益来选择最佳的特征进行分割。不过,C4.5引入了一个新的概念,称为"信息增益比",以解决ID3在特征取值较多时的不公平问题。信息增益比考虑了特征取值的数量,从而更加公平地对待不同数量的取值。
  2. 处理连续型特征:C4.5能够处理连续型特征,而不仅仅是离散型特征。它通过尝试不同的分割点来将连续特征离散化,并选择最佳的分割点以最大化信息增益或信息增益比。
  3. 剪枝:C4.5引入了剪枝机制,以减小生成的决策树的复杂性,防止过拟合。剪枝是通过验证数据集来确定哪些子树可以被删除或保留的。这有助于生成更简单、更具泛化能力的决策树。
  4. 处理缺失值:C4.5能够处理数据中的缺失值,允许在构建决策树时处理包含缺失数据的样本。
  5. 生成决策树:通过递归地选择最佳特征、分割数据、剪枝等步骤,C4.5最终生成一个用于分类或回归的决策树。

image-20240120083129540

剪枝策略

预剪枝:基于贪心策略,容易陷入欠拟合

image-20240120083419791

后剪枝:

image-20240120083456303

局限

  1. 使用的是多叉树,效率较低
  2. 只能应用于分类
  3. 熵模型拥有大量耗时的对数运算
  4. 只适合于能驻留于内存的数据集
(3)CART算法

基于二叉树,既可分类也可回归,使用基尼指数来进行特征选择

工作原理

  1. 二叉树结构:CART算法生成的决策树是二叉树结构,每个非叶子节点都有两个子节点。这意味着每个特征在每个节点处只进行一次二分分割,而不是多分割。
  2. 特征选择:CART算法使用一种称为“Gini不纯度”(Gini impurity)的指标来选择最佳的特征进行分割。Gini不纯度度量了一个数据集中样本被错误分类的概率。算法选择能够最大程度地减小Gini不纯度的特征进行分割。
  3. 处理连续型特征:CART能够处理连续型特征,它通过尝试不同的阈值来将连续特征二分化,并选择最佳的分割点。
  4. 剪枝:CART算法也支持剪枝,以减小决策树的复杂性和防止过拟合。剪枝是通过验证数据集来确定哪些子树可以被删除或保留的。
  5. 多分类和回归:CART算法不仅可以用于分类问题,还可以用于回归问题。对于分类问题,CART生成的树将每个叶节点标记为某个类别。对于回归问题,叶节点包含一个连续的数值。

优点

image-20240120083829675

(4)三者差异

image-20240120084102131


(二)实践操作

重点是特征的选择和决策树生成时的特征顺序

1. 基于python

例子:脊椎动物分类

image-20240120084435793

image-20240120085454242

代码过程:

(1)读取数据

pd.read_csv…

image-20240120085658198

(2)数据预处理

选出需要使用的属性列以及输出列

image-20240120085650300

image-20240120090104986

对数据进行标准化处理

ss.fit_transform 会计算数据的均值(mean)和标准差(standard deviation)等统计信息,以便后续标准化操作。

ss.transform 会使用ss.fit_transform 计算得到的均值和标准差来对数据进行标准化。

from sklearn.preprocessing import StandardScaler

# 创建一个StandardScaler对象
ss = StandardScaler()

# 在训练数据上进行fit操作,计算均值和标准差
ss.fit(X_train)

# 使用transform方法对训练数据和测试数据进行标准化
X_train_scaled = ss.transform(X_train)
X_test_scaled = ss.transform(X_test)

image-20240120090028415

(3)决策树预测

image-20240120090212661

(4)决策过程可视化

使用tree.export_graphviz进行可视化

from sklearn.tree import DecisionTreeClassifier, export_graphviz
import graphviz

# 创建一个决策树分类器
clf = DecisionTreeClassifier()

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

# 使用tree.export_graphviz导出决策树的可视化表示
dot_data = export_graphviz(clf, out_file=None, 
                            feature_names=feature_names,  # 特征的名称
                            class_names=class_names,      # 类别的名称(如果是分类问题)
                            filled=True, rounded=True,    # 设置节点颜色和形状
                            special_characters=True)      # 允许特殊字符

# 使用Graphviz工具可视化决策树
graph = graphviz.Source(dot_data)
graph.render("decision_tree")  # 可选:保存为图像文件
graph.view("decision_tree")    # 可选:在默认的图像查看器中查看图像

image-20240120090301333

image-20240120092832238


2. 基于matlab

例子:鸢尾花分类

(1)读取数据
>> load('fisheriris');

得到两个表格,一个是类别(共有三类),一个是属性

image-20240120091432066

(2)使用matlab分类工具箱进行处理

选择使用列作为变量,验证方案选择五折交叉验证即可

image-20240120092051541

观察初始数据变量分布

image-20240120092115699

使用决策树进行分类

image-20240120092400053

得到正确率96%

matlab的工具箱可以用来初步选择建模方法

  • 19
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值