赞
踩
决策树(Decision Tree)是一种基于树结构的分类或回归模型,在机器学习领域中被广泛应用。
决策树模型将样本数据集根据特征属性进行划分,每个节点代表一个特征属性,每个分支代表该特征属性的取值,叶子节点代表分类结果。这样,样本数据集就被划分为一系列子集,每个子集对应决策树的一个叶子节点。
决策树的构建过程是递归的,从根节点开始,选择一个最优的特征属性进行划分,然后递归地对每个子节点进行相同的操作,直到所有叶子节点都代表了一个类别或达到了停止条件,如达到最大深度、样本数量小于阈值等。
决策树模型具有易解释、易实现、效果稳定等优点,但也存在容易过拟合、对噪声敏感等缺点。针对这些问题,可以通过剪枝和集成学习等技术进行优化。
优点:
1.易于理解和解释。由于决策树模型基于树形结构,因此可以直观地展示特征属性之间的关系,易于解释。
2.适用于多种类型的数据。决策树模型可以处理分类、回归等不同类型的数据。
3.能够处理非线性关系。与线性模型不同,决策树模型可以处理非线性关系,适用于复杂的问题。
缺点:
1.容易过拟合。当决策树过于复杂时,容易出现过拟合现象,影响模型的泛化能力。
2.对噪声敏感。样本数据中存在异常值或噪声时,会影响决策树的划分效果。
3.不稳定。当样本数据发生变化时,决策树模型可能会发生较大的变化,导致模型不稳定。
应用场景:
1.分类问题。对于多分类问题,决策树模型可以构建一棵多叉树,每个叶子节点代表一个类别。
2.回归问题。对于连续型变量的预测问题,决策树模型可以构建一棵回归树,每个叶子节点代表一个预测值。
3.特征选择。通过分析决策树模型的划分过程,可以确定哪些特征属性对分类或回归具有更大的贡献。
4.集成学习。决策树模型可以与其他模型进行集成学习,如随机森林、梯度提升树等。
决策树是一种基于树形结构进行决策分析的模型,其结构由节点和边组成。
根节点:根节点位于决策树的最顶层,代表整个样本集合,并根据某个特征属性进行分裂,形成若干个子节点。
内部节点:内部节点代表一个特征属性,它分裂出若干个子节点,对应着该属性的不同取值。
叶节点:叶节点代表分类或回归的结果,没有子节点。
分支:分支使得节点相互连接,表示不同的分支条件。
深度:从根节点到叶节点的路径长度称为深度。
决策树结构基本示例:
决策树结构举例:
这里是西瓜书中对应如何辨别好瓜坏瓜的决策树,从中可以完整的看出决策树的结构。
图中,根节点为纹理,内部节点为根蒂、触感、色泽,叶节点为好瓜坏瓜。
构建决策树的基本流程包括以下步骤:
数据预处理:收集并准备用于构建决策树的数据集。包括数据清洗、处理缺失值和异常值等。
特征选择:选择最佳的特征属性作为初始根节点。常用的特征选择算法包括信息增益、信息增益比、基尼系数等。
构建节点:将选定的特征属性应用于当前节点,根据特征属性的不同取值划分出子节点。每个子节点代表一个特征属性取值。
递归分裂:对于每个子节点,重复步骤2和步骤3,直到满足终止条件。终止条件可以是达到最大深度、样本数量小于阈值等。
叶节点标记:对于每个叶节点,根据样本集合中的类别标签进行分类或预测结果的标记。
剪枝处理:对构建好的决策树进行剪枝处理,以避免过拟合。常见的剪枝方法有预剪枝和后剪枝。
决策树的评估:使用独立的测试数据集对决策树进行评估,计算准确率、精确率、召回率等指标,判断模型的性能。
决策树的应用:使用构建好的决策树进行分类或预测任务。对新样本进行测试时,根据特征属性逐步下行,最终到达叶节点得到分类或预测结果。
信息增益是一种常用的特征选择准则,用于决策树算法中的特征选择步骤。信息增益的目标是选择对分类具有最大区分度的特征。
信息增益的计算基于信息熵的概念,信息熵衡量了样本集合的不确定性。信息熵的值越大,样本集合的不确定性就越高,反之亦然。信息增益是指在已知某个特征属性的条件下,对样本集合的不确定性减少的程度。
计算信息熵:
其中,p 表示样本属于某个类别的概率。
假定离散属性 a 有 V 个可能的取值 ,若使用a 来对样本集 D 进行划分,则会产生 V 个分支结点,其中第 v 个分支结点包含了 D 中所有在属性a 上取值为 的样本,记为Dv,我们可根据式 (4.1) 计
算出Dv 的信息熵。
再考虑到不同的分支结点所包含的样本数不同,给分支结点赋予权重 |Dv| / |D| , 即样本数越多的分支结点的影响越大,
计算出用属性a 对样本集 D 的信息增益:
增益率是在信息增益的基础上引入了对特征取值数目的惩罚,用于解决信息增益偏好于具有更多取值的特征的问题。
称为属性a的“固有值” ,属性a的可能取值数目越多(即V越大),则IV(a)的值通常就越大
基尼指数(Gini Index)是衡量样本集合的不纯度或杂质程度的一种指标,常用于决策树算法中的特征选择和节点划分。
基尼指数的计算基于样本集合中不同类别的分布情况。对于一个具有K个类别的样本集合,基尼指数可以表示为:
Gini(D)越小,数据集D的纯度就越高。
给定数据集D,属性a的基尼指数定义为:
剪枝处理
剪枝处理通过删减或跳过一些无需进一步探索的分支或节点,以减少搜索空间的大小。这样做可以节省计算资源,并加速算法的执行。剪枝处理的关键在于确定哪些分支或节点可以被剪掉,以及何时进行剪枝操作。
决策树算法中,剪枝处理被用来防止过拟合。决策树是一种用于分类和回归的机器学习算法,通过逐步划分特征空间来构建树形结构。但如果决策树过于复杂,可能会对训练数据过度拟合,导致在新数据上的泛化性能下降。剪枝处理可以通过删除一些叶子节点或合并一些相似的节点来简化决策树,以避免过拟合问题。
决策树算法中剪枝处理通常有两种:
预剪枝: 预剪枝是在构建决策树的同时进行剪枝操作。在每个节点进行划分之前,通过一些预定义的条件来判断是否应该继续划分子节点,从而避免生成过于复杂的树结构。
预剪枝可以有效地减少决策树的规模和复杂度,防止过拟合问题的发生。然而,它可能会导致欠拟合,因为可能会提前停止划分,忽略了一些潜在的划分特征。
后剪枝: 后剪枝是在构建完整的决策树后进行剪枝操作。它先使用训练数据构建完整的决策树,然后通过剪掉一些子树或叶子节点来简化树结构。
后剪枝通过在验证集上评估剪枝效果,可以更准确地选择剪枝点,避免过拟合问题,并提高模型的泛化能力。
本次实验中使用了VS提供的鸢尾花数据集作为示例数据
- from sklearn.datasets import load_iris
- from sklearn.tree import DecisionTreeClassifier, plot_tree
- import matplotlib.pyplot as plt
-
- # 加载数据集
- iris = load_iris()
-
- # 定义决策树模型
- clf = DecisionTreeClassifier()
-
- # 训练模型
- clf.fit(iris.data, iris.target)
-
- # 绘制决策树
- plt.figure(figsize=(10, 6))
- plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=list(iris.target_names))
- plt.show()
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。