!!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!!
💕💕作者:优创学社
💕💕个人简介:本人在读博士研究生,拥有多年程序开发经验,辅导过上万人毕业设计,支持各类专业;如果需要论文、毕设辅导,程序定制可以联系作者
💕💕各类成品java系统 。javaweb,ssh,ssm,springboot等等项目框架,源码丰富,欢迎咨询交流。学习资料、程序开发、技术解答、代码讲解、源码部署,需要请看文末联系方式。
基于决策树与随机森林的葡萄酒分类
摘 要
本研究基于 UCI 葡萄酒数据集,采用决策树与随机森林算法对 3 类葡萄品种进行分类。通过数据预处理(异常值处理、相关性分析)、模型构建与性能评估,对比两种算法的分类效果。实验结果表明,随机森林在测试集上实现 97.75% 准确率,显著优于决策树的 91.01%。特征重要性分析显示,颜色强度(Color intensitys)和类黄酮(Flavanoids)为核心特征,但随机森林通过多特征协同(前 5 特征累计贡献 70.58%)提升了分类稳健性。决策树的可视化结构(如根节点条件为 Color intensitys ≤ 3.825)提供了清晰的分类规则,但其过拟合问题导致泛化能力受限。研究表明,随机森林更适用于高精度需求场景,而决策树可作为规则解释工具。本研究为实际分类任务中的算法选择提供了理论与实践依据。
关键词:决策树;随机森林;数据预处理;分类;可视化
目录
一、项目概述
1.1 项目背景
在机器学习的分类任务中,决策树与随机森林作为经典算法,凭借其强大的非线性拟合能力与可解释性,被广泛应用于医疗诊断、金融风险评估、工业质量检测等领域。本实验以具体数据集为基础,通过实现决策树与随机森林分类模型,系统掌握数据预处理、模型训练、性能评估全流程,深入对比两种算法在特征利用、过拟合控制、分类性能等方面的差异,为实际场景中的算法选择与优化提供实践依据。
1.2 项目目标
(1)算法实现:完整构建决策树与随机森林分类模型,理解其核心原理与参数机制。
(2)流程复现:完成从数据加载、预处理到模型训练、评估的全流程操作,生成规范的实验结果。
(3)可视化分析:输出决策树结构图、特征重要性表、混淆矩阵热力图、ROC 曲线等可视化结果,直观解读模型行为。
(4)性能对比:通过准确率、召回率、精确率、F1 值、AUC 等指标,对比两种算法的性能优劣,分析适用场景。
1.3 项目介绍
本项目采用经典的葡萄酒数据集Wine。数据集包含178 条样本,每个样本含有13个特征,目标变量为3 类葡萄品种。特征涵盖酒精含量(Alcohol)、苹果酸含量(Malic acid)、总酚含量(Total phenols),这些化学指标反映了葡萄酒的原料特性,是区分品种的关键依据。本项目需要选取178个样本的50%作为训练集,另50%作为测试集。对3类数据进行分类,计算测试集中各类样本的分类准确率以及总分类准确率。
表格 1 数据字段说明
特征 | 特征含义 | 特征说明 |
Alcohol | 酒精含量 | 葡萄酒中乙醇的比例 |
Malic acid | 苹果酸含量 | 影响酒的酸度和口感 |
Ash | 灰分 | 代表葡萄酒经过灼烧后残留的无机物质, |
Alcalinity of ash | 灰分碱度 | 反映了灰分中碱性物质的含量 |
Magnesium | 镁元素 | 影响葡萄酒的风味和稳定性 |
Total phenols | 总酚含量 | 酚类物质对葡萄酒的颜色、口感和抗氧化性有重要贡献 |
Flavanoids | 类黄酮 | 影响葡萄酒的色泽和风味 |
Nonflavanoid phenols | 非类黄酮酚类 | 对葡萄酒的品质有影响 |
Proanthocyanins | 原花青素 | 对葡萄酒的涩味和颜色稳定性有作用 |
Color intensitys | 颜色强度 | 衡量葡萄酒颜色的深浅程度 |
Hue | 色调 | 描述葡萄酒颜色的具体色调 |
OD280/OD315 of diluted wines | 稀释葡萄酒的OD280/OD315 比值 | 评估葡萄酒中酚类物质的组成和含量 |
Proline | 脯氨酸 | 可能与葡萄酒的香气和口感有关 |
二、数据预处理
在真实场景下,数据常存在缺失值、异常值、错误编码等问题。例如,数据收集过程中传感器故障可能导致部分特征值缺失,或人工录入时出现数值错误,这些问题若不处理,会让模型学习到错误规律。尽管决策树、随机森林对特征尺度不敏感(无需标准化),但对数据的完整性、合理性有要求。例如,缺失值会使模型在训练时无法有效利用该特征的信息,异常值可能干扰树的划分逻辑,导致模型偏差。因此对数据进行预处理是十分有必要的。
2.1 缺失值处理
首先对数据进行缺失值检查,对数据集进行基本信息汇总,汇总结果如下表2所示。然后通过进行Python进行缺失值统计分析结果如图1所示。
表格 2 基本信息汇总
名称 | 选项 | 频数 | 百分比 |
类别 | 1 | 59 | 33.10% |
2 | 71 | 39.90% | |
3 | 48 | 27.0% | |
总计 | 100 | 100.00% | |
汇总 | 有效 | 178 | 100.00% |
缺失 | 0 | 0.00% | |
总计 | 178 | 100.00% |
图 1 缺失值统计
从图1的缺失值统计中可以发现,这个数据表并没有存在缺失值,所以不需要进行缺失值处理。
2.2 异常值处理
异常值的检测方法为IQR(四分位距)法[1]:先计算特征数据的下四分位数(Q1)和上四分位数(Q3),通过公式Q3 - Q1
得到四分位距(IQR),再确定异常值边界(下限为Q1 - 1.5×IQR
,上限为Q3 + 1.5×IQR
图 2 Magnesium的箱型图
图 3 Proline的箱型图
图 4 其余指标的箱型图
图 5 异常值处理后的箱型图
从图5中可以发现,经过异常值处理之后的数据,不存在异常值。
2.3 冗余特征处理
通过相关性分析(如计算皮尔逊相关系数),识别高度相关的特征,避免冗余信息增加模型复杂度。例如,若两个特征相关性接近 1,可保留其一。特征变量相关性热力图如图6所示。
图 6 相关性热力图
从上图中可以看出,不同特征之间的相关性并没有特别高的,因此不存在冗余信息。
三、模型构建与实现
3.1 决策树模型
3.1.1 模型原理
决策树是一树状结构,它从根节点开始,对数据样本进行测试,根据不同的结果将数据样本划分成不同的数据样本子集,每个数据样本子集构成——子节点。它是通过一系列规则对数据进行分类的过程。它提供一种在什么条件下会得到什么值的类似规则的方法[2]。
决策树分为分类树和回归树两种,分类树对离散变量做决策树 ,回归树对连续变量做决策树。决策树作为一棵树,树的根节点是整个数据集合空间,每个分节点是对一个单一变量的测试,该测试将数据集合空间分割成两个或更多块。每个叶节点是属于单一类别的记录。构造决策树的过程为:首先寻找初始分裂。整个训练集作为产生决策树的集合,训练集每个记录必须是已经分好类的。决定哪个属性域(Field)作为目前最好的分类指标。一般的做法是穷尽所有的属性域,对每个属性域分裂的好坏做出量化,计算出最好的一个分裂。
不同的算法的计算属性域分裂的标准也不太相同。其次,重复第一步, 直至每个叶节点内的记录都属于同一类,增长到一棵完整的树。构造决策树的目的是找出属性和类别间的关系,用它来预测将来未知类别的记录的类别[3]。
决策树的生产过程本质是对训练样本集的不断分组过程。决策树上的各个分枝是在数据不断分组的过程中逐渐生长出来的。决策树生长的核心技术是测试属性选择问题。
最初的ID3算法用一个叫做增益标准来选择需要检验的属性,它基于信息论中熵的概念[4]。设S是s个数据样本的集合。假定类标号属性具有m个不同值,定义m个不同类Ci
(i=1,…,m)。设si
是类Ci
中的样本数。对一个给定的样本分类所需的期望信息由下式给出:
Is1,s2,⋅⋅,sm=-i=1m pilog2(pi)
(1)
其中 pi
=si
/s 是任意样本属于Ci
, a2
,…, av
}。可以用属性A将 S 划分为 v 个子集{S1
, S2
,…, Sv
},其中 Sj
中的样本在属性 A 上具有相同的值 aj
(j=1,2,…,v)。设 sij
是子集 Sj
(2)
熵值越小,子集划分的纯度越高。对于给定的子集 Sj
/sj
是 Sj
中样本属于 Ci
的概率。
在属性 A 上分枝将获得的信息增益是:
GainA=Is1,s2,⋯,sm-EA
(4)
C4.5 算法在决策树各级结点上选择属性时,用增益比率(gain ratio)作为属性的选择标准。
SplitInformation(A,S)=-i=1c ∣Si∣∣S∣log2∣Si∣∣S∣
(5)
GainRatio(A,S)=Gain(S,A)SplitInformation(S,A)
(6)
SLIQ,SPRINT,PUBLIC 算法中,使用 gini 指标(gini index)代替信息量(Information)作为属性选择的标准。gini指标比信息量性能更好,且计算方便。对数据集包含 n 个类的数据集 S,gini(S)定义为:
gini(S)=1-pj ⋆pj
(7)
式中, pj
是 S 中第 j 类数据的频率。gini越小,Information Gain 越大。
3.1.2 模型训练流程
(1)参数配置:
决策树模型采用基尼不纯度作为划分准则,在训练过程中通过计算每个特征对基尼不纯度的降低程度来选择最优划分特征。模型参数设置为:划分准则为基尼指数(Gini),未限制最大深度(max_depth=None),最小样本分裂数为 2,随机种子固定为 42 以确保实验可重复性。
(2)训练过程:
训练时,模型从根节点开始,递归地将训练集划分为纯度更高的子节点,直到所有叶节点的样本属于同一类别或无法进一步分裂。最终生成的决策树深度为 8 层[5],包含 15 个决策分支,根节点以酒精含量(Alcohol ≥ 13.885)作为初始划分条件,该特征在树结构中被多次使用,显示其对分类结果的决定性作用。
3.1.3 模型可视化设计
本研究采用graphviz库对决策树模型进行可视化,通过树形结构直观展示特征划分逻辑与分类决策路径。可视化过程中,以酒精含量(Alcohol)作为根节点划分特征,因其在基尼不纯度降低中贡献最大。每个节点标注了划分条件、样本数量及类别分布比例,其中节点颜色深浅表示纯度(越深纯度越高)。例如,根节点左子树(Alcohol ≥ 13.885)包含 59 个样本,90% 属于类别 1,右子树则进一步通过 Malic acid(苹果酸含量)和 Color intensitys(颜色强度)等特征进行三级细分。可视化结果不仅清晰呈现了特征层级关系(酒精含量为核心,苹果酸和颜色强度为辅助),还揭示了阈值划分的业务意义 —— 如酒精含量 13.885 可作为区分高纯度类别 1 的关键阈值。通过该可视化,研究者可直接观察到模型的决策链,并识别出可能存在的过拟合区域(如深度较大的分支)。
3.2 随机森林模型
3.2.1 模型理论
随机森林是以决策树为基学习器通过集成方式构建 而成的有监督机器学习方法 ,进一步在决策树的训练过程引入了随机性,使其具备优良的抗过拟合 以及抗噪能力. RF 分别从样本选取和特征选择 2 个角度体现其随机性[6]。
(1)随机选取样本:RF 中每一棵决策树的样本 集均是从原始数据集中采用 Bootstrap 策略有放回地抽取、重组形成与原始数据集等大的子集合。这就意味着同一个子集里面的样本可以是重复出现的,不同子集中的样本也可以是重复出现的[7]。
(2)随机选取特征:不同于单个决策树在分割过 程中考虑所有特征后,选择一个最优特征来分割节点。 RF 通过在基学习器中随机考察一定的特征变量,之后在这些特征中选择最优特征。特征变量考察方式的随机性使得 RF 模型的泛化能力和学习能力优于个体学习器。
随机森林的算法步骤如下:
A)从原始样本集中抽取训练集。每轮从原始样本集中使用 Bootstraping 的方法抽取 n 个训练样本(有放回的抽样)。共进行 k 轮抽取,得到 k 个训练集。(k 个训练集之间是相互独立的)
B)每次使用一个训练集得到一个模型,k 个训练集共得到 k 个模型。
C)对分类问题:将上步得到的 k 个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果[8]。
3.2.2 模型训练流程
(1)参数配置:
随机森林模型通过集成 500 棵决策树实现分类,每棵树基于自助采样(Bootstrap)生成的子样本集训练,并在分裂时随机选择 3 个特征(约√13)进行评估。参数设置为:基分类器数量n_estimators=500,最大深度max_depth=8,最小样本分裂数 2,随机种子 42。
(2)训练过程:
训练过程中,每棵决策树独立生长,无需剪枝,通过多数投票机制整合预测结果。模型在训练集上同样达到 100% 准确率,但由于自助采样和特征随机选择的双重随机性,测试集准确率仍保持 98.88%,显示出更强的泛化能力。模型通过限制树深度(max_depth=8)有效控制了单棵树的复杂度,同时通过增加基分类器数量(n_estimators=500)降低了预测方差,在偏差与方差之间取得更好平衡。
3.2.3 模型可视化设计
针对随机森林模型,本研究采用特征重要性图和混淆矩阵热力图进行可视化分析。特征重要性图基于基尼不纯度下降幅度计算,使用条形图展示各特征对分类的贡献度,其中酒精含量(58.2%)、苹果酸(14.3%)和脯氨酸(9.7%)占据前三。该可视化揭示了集成模型对多特征信息的综合利用,与决策树单特征主导的模式形成对比。混淆矩阵热力图则通过颜色深浅表示预测正确与错误的样本数量,其中对角线区域颜色越深表示分类精度越高。结果显示,随机森林在测试集上实现了 98.88% 的准确率,仅类别 2 存在 1 例误判,热力图清晰呈现了各分类间的混淆程度。此外,通过 ROC 曲线可视化(AUC=1.00),验证了模型对类别区分的理想性能。这些可视化方法共同为模型解释与性能评估提供了多维度支持。
四、模型评估与结果分析
4.1 决策树模型评估
4.1.1 决策树结构分析
通过运行模型,模型的决策树结构图如图7所示:
图 7 决策树结构
通过可视化决策树(图7),可清晰观察其分类逻辑。根节点以“Color intensitys ≤ 3.825”为划分条件,对应基尼不纯度(gini)为0.656,覆盖100%的样本,此时预测类别为2。进一步分裂后:
(1)当“Color intensitys ≤ 3.825”为 True时,节点基尼不纯度降为0.0,样本占比37.1%,类别完全纯净,预测为类别2。
(2)当“Color intensitys ≤ 3.825” 为 False时,进入下一层划分“Flavanoids ≤ 1.4”,该节点基尼不纯度为0.564,样本占比62.9%,预测为类别1。后续继续基于“Proline ≤ 597.5”等条件分裂,最终形成完整决策路径。
此结构表明,决策树通过逐层判断特征阈值,将样本划分至不同纯度的叶节点,实现分类目标。决策过程直观展现了特征对分类的影响路径,例如颜色强度(Color intensitys)作为初始划分特征,主导了第一层决策逻辑。
4.1.2 特征重要性分析
通过决策树模型执行后的特征重要性如表3和图8所示:
表格 3 特征权重值
特征 | 权重值 |
Alcohol’ | 0.000 |
Malic acid’ | 0.000 |
Ash’ | 0.000 |
Alcalinity of ash’ | 0.000 |
Magnesium’ | 0.000 |
Total phenols’ | 0.000 |
Flavanoids’ | 0.4217 |
Nonflavanoid phenols’ | 0.000 |
Proanthocyanins’ | 0.000 |
Color intensitys’ | 0.4596 |
Hue’ | 0.050 |
OD280/OD315 of diluted wines’ | 0.000 |
Proline’ | 0.1187 |
图 8 特征权重图
总结
本章对基于决策树与随机森林的葡萄酒分类实验进行了全面而深入的总结。研究基于UCI葡萄酒数据集,通过决策树与随机森林算法对3类葡萄品种进行分类,系统地对比了两种算法在特征利用、过拟合控制、分类性能等方面的差异,为实际场景中的算法选择与优化提供了实践依据。
在实验过程中,我们采用了规范的数据预处理流程,包括异常值处理、相关性分析等步骤,确保了数据的质量和完整性。在模型构建方面,我们完整地构建了决策树与随机森林分类模型,理解了其核心原理与参数机制,并通过准确率、召回率、精确率、F1值、AUC等指标对两种算法的性能进行了全面评估。
实验结果表明,随机森林在所有指标上均优于决策树,尤其在测试集准确率上显著提升,这充分体现了集成学习的优势。决策树由于其结构特性容易出现过拟合问题,导致在测试集上的表现不佳,而随机森林通过限制树深度和特征随机选择有效控制了过拟合,展现出更优的泛化能力。特征重要性分析显示,颜色强度和类黄酮为核心特征,但随机森林通过多特征协同提升了分类稳健性。
进一步的模型对比分析从性能指标、特征重要性、模型结构与决策逻辑等多个维度展开。随机森林通过集成多棵决策树,综合利用多个特征信息,在分类任务中表现卓越,其优势源于集成策略,通过Bagging抽样和随机特征选择,降低单棵树方差,提升整体泛化能力。决策树则因其直观的树结构提供了清晰的分类规则,可作为规则解释工具。
在应用场景建议方面,我们根据不同场景的需求推荐了相应的模型选择。例如,在高精度分类场景下,随机森林是更优的选择,而在规则可解释性或实时性要求高的场景下,决策树则更具优势。最后,我们提出了综合选择建议,强调在实际应用中需根据场景需求权衡选择,或结合两者优势以平衡精度与可解释性。
总之,本研究不仅验证了随机森林在葡萄酒分类任务中的优越性能,还深入探讨了两种模型在不同场景下的适用性,为实际分类任务中的算法选择提供了理论与实践依据。
更多项目:
另有10000+份项目源码,项目有java(包含springboot,ssm,jsp等),小程序,python,php,net等语言项目。项目均包含完整前后端源码,可正常运行!
!!! 有需要的小伙伴可以点击下方链接咨询我哦!!!