Skip to content

datawhalechina/statistical-learning-method-solutions-manual

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

217 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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 国际许可协议进行许可。