机器学习作业
一、问题描述(4分)
手写数字识别是计算机视觉和模式识别领域的经典问题,广泛应用于邮政编码识别、银行支票处理、文档数字化等实际场景。本任务旨在通过机器学习算法,实现对手写数字图像(0-9)的自动分类识别。
基于sklearn内置的digits手写数字数据集,分别使用决策树、随机森林和KMeans聚类三种机器学习算法,完成手写数字的分类识别和聚类分析,对比不同算法的性能表现。
二、数据集介绍(3分)
| 项目 | 内容 |
|---|---|
| 数据集名称 | sklearn digits(手写数字识别数据集) |
| 样本数量 | 1797条(满足≥1000条要求) |
| 特征数量 | 64个(满足≥5个要求) |
| 类别数量 | 10类(数字0-9) |
| 数据来源 | UCI机器学习库,sklearn.datasets.load_digits() |
| 授权方式 | BSD开源协议 |
| 适用场景 | 多分类任务、图像识别、模式识别 |
每个样本是一个8×8像素的手写数字图像,像素值范围为0-16(灰度值),将图像矩阵展平为64维特征向量。数据集包含1797个样本,每个数字类别约有180个样本,类别分布较为均衡。数据来自43位手写者,经过预处理统一为8×8像素格式。
三、数据集预处理和可视化(8分)
数据预处理
采用分层随机划分策略,将数据集按8:2比例划分为训练集和测试集。训练集1437个样本,测试集360个样本,使用stratify=y参数保证类别分布一致。使用StandardScaler对特征进行标准化处理,公式为z=(x-μ)/σ,消除量纲差异,加快算法收敛。
数据可视化
从数据集中选取10个样本展示,可直观看到手写数字为8×8像素灰度图,不同数字书写风格存在差异,部分数字形状相似存在识别难度。各类别样本数量均衡,无类别不平衡问题。
四、三种算法的基本原理(15分)
4.1 决策树
决策树是基于树结构进行决策的监督学习算法。核心原理:(1)特征选择——使用基尼指数选择最优划分特征;(2)树的构建——从根节点递归划分;(3)剪枝处理——限制最大深度和最小样本数防止过拟合。优点是模型直观、可解释性强;缺点是容易过拟合、对噪声敏感。
4.2 随机森林
随机森林是集成学习算法,采用Bagging策略。核心原理:(1)Bootstrap采样——有放回抽取多个子数据集;(2)随机特征选择——节点分裂时随机选择部分特征;(3)多数投票——综合所有决策树预测结果。优点是泛化能力强、可评估特征重要性;缺点是可解释性差、训练时间长。
4.3 KMeans聚类
KMeans是无监督学习算法,迭代划分K个簇。核心原理:(1)k-means++初始化;(2)将样本分配到最近簇中心;(3)重新计算簇中心;(4)重复直到收敛。优点是简单高效;缺点是需预先指定K值、假设簇为球形。
| 算法 | 类型 | 核心思想 | 优点 | 缺点 |
|---|---|---|---|---|
| 决策树 | 监督-分类 | 递归划分特征空间 | 可解释性强 | 易过拟合 |
| 随机森林 | 监督-分类 | Bagging集成 | 泛化能力强 | 可解释性差 |
| KMeans | 无监督-聚类 | 迭代最小化距离 | 简单高效 | 需指定K值 |
五、三种算法实现的关键代码(30分)
完整代码见附件ml_homework.py。
决策树实现:使用DecisionTreeClassifier创建分类器,设置max_depth=10、min_samples_split=5、min_samples_leaf=2参数,调用fit()训练模型,predict()预测,用accuracy_score、classification_report、confusion_matrix评估性能。
随机森林实现:使用RandomForestClassifier创建分类器,设置n_estimators=100、max_depth=15参数,使用n_jobs=-1并行训练,通过feature_importances_获取特征重要性。
KMeans聚类实现:使用PCA降维到2维,创建KMeans聚类器设置n_clusters=10、init=k-means++、n_init=10参数,用轮廓系数等评估聚类效果。
六、算法运行的结果(30分)
6.1 分类算法结果
| 算法 | 测试集准确率 | 宏平均F1 |
|---|---|---|
| 决策树 | 82.22% | 0.82 |
| 随机森林 | 96.39% | 0.96 |
决策树中数字0识别最好(精确率90%,召回率97%),数字8最差(召回率69%)。随机森林所有数字F1均≥0.90,数字2、4、5、6达到0.99。
6.2 聚类算法结果
| 评估指标 | 数值 | 说明 |
|---|---|---|
| 轮廓系数 | 0.1824 | 聚类紧密度一般 |
| 调整兰德指数 | 0.6669 | 与真实标签有相关性 |
| 标准化互信息 | 0.7394 | 聚类质量中等 |
6.3 三种算法对比
| 算法 | 准确率/轮廓系数 | 类型 |
|---|---|---|
| 决策树 | 82.22% | 监督学习 |
| 随机森林 | 96.39% | 监督学习 |
| KMeans | 0.1824 | 无监督学习 |
结论:随机森林表现最优,决策树次之,KMeans聚类效果一般。
七、结果分析与总结(10分)
误差分析
决策树准确率82.22%,存在过拟合现象,训练集准确率可能接近100%但测试集明显较低。数字8容易被误识别为其他数字,原因在于数字8书写风格多样,与数字3、6等形状相似,混淆矩阵显示数字8的召回率最低(69%)。
随机森林通过集成100棵决策树有效降低了过拟合风险,准确率达到96.39%。特征重要性分析显示图像中心区域的像素对分类最重要,符合手写数字的书写习惯。
KMeans聚类轮廓系数仅0.1824,原因在于手写数字数据分布不是球形的,不同数字的特征空间存在重叠,而KMeans假设簇是球形的。但调整兰德指数(0.6669)和标准化互信息(0.7394)表明聚类结果与真实标签有一定相关性。
改进方向
| 算法 | 主要问题 | 改进策略 |
|---|---|---|
| 决策树 | 过拟合 | 交叉验证、剪枝优化 |
| 随机森林 | 训练时间长 | 减少树数量、参数优化 |
| KMeans | 聚类效果一般 | 尝试DBSCAN、谱聚类 |
实际应用场景
决策树适合信用评估、医疗诊断等需要可解释性的场景;随机森林适合手写识别、垃圾邮件过滤等高准确率场景;KMeans适合客户细分、图像压缩等无标签数据场景。
总结
-
算法选择:随机森林表现最优(96.39%),适合分类任务;决策树可解释性强,适合需要解释决策的场景;KMeans适合无标签数据的探索性分析。
-
数据预处理的重要性:数据标准化对KMeans等算法性能有重要影响,合理的数据划分保证了评估的公平性。
-
模型评估方法:使用多种评估指标(准确率、精确率、召回率、F1分数、轮廓系数),混淆矩阵直观展示分类结果,特征重要性分析有助于理解模型。
-
实践体会:理论知识需要通过实践来巩固,不同算法有不同的适用场景和局限性,参数调优对模型性能有重要影响,sklearn库提供了丰富的机器学习工具便于快速实验。
附件:ml_homework.py(代码)、5张结果图片
任课教师:__________ 教研室主任:__________
____年__月__日
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
评论区
如果你喜欢,那么欢迎来到我的世界!
了解更多