Skip to content

Latest commit

 

History

217 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

机器学习方法习题解答(⚠️ Alpha内测版)

Caution

⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。

  李航老师的《统计学习方法》和《机器学习方法》是机器学习领域的经典入门教材之一。本书分为监督学习、无监督学习和深度学习,全面系统地介绍了机器学习的主要方法。

  • 第1篇主要介绍监督学习的主要方法,包括感知机、k近邻法、朴素贝叶斯法、决策树、逻辑斯谛回归与最大熵模型、支持向量机、提升方法、EM算法、隐马尔可夫模型和条件随机场等;
  • 第2篇主要介绍无监督学习的主要方法,包括聚类方法、奇异值分解、主成分分析、潜在语义分析、概率潜在语义分析、马尔科夫链蒙特卡罗法、潜在狄利克雷分配和PageRank算法等;
  • 第3篇主要介绍深度学习的主要方法,包括前馈神经网络、卷积神经网络、循环神经网络、序列到序列模型、预训练语言模型和生成对抗网络等。

项目受众

本项目的受众主要包括:

  1. 机器学习初学者:正在学习李航老师《统计学习方法》或《机器学习方法》的同学,希望通过习题解答辅助理解。
  2. 算法工程师/开发者:希望深入理解机器学习算法原理,并寻找相关算法的 Python 实现代码(如感知机、决策树、SVM、Transformer 等)的开发者。
  3. 备战考研/求职者:需要系统复习机器学习基础理论和推导细节,巩固知识体系的同学。

本项目能为你提供:

  • 全书习题详解:涵盖监督学习、无监督学习、深度学习三大部分的课后习题详细解答。
  • Python 代码实现:提供相关算法的 Python 代码实现(基于 Python 3.10+,部分涉及 PyTorch),帮助你从理论走向实践。
  • 图文并茂的解析:通过代码运行结果截图、决策树可视化等方式,直观展示算法运行过程。
  • 勘误与补充:针对书中的难点或潜在错误提供补充说明和勘误。

基础能力要求:

  • Python 编程基础:能够阅读和编写基本的 Python 代码,了解常用的数据科学库(如 NumPy, Pandas 等)。
  • 数学基础:具备大学数学基础知识,主要包括:
    • 高等数学:微积分(偏导数、梯度)、拉格朗日乘数法、最优化方法等。
    • 线性代数:向量与矩阵运算、特征值与特征向量、奇异值分解 (SVD) 等。
    • 概率论与数理统计:条件概率、贝叶斯公式、常见概率分布、期望与方差、极大似然估计等。
  • 环境配置能力:能够使用 pip 安装依赖包,配置基本的 Python 运行环境(如 Jupyter Notebook)。

在线阅读

在线阅读地址:https://datawhalechina.github.io/statistical-learning-method-solutions-manual

选用的《机器学习方法》版本

书名:机器学习方法
作者:李航
出版社:清华大学出版社
版次:2022年3月第1版

Notebook运行环境配置

  1. 基础环境:Python3.12+、node 18.20.4+

  2. 安装UV

    pip install uv
    set UV_INDEX=https://mirrors.aliyun.com/pypi/simple
  3. 安装Python依赖包

    uv sync --python 3.12 --all-extras
  4. 安装graphviz(用于展示决策树)
    可参考博客:https://blog.csdn.net/HNUCSEE_LJK/article/details/86772806

  5. 安装PyTorch 访问PyTorch官网,选择合适的版本安装PyTorch,有条件的小伙伴可以下载GPU版本

    uv pip install torch==2.7.1 torchvision==0.22.1 torchaudio torchviz --index https://download.pytorch.org/whl/cu118
  6. 启动notebook

    jupyter notebook
  7. 运行vitepress框架

    npm run docs:dev

协作规范

  1. 由于习题解答中需要有程序和执行结果,采用jupyter notebook的格式进行编写(文件路径:notebook/notes),然后将其导出成markdown格式,再覆盖到docs对应的章节下。
  2. 可按照Notebook运行环境配置,配置相关的运行环境。
  3. 习题解答编写中,需要尽量使用初学者(有高数基础)能理解的数学概念,如果涉及公式定理的推导和证明,可附上参考链接。
  4. 当前进度:
