1.7
将机械学习大作业整理完成
大 作 业 报 告
课程名称 机器学习B 成绩
班级 信2305-1 姓名 赵梓腾 学号 20234278
名称:是否毒蘑菇二分类任务—“躺板板”预测
一、任务背景
毒蘑菇预测数据基于《Audobon Society Field Guide》是由UCI赞助的数据集,菌种范围包括与姬松茸和Lepiota科23种带鳃蘑菇相对应的假设样本的描述(第500-525页)。每种物种都被确定为绝对可食用、绝对有毒或食用性未知,不建议食用,后两类合并为有毒。《指南》明确指出,确定蘑菇的可食用性没有简单的规则。该数据集多次作为kaggle赛题,在2024年kaggle练习赛赛题中,即《有毒蘑菇的二分类预测》,参与队伍2000+,其中准确率达到98.5%以上的队伍高达300+。
本任务是一个二分类任务,与以往不同的是此数据集包含有缺失值数据,且属性值都是离散的,需要对这些数据进行分析,采用合理的方式进行处理。
另外,UCI还提供了另一版本的毒蘑菇数据集,本任务鼓励自行下载使用其它公开数据集对提供版本数据集进行补充或预处理以提高预测的准确率。
二、任务数据
本任务提供UCI《Mushroom》数据集,包含8124条样本,22个属性,两个标签作为输出,即有毒(p)和无毒(e)。属性描述和取值描述如下:
-
cap-shape: bell=b, conical=c, convex=x, flat=f, knobbed=k, sunken=s
-
cap-surface: ibrous=f, grooves=g, scaly=y, smooth=s
-
cap-color: brown=n, buff=b, cinnamon=c, gray=g, green=r, pink=p, purple=u, red=e, white=w, yellow=y
-
bruises?: bruises=t, no=f
-
odor: almond=a, anise=l, creosote=c, fishy=y, foul=f, musty=m, none=n, pungent=p, spicy=s
-
gill-attachment: attached=a, descending=d, free=f, notched=n
-
gill-spacing: close=c, crowded=w, distant=d
-
gill-size: broad=b, narrow=n
-
gill-color: black=k, brown=n, buff=b, chocolate=h, gray=g, green=r, orange=o, pink=p, purple=u, red=e, white=w, yellow=y
-
stalk-shape: enlarging=e, tapering=t
-
stalk-root: bulbous=b, club=c, cup=u, equal=e, rhizomorphs=z, rooted=r, missing=?
-
stalk-surface-above-ring: fibrous=f, scaly=y, silky=k, smooth=s
-
stalk-surface-below-ring: fibrous=f, scaly=y, silky=k, smooth=s
-
stalk-color-above-ring: brown=n, buff=b, cinnamon=c, gray=g, orange=o, pink=p, red=e, white=w, yellow=y
-
stalk-color-below-ring: brown=n, buff=b, cinnamon=c, gray=g, orange=o, pink=p, red=e, white=w, yellow=y
-
veil-type: partial=p, universal=u
-
veil-color: brown=n, orange=o, white=w, yellow=y
-
ring-number: none=n, one=o, two=t
-
ring-type: cobwebby=c, evanescent=e, flaring=f, large=l, none=n, pendant=p, sheathing=s, zone=z
-
spore-print-color: black=k, brown=n, buff=b, chocolate=h, green=r, orange=o, purple=u, white=w, yellow=y
-
population: abundant=a, clustered=c, numerous=n, scattered=s, several=v, solitary=y
-
habitat: grasses=g, leaves=l, meadows=m, paths=p, urban=u, waste=w, woods=d
输出分类标签包括:edible=e, poisonous=p。
补充说明:本任务支持使用补充外部数据集,例如UCI数据集《Secondary Mushroom》,共有61068条样本,同样包含两个类别标签edible=e, poisonous=p,但含有20个属性,因此注意引入外部数据集需要进行数据预处理。
三、描述任务 -
导入数据集,返回当前数据的统计信息并进行阐述说明,以前6行为例进行结果展示。(10分)
-
数据分析和处理。包括对缺失值数据的处理和每个属性取值非数值离散数据的数值化两个任务,给出相应的处理方案并分别展示三条数据处理前后对比。(20分)
-
对数据集进行可视化处理,生成各特征之间关系的矩阵图,可用seaborn工具的pairplot ()方法进行绘图。(10分)
-
数据预处理,并将原始数据集划分为训练集和测试集,选用合适的机器学习算法对毒蘑菇数据集进行分类。(20分)
-
采用十交叉验证进行参数学习和模型评估。(20分)
-
预测结果分析及可视化,绘制混淆矩阵,分析毒蘑菇分类的查全率和查准率和F1值。通过分析模型分类结果,说明模型的性能。(20分)
四、结果及分析
简明结果
精度 1.0000 查准率 1.0000 查全率 1.0000 F1值 1.0000
详细方案和结果分析
解决方案 【包括预测分析的设计思路的具体实现过程或实现步骤】
-
缺失值数据处理方案
本任务中仅 stalk-root(菌柄根部)特征存在缺失值,共 2480 条,占比 30.53%,缺失值以 “?” 标记。针对该问题,最终采用众数填充策略,具体设计思路与实现步骤如下:
设计思路:stalk-root 作为分类变量,其取值无明确数值意义,仅代表形态类别(如球茎状、棒状等)。众数是该列出现频率最高的取值,能最大程度保留原始数据的分布特征,避免因填充方式不当导致的偏差。相比均值填充(适用于数值变量)、中位数填充(适用于有序分类变量)或删除缺失值(会损失 30% 以上样本,导致数据量不足),众数填充更适配分类变量的特性,且计算高效、易于实现。
实现步骤:第一步,统计 stalk-root 列非缺失值的分布情况,发现 “b”(球茎状)出现 3776 次,占非缺失值的 65.8%,确定其为众数;第二步,使用 sklearn 的 SimpleImputer 工具,设置 strategy='most_frequent',对 “?” 值进行批量填充;第三步,验证填充结果,确认填充后该列无缺失值,数据完整性达 100%。 -
非数值数据数值化方案
数据集所有 22 个特征及 1 个标签均为字符串类型的离散变量,无法直接输入机器学习模型,因此采用LabelEncoder 编码方案,具体设计逻辑如下:
设计思路:非数值数据的数值化需满足两个核心要求:一是保留类别间的区分度,二是适配模型的输入格式。LabelEncoder 能将每个分类特征的唯一取值映射为 0 开始的连续整数(如 class 列 e→0、p→1),既不改变特征的本质属性,又能将数据转换为模型可处理的数值格式。相比 OneHotEncoder(会产生高维稀疏矩阵,增加计算复杂度),LabelEncoder 更适合本数据集的特征特点 —— 多数特征取值较多(如 cap-color 有 10 种取值),OneHotEncoder 会导致维度爆炸,而 LabelEncoder 能保持数据维度简洁,且不影响树模型、集成模型的分类效果。
实现步骤:第一步,初始化 LabelEncoder 编码器,为每个特征列创建独立的编码实例(避免不同列的取值混淆);第二步,遍历所有特征列,对每个列的取值建立映射表(如 odor 列 a→0、l→3、p→6 等),并保存映射关系以便后续解释;第三步,将各列的字符串值替换为对应的整数编码,生成全数值化的数据集;第四步,验证编码结果,确保无遗漏或错误映射,标签列编码后 0 代表无毒(e)、1 代表有毒(p),符合分类任务要求。 -
分类算法设计思路或方案
为确保分类结果的鲁棒性和最优性,选择 4 类典型机器学习算法进行对比,覆盖线性 / 非线性、单一 / 集成模型,具体设计思路如下:
设计思路:毒蘑菇分类任务的核心目标是 “零漏检”(有毒蘑菇查全率 100%),同时兼顾准确率和泛化能力。通过多算法对比,既能验证特征与标签的关联模式,又能筛选出最适配任务的模型。
算法选型及理由:①逻辑回归(线性模型):作为基准模型,验证特征的线性可分性,其计算速度快、可解释性强,能为后续模型提供性能参照;②决策树(非线性模型):能自动捕捉特征间的非线性关联,输出清晰的决策规则(如 “odor=6 则分类为有毒”),便于理解模型的判断逻辑;③随机森林(集成模型):融合 100 棵决策树,通过投票机制降低单棵树的过拟合风险,提升泛化能力和稳定性,是处理分类任务的优选模型;④支持向量机(非线性模型):采用径向基核函数(RBF),能在高维特征空间中构建最优分类超平面,适配复杂的特征关系。
超参数设置:逻辑回归设置 max_iter=1000(确保模型收敛)、random_state=42(固定随机种子,保证结果可复现);决策树仅设置 random_state=42;随机森林设置 n_estimators=100(平衡性能与计算效率)、random_state=42;支持向量机设置 kernel='rbf'、random_state=42,保持默认惩罚系数 C=1.0。 -
具体实现过程或实现步骤
整体实现流程遵循 “数据导入→预处理→模型训练→评估→可视化→分析” 的机器学习标准流程,具体步骤如下:
数据导入与校验:加载本地 agaricus-lepiota.data 数据集,定义特征列名,验证文件路径有效性;通过 shape、dtypes、value_counts 等方法进行基础统计分析,明确数据规模、类型、缺失值和类别分布。
数据预处理:执行缺失值填充(众数填充 stalk-root 列)和非数值数据编码(LabelEncoder 遍历所有列);按 7:3 比例分层抽样划分训练集和测试集,使用 stratify=y 确保两组数据的类别分布与原始数据集一致(训练集无毒 2945 条、有毒 2741 条,测试集无毒 1263 条、有毒 1175 条);对逻辑回归和支持向量机的输入特征进行标准化处理,消除量纲影响。
模型训练:依次训练 4 类模型,线性模型(逻辑回归、支持向量机)使用标准化数据,树模型(决策树、随机森林)直接使用原始编码数据,记录各模型的训练过程和测试集预测结果。
模型评估:计算各模型的测试集准确率,筛选出最优模型(随机森林);对最优模型进行十折交叉验证,评估其泛化稳定性;计算查准率、查全率、F1 值等核心指标,重点验证有毒蘑菇的识别效果。
可视化分析:绘制特征关系矩阵图(seaborn.pairplot),展示关键特征间的关联;绘制混淆矩阵热图,直观呈现分类结果;绘制特征重要性图,识别影响分类的核心特征。
结果分析:解读模型性能差异,分析核心指标的实际意义,提出潜在问题和改进思路。
结果展示 【包括每个任务点结果的展示】 -
展示前6条数据(结果截图,并标明图1. 原始数据展示)。
图1. 原始数据展示: -
展示三条缺失值处理后的数据结果(结果截图,并标明图2. 缺失值处理数据展示)。
图2. 缺失值处理数据展示:
-
展示三条数值化处理后的数据结果(结果截图,并标明图3. 数值化处理数据展示)。
图3. 数值化处理数据展示: -
数据可视化结果,即各特征之间关系的矩阵图(标明图4. 数据可视化)
图4. 数据可视化: -
混淆矩阵展示(标明图5. 分类混淆矩阵)
图5. 分类混淆矩阵: -
精度,查准率,查全率,FI值的结果截图(标明图6. 分类结果)
图6. 分类结果:
结果分析 【包括预测结果分析(包括对超参影响、精度、查准率、查全率、F1值的分析)、可能存在的问题、可提升的改进思路等】
- 核心指标分析
(1)模型性能对比分析
4 类模型的测试集准确率分别为:逻辑回归 0.9594、决策树 1.0000、随机森林 1.0000、支持向量机 1.0000。从结果来看,除逻辑回归外,其余三类模型均实现了 100% 的准确率,说明蘑菇的形态特征与毒性之间存在极强的关联,非线性模型能更充分地捕捉这种关系。
逻辑回归准确率较低的原因:逻辑回归作为线性模型,假设特征与标签之间存在线性关系,但本数据集的特征与毒性的关联多为非线性(如气味为 “p”(刺鼻味)则一定有毒,这种关系无法通过线性函数表达),因此线性模型难以完全拟合数据规律,导致部分样本分类错误。
决策树、随机森林、支持向量机表现优异的原因:决策树能通过多轮分支构建非线性决策边界,精准捕捉 “某特征取值→毒性” 的规则;随机森林融合多棵决策树的预测结果,降低了单棵树的过拟合风险,提升了模型的稳定性;支持向量机的径向基核函数能将数据映射到高维特征空间,构建最优分类超平面,适配复杂的特征关系。其中,随机森林作为集成模型,不仅准确率达 100%,且通过十折交叉验证验证,各折准确率均为 1.0000,平均准确率 1.0000±0.0000,稳定性显著优于单一模型,是本任务的最优选择。
(2)关键分类指标解读
以随机森林模型为例,其分类报告显示:无毒蘑菇(e)的查准率、查全率、F1 值均为 1.0000,有毒蘑菇(p)的三项指标也均为 1.0000。这一结果意味着:
查准率 1.0000:预测为无毒的样本 100% 为真无毒,预测为有毒的样本 100% 为真有毒,无任何误判情况,避免了 “无毒蘑菇误判为有毒” 的资源浪费和 “有毒蘑菇误判为无毒” 的安全风险。
查全率 1.0000:所有真实无毒和有毒的样本均被正确识别,无漏检情况,这对于毒蘑菇分类任务至关重要 —— 漏检有毒蘑菇可能导致严重的健康危害,而该模型实现了 100% 的查全率,完全满足实际应用的安全要求。
F1 值 1.0000:查准率和查全率的调和平均数达 1.0,说明模型在 “精准识别” 和 “全面覆盖” 之间达到了最优平衡,综合性能完美。
(3)交叉验证结果分析
随机森林的十折交叉验证结果显示,各折准确率均为 1.0000,平均准确率 1.0000±0.0000,无任何波动。这一结果表明:
模型泛化能力极强:在不同的数据子集上,模型均能保持 100% 的准确率,说明模型学习到的是数据的本质规律(特征与毒性的关联),而非训练数据的噪声,不存在过拟合问题。
数据划分合理:分层十折交叉验证确保了各子集的类别分布与原始训练集一致,避免了因数据划分导致的评估偏差,验证结果客观可信。
模型稳定性优异:交叉验证的标准差为 0,说明模型的性能不受数据抽样变化的影响,在新样本上的预测效果稳定,具备实际应用的可靠性。 - 特征重要性分析
随机森林模型的特征重要性排序显示,前 5 个关键特征依次为:气味(odor,0.286)、孢子印颜色(spore-print-color,0.142)、菌环类型(ring-type,0.118)、菌褶大小(gill-size,0.097)、菌柄表面纹理(stalk-surface-above-ring,0.076)。
气味(odor)作为最重要的特征,其重要性得分远超其他特征,这与生物学常识一致 —— 有毒蘑菇往往会产生特殊的气味(如刺鼻味、恶臭)作为防御机制,而无毒蘑菇多具有宜人气味(如杏仁味、茴香味)或无味。该特征的高重要性说明,气味是区分蘑菇毒性的最核心依据,这一发现可为实际蘑菇鉴别提供指导(如野外遇到气味刺鼻的蘑菇可直接判定为有毒)。
孢子印颜色、菌环类型、菌褶大小等特征也具有较高的区分价值,说明蘑菇的毒性是由多个形态特征共同决定的,模型能有效学习多特征的协同判别规则,而非依赖单一特征,进一步提升了分类结果的可靠性。 - 潜在问题与改进思路
(1)潜在问题
数据偏置风险:本数据集为假设样本,涵盖姬松茸和 Lepiota 科 23 种带鳃蘑菇,未覆盖自然界中所有蘑菇种类,模型在真实场景中对未见过的蘑菇种类的泛化能力有待验证。
特征局限性:数据集仅包含形态学特征,未考虑蘑菇的化学成分(如毒素含量)、生长环境(如海拔、湿度)等核心毒性因子,可能导致部分特殊蘑菇的分类偏差。
缺失值处理的局限性:众数填充虽然高效,但未考虑 stalk-root 特征与其他特征的关联(如菌柄根形态可能与菌柄形状、菌环类型相关),简单填充可能损失部分潜在信息。
超参数未优化:当前模型使用默认或经验超参数(如随机森林 n_estimators=100),未进行系统的超参数调优,可能存在进一步提升性能的空间(尽管当前准确率已达 100%,但调优可增强模型的泛化稳定性)。
(2)改进思路
数据扩充:引入 UCI 的《Secondary Mushroom》数据集(61068 条样本),该数据集包含相同的类别标签,但属性数量为 20 个,需通过特征对齐、数据融合等预处理步骤扩充样本量,覆盖更多蘑菇种类,提升模型的泛化能力。
特征工程优化:一是构建特征交叉(如 odor+gill-size 的组合特征),挖掘特征间的高阶关联;二是采用 KNN 填充或基于决策树的预测填充替代众数填充,利用特征间的关联关系更合理地补全缺失值;三是引入额外特征(如蘑菇的生长季节、地理位置等),丰富特征维度。
超参数调优:使用 GridSearchCV 或 RandomizedSearchCV 对随机森林的关键超参数(如 n_estimators、max_depth、min_samples_split 等)进行遍历搜索,找到最优参数组合,进一步提升模型的泛化稳定性。
算法扩展:尝试 XGBoost、LightGBM 等进阶集成算法,这些算法在处理分类任务时具有更强的特征捕捉能力和更快的训练速度,可能获得更优的性能;同时,可采用模型融合策略(如随机森林 + 支持向量机的投票融合),兼顾不同模型的优势,进一步降低分类风险。
可解释性提升:使用 SHAP 或 LIME 工具,对模型的决策过程进行可视化解释,明确每个特征对预测结果的贡献度,使模型不仅能 “准确分类”,还能 “说清为什么”,增强实际应用中的可信度。
posted on 2026-01-07 15:25 我爱玩原神(原神大王) 阅读(0) 评论(0) 收藏 举报
浙公网安备 33010602011771号