章节名 进度 负责人 审核人
第1章 统计学习方法概论 ✅ 胡锐锋、毛鹏志 王维嘉、毛鹏志、范佳慧
第2章 感知机 ✅ 胡锐锋 毛鹏志、范佳慧、王天富、王茸茸
第3章 k近邻法 ✅ 胡锐锋 王维嘉、毛鹏志、王茸茸
第4章 朴素贝叶斯法 ✅ 胡锐锋、王维嘉 王瀚翀、王天富、王茸茸
第5章 决策树 ✅ 胡锐锋、王维嘉 王瀚翀、王天富、王茸茸
第6章 逻辑斯谛回归与最大熵模型 ✅ 胡锐锋 毛鹏志、范佳慧、王瀚翀
第7章 支持向量机 ✅ 胡锐锋、王茸茸 王维嘉、王瀚翀、王天富
第8章 提升方法 ✅ 胡锐锋、王茸茸 王维嘉、毛鹏志、王瀚翀
第9章 EM算法及其推广 ✅ 胡锐锋 毛鹏志、范佳慧、王瀚翀、王茸茸
第10章 隐马尔可夫模型 ✅ 胡锐锋、王瀚翀 王维嘉、范佳慧、王天富、王茸茸
第11章 条件随机场 ✅ 胡锐锋、王瀚翀 王维嘉、范佳慧、王天富
第14章 聚类方法 ✅ 胡锐锋、刘晓东 毛鹏志、汪健麟、王天富
第15章 奇异值分解 ✅ 胡锐锋、李拥祺 张宇明、刘晓东、兰坤
第16章 主成分分析 ✅ 胡锐锋、王茸茸 张宇明、刘晓东、范致远、兰坤
第17章 潜在语义分析 ✅ 胡锐锋 汪健麟、王天富、兰坤
第18章 概率潜在语义分析 ✅ 胡锐锋 毛鹏志、兰坤、汪健麟、张宇明
第19章 马尔可夫链蒙特卡罗法 ✅ 胡锐锋、王天富 毛鹏志、刘晓东、范致远、汪健麟
第20章 潜在狄利克雷分配 ✅ 胡锐锋、薛博阳 毛鹏志、刘晓东、范致远、王天富
第21章 PageRank算法 ✅ 胡锐锋、毛鹏志 张宇明、范致远、王天富
第23章 前馈神经网络 ✅ 胡锐锋、毛鹏志 王天富、李拥祺、王昊文、胡磊
第24章 卷积神经网络 ✅ 胡锐锋、王天富 王昊文、李拥祺、胡磊、李拙
第25章 循环神经网络 ✅ 胡锐锋、王昊文 毛鹏志、李拥祺、王天富、李拙
第26章 序列到序列模型 🚧 胡锐锋、薛博阳 毛鹏志、王昊文、胡磊、李拙
第27章 预训练语言模型 ✅ 胡锐锋、范致远 毛鹏志、胡磊、王天富、李拙
第28章 生成对抗网络 ✅ 胡锐锋、胡磊 毛鹏志、王昊文、王天富、李拥祺

项目结构

codes----------------------------------------------习题代码
|   +---ch02-----------------------------------------第2章习题解答代码
|   |   +---perceptron.py------------------------------习题2.2(构建从训练数据求解感知机模型的例子)
|   +---ch03-----------------------------------------第3章习题解答代码
|   |   +---k_neighbors_classifier.py------------------习题3.1(k近邻算法关于k值的模型比较)
|   |   +---kd_tree_demo.py----------------------------习题3.2(kd树的构建与求最近邻点)
|   |   +---my_kd_tree.py------------------------------习题3.3(用kd树的k邻近搜索算法)
|   +---ch05-----------------------------------------第5章习题解答代码
|   |   +---k_neighbors_classifier.py------------------习题5.1(调用sklearn的DecisionTreeClassifier类使用C4.5算法生成决策树)
|   |   +---my_decision_tree.py------------------------习题5.1(自编程实现C4.5生成算法)
|   |   +---my_least_squares_regression_tree.py--------习题5.2(最小二乘回归树生成算法)
|   +---ch06-----------------------------------------第6章习题解答代码
|   |   +---my_logistic_regression.py------------------习题6.2(实现Logistic回归模型学习的梯度下降法)
|   |   +---maxent_dfp.py------------------------------习题6.3(最大熵模型学习的DFP算法)
|   +---ch07-----------------------------------------第7章习题解答代码
|   |   +---svm_demo.py--------------------------------习题7.2(根据题目中的数据训练SVM模型,并在图中画出分离超平面、间隔边界及支持向量)
|   +---ch08-----------------------------------------第8章习题解答代码
|   |   +---adaboost_demo.py---------------------------习题8.1(使用sklearn的AdaBoostClassifier分类器实现)
|   |   +---my_adaboost.py-----------------------------习题8.1(自编程实现AdaBoost算法)
|   +---ch09-----------------------------------------第9章习题解答代码
|   |   +---three_coin_EM.py---------------------------习题9.1(三硬币模型的EM算法)
|   |   +---gmm_demo.py--------------------------------习题9.3(使用GaussianMixture求解两个分量高斯混合模型的6个参数)
|   |   +---my_gmm.py----------------------------------习题9.3(自编程实现求两个分量的高斯混合模型的5个参数)
|   +---ch10-----------------------------------------第10章习题解答代码
|   |   +---hidden_markov_backward.py------------------习题10.1(隐马尔可夫模型的后向算法)
|   |   +---hidden_markov_forward_backward.py----------习题10.2(隐马尔可夫模型的前向后向算法)
|   |   +---hidden_markov_viterbi.py-------------------习题10.3(隐马尔可夫模型的维特比算法)
|   +---ch11-----------------------------------------第11章习题解答代码
|   |   +---crf_matrix.py------------------------------习题11.4(使用条件随机场矩阵形式,计算所有路径状态序列的概率及概率最大的状态序列)
|   +---ch14-----------------------------------------第14章习题解答代码
|   |   +---divisive_clustering.py---------------------习题14.1(分裂聚类算法)
|   +---ch15-----------------------------------------第15章习题解答代码
|   |   +---my_svd.py----------------------------------习题15.1(自编程实现奇异值分解)
|   |   +---outer_product_expansion.py-----------------习题15.2(外积展开式)
|   +---ch16-----------------------------------------第16章习题解答代码
|   |   +---pca_svd.py---------------------------------习题16.1(样本矩阵的奇异值分解的主成分分析算法)
|   +---ch17-----------------------------------------第17章习题解答代码
|   |   +---lsa_svd.py---------------------------------习题17.1(用矩阵奇异值分解进行潜在语义分析)
|   |   +---divergence_nmf_lsa.py----------------------习题17.2(损失函数是散度损失时的非负矩阵分解算法)
|   +---ch18-----------------------------------------第18章习题解答代码
|   |   +---em_plsa.py---------------------------------习题18.1(基于生成模型的EM算法的概率潜在语义分析)
|   +---ch19-----------------------------------------第19章习题解答代码
|   |   +---monte_carlo_method.py----------------------习题19.1(蒙特卡洛法积分计算)
|   |   +---metropolis_hastings.py---------------------习题19.7(使用Metropolis-Hastings算法求后验概率分布的均值和方差)
|   |   +---gibbs_sampling.py--------------------------习题19.8(使用吉布斯抽样算法估计参数的均值和方差)
|   +---ch20-----------------------------------------第20章习题解答代码
|   |   +---gibbs_sampling_lda.py----------------------习题20.2(LDA吉布斯抽样算法)
|   +---ch21-----------------------------------------第21章习题解答代码
|   |   +---page_rank.py-------------------------------习题21.2(基本定义的PageRank的迭代算法)
|   +---ch23-----------------------------------------第23章习题解答代码
|   |   +---feedforward_nn_backpropagation.py----------习题23.3(自编程实现前馈神经网络的反向传播算法)
|   +---ch24-----------------------------------------第24章习题解答代码
|   |   +---cnn-text-classification.py-----------------习题24.7(基于CNN的自然语言句子分类模型)
|   +---ch26-----------------------------------------第26章习题解答代码
|   |   +---lstm_seq2seq.py----------------------------习题26.1(4层LSTM组成的序列到序列的基本模型)
|   |   +---cnn_seq2seq.py-----------------------------习题26.4(基于CNN的序列到序列模型)
|   +---ch27-----------------------------------------第27章习题解答代码
|   |   +---bi-lstm-text-classification.py-------------习题27.1(基于双向LSTM的预训练语言模型)
|   |   +---auto_encoder.py----------------------------习题27.3(2层卷积神经网络编码器和2层卷积神经网络解码器组成的自动编码器)
|   +---ch28-----------------------------------------第28章习题解答代码
|   |   +---zero_sum_game.py---------------------------习题28.2(零和博弈的代码验证)
docs-----------------------------------------------习题解答
notebook-------------------------------------------习题解答JupyterNotebook格式
requirements.txt-----------------------------------运行环境依赖包

贡献者名单

核心贡献者

  • 胡锐锋-项目负责人 (Datawhale成员-华东交通大学-系统架构设计师)
  • 王维嘉 (中国石油大学(北京))
  • 王茸茸 (北京邮电大学-风控算法工程师)
  • 王瀚翀 (华东师范大学-推荐系统方向)
  • 毛鹏志 (Datawhale成员-中科院计算所-信息检索与生物信息方向)
  • 刘晓东 (中科院自动化研究所-意图识别与人机交互方向)
  • 李拥祺 (南方科技大学-运动规划与控制决策方向)
  • 王天富 (中国科学技术大学-数据挖掘与强化学习方向)
  • 薛博阳 (香港中文大学-语言模型与语音识别方向)
  • 胡磊 (北京科技大学-表征学习与生物信息方向)
  • 范致远 (Datawhale成员-中科院自动化研究所-信息抽取与大模型可信推理方向)
  • 王昊文 (帝国理工学院-算法工程师)

其他

  1. 特别感谢 @Sm1les、@LSGOMYP 对本项目的帮助与支持;
  2. 感谢@GYHHAHA,指出了第7章习题7.4的解答问题,并完善了该题的解答;
  3. 感谢范佳慧、汪健麟、张宇明、兰坤、李拙等同学对项目提供的完善性建议;
  4. 感谢张帆同学对习题27.1解答的帮助,解决了ELMo预训练模型的代码问题。

参与贡献

  • 如果你发现了一些问题,可以提Issue进行反馈,如果提完没有人回复你可以联系保姆团队的同学进行反馈跟进~
  • 如果你想参与贡献本项目,可以提Pull Request,如果提完没有人回复你可以联系保姆团队的同学进行反馈跟进~
  • 如果你对 Datawhale 很感兴趣并想要发起一个新的项目,请按照Datawhale开源项目指南进行操作即可~

参考文献

  1. 李航《统计学习方法笔记》中的代码、notebook、参考文献、Errata
  2. CART剪枝详解
  3. CART剪枝算法详解

关注我们

扫描下方二维码关注公众号:Datawhale

LICENSE

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。