{"id":13474768,"url":"https://github.com/SmirkCao/Lihang","last_synced_at":"2025-03-26T22:31:16.786Z","repository":{"id":40138712,"uuid":"137905238","full_name":"SmirkCao/Lihang","owner":"SmirkCao","description":"Statistical learning methods, 统计学习方法(第2版)[李航]  [笔记, 代码, notebook, 参考文献, Errata, lihang]","archived":false,"fork":false,"pushed_at":"2023-08-05T06:53:06.000Z","size":10383,"stargazers_count":6094,"open_issues_count":18,"forks_count":1609,"subscribers_count":157,"default_branch":"master","last_synced_at":"2025-03-20T21:21:43.346Z","etag":null,"topics":["book","lihang","machine-learning","python","statistical-learning-methods"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SmirkCao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-06-19T14:46:07.000Z","updated_at":"2025-03-20T08:16:28.000Z","dependencies_parsed_at":"2024-01-13T18:24:39.370Z","dependency_job_id":"e49e607c-3277-498c-8c6a-0da5b8f2be93","html_url":"https://github.com/SmirkCao/Lihang","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SmirkCao%2FLihang","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SmirkCao%2FLihang/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SmirkCao%2FLihang/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SmirkCao%2FLihang/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SmirkCao","download_url":"https://codeload.github.com/SmirkCao/Lihang/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245747641,"owners_count":20665831,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["book","lihang","machine-learning","python","statistical-learning-methods"],"created_at":"2024-07-31T16:01:14.684Z","updated_at":"2025-03-26T22:31:14.123Z","avatar_url":"https://github.com/SmirkCao.png","language":"Python","funding_links":[],"categories":["Python","A01_机器学习教程"],"sub_categories":[],"readme":"# 统计学习方法\n![Hits](https://www.smirkcao.info/hit_gits/Lihang/README.md)\n\n[![Gitter chat](https://badges.gitter.im/SmirkCao/StatisticalLearningMethods.png)](https://gitter.im/StatisticalLearningMethods/Book)[![Python](https://img.shields.io/badge/python-3.5|3.6|3.7-blue.svg)](-)[![pull](https://img.shields.io/badge/contributions-welcome-blue.svg)](https://github.com/SmirkCao/Lihang/pulls)\n\n本书已经出第二版，2019年5月之后所有内容更新参考第二版第一次印刷。\n\n[第一版内容见Release first_edition](https://github.com/SmirkCao/Lihang/archive/first_edition.zip)\n\n[TOC]\n\n## 工具包\n\n为方便学习，整理一些工具说明。\n\n- GitHub的markdown公式支持一般，推荐使用Chrome插件[TeX All the Things](https://chrome.google.com/webstore/detail/tex-all-the-things/cbimabofgmfdkicghcadidpemeenbffn)来渲染TeX公式,，本地Markdown编辑器推荐[Typora](https://typora.io/)，注意Ctrl+, 打开Preferences，Syntax Support部分勾选inline Math。Ubuntu和Windows都正常。\n- math_markdown.pdf为[math_markdown.md](./math_markdown.md)的导出版本， 方便查看使用， markdown版本为最新版本，基本覆盖了书中用到的数学公式的$\\LaTeX$表达方式。\n- [ref_downloader](./ref_downloader.sh) 是一个参考文献下载脚本，这本书一定要配合参考文献看，每章的大参考文献一定要看，对书的内容理解会很有帮助。\n- [glossary_index](./glossary_index.md) 是一个非正式的术语索引，这个书后面是有一个的，但是不方便展开，在这个部分添加了部分扩展的内容。\n- [symbol_index](./symbol_index.md) 是一个非正式的符号索引，第一版中有符号说明，第二版没有了，可能是无监督这部分涉及到的符号真的是太多了，总之，保留这部分，在感觉混淆的时候可以查下，看看是否有帮助。\n- [errata_se](./errata_se.md) 非官方的errata，供参考。如果有内容感觉不清楚，可以参考看看，希望有帮助。\n\n## 前前言\n\n- 2019年5月，期待许久的第二版发布了，第一时间下了订单，预计母亲节这天可以发货。\n- 5月13日新书到手，第二版配了一张新照片，短发，比之前显得年轻...\n- 第二版修改了标点符号，第一版中逗号中文，句号英文。第二版将之前的英文句号更改成了中文句号。\n- 第二版取消了符号表，可能是因为同一本书前后有些地方用了不同的符号？所以在这个repo里面，我们尝试加上[符号表](symbol_index.md)做说明，方便查询。\n- 第二版增加了八个无监督的学习方法，至此，数据挖掘十大算法除了Apriori，全了。\n\n如果需要引用这个Repo:\n\n格式： `SmirkCao, Lihang, (2018), GitHub repository, https://github.com/SmirkCao/Lihang`\n\n或者\n\n```\n@misc{SmirkCao,\n  author = {SmirkCao},\n  title = {Lihang},\n  year = {2018},\n  publisher = {GitHub},\n  journal = {GitHub repository},\n  howpublished = {\\url{https://github.com/SmirkCao/Lihang}},\n  commit = {c5624a9bd757a5cc88e78b85b89e9221deb08270}\n}\n```\n\n\n\n## 前言\n\n这部分内容并不对应《统计学习方法》中的前言，书中的**前言**写的也很好，引用如下:\n\n\u003e1. 在内容选取上，侧重介绍那些最重要，最常用的方法，特别是关于**分类与标注**问题的方法.\n\u003e1. 力图用统一框架来论述所有方法，使全书整体不失系统性。\n\u003e1. 适用于信息检索及自然语言处理等专业大学生，研究生\n\n另外还有一点要注意作者的工作背景\n\n\u003e 作者一直从事利用统计学习方法对文本数据进行各种智能性处理的研究， 包括自然语言处理、信息检索、文本数据挖掘。\n\n- 每个人都有适合自己的理解方式，对同样的内容，会有不同的理解\n- 书如数据，学如训练，人即模型。\n\n如果用我这个模型来实现相似度查找，和李老师这本书神似的就是《半导体光电器件》了，只可惜昔时年少，未曾反复研读。\n\n希望在反复研读的过程中，将整个这本书看厚，变薄。这个系列的所有的文档，以及代码，没有特殊说明的情况下\"书中\"这个描述指代的都是李航老师的《统计学习方法》。其他参考文献中的内容如果引用会给出链接。\n\n在Refs中列出了部分参考文献，有些参考文献对于理解书中的内容是非常有帮助的。关于这些文件的描述和解释会在参考部分对应的[Refs/README.md](Refs/README.md)中补充。这个文档中也添加了其他参考文献的一些说明。\n\n方便参考文献下载， 在review02的时候，添加了[ref_downloader.sh](ref_downloader.sh)，可以用来下载书中列举的参考文献，更新过程随着review02的进行逐渐完成。\n\n另外，李航老师的这本书，~~真的很薄（第二版不薄了）~~，但是几乎每句话都会带出很多点，值得反复研读。\n\n书中在目录之后有个符号表，解释了符号定义，所以如果有不理解的符号可以过来查表；在本书后面有个索引，可以通过索引查找对应的符号表示的含义在书中出现的位置。在本Repo中，维护了一个glossary_index.md，目的是给对应的符号补充一些说明，以及直接标注符号对应的页码，进度随review更新。\n\n每个算法，示例结束之后会有一个◼️，表示这个算法或者例子到此结束。这个叫证明结束符，看文献多了就知道了。\n\n### 关于对数底数\n\n读书的时候经常会有关于对数底数是多少的问题，有些比较重要的，书中都有强调。 有些没有强调的，通过上下文可以理解。另外，因为有换底公式，所以，底具体是什么关系不是太大，差异在于一个常系数。但是选用不同的底会有物理意义和处理问题方面的考虑，关于这个问题的分析，可以看PRML 1.6中关于熵的讨论去体会。\n\n另外关于公式中常系数的问题，如果用迭代求解的方式，有时对公式做一定的简化，可能会改善收敛速度。个中细节可以实践中慢慢体会。\n\n### 关于篇幅\n\n![各章节篇幅占比 ](assets/content_distribution.png)\n\n这里插入个图表，列举了各个章节所占篇幅，其中SVM是监督学习里面占用篇幅最大的，MCMC是无监督里面篇幅占用最大的，另外DT，HMM，CRF，SVD，PCA，LDA，PageRank也占了相对较大的篇幅。\n\n章节之间彼此又有联系，比如NB和LR，DT和AdaBoost，Perceptron和SVM，HMM和CRF等等，如果有大章节遇到困难，可以回顾前面章节的内容，或查看具体章节的参考文献，一般都给出了对这个问题描述更详细的参考文献，可能会解释你卡住的地方。\n\n\n\n## CH01 统计学习及监督学习概论\n\n[Introduction](CH01/README.md)\n\n统计学习方法三要素:\n\n- 模型\n\n- 策略\n\n- 算法\n\n  \n\n  第二版对这一章的目录结构重新梳理了，更清晰。\n\n## CH02 感知机\n\n[Perceptron](CH02/README.md)\n- 感知机是二类分类的线性分类模型\n- 感知机对应于特征空间中将实例划分为正负两类的分离超平面.\n## CH03 k近邻法\n\n[kNN](CH03/README.md)\n- kNN是一种基本的分类与回归方法\n- k值的选择, 距离度量及分类决策规则是kNN的三个基本要素.\n## CH04 朴素贝叶斯法\n\n[NB](CH04/README.md)\n- 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法.\n1. $IID\\rightarrow$输入输出的联合概率分布\n1. $Bayes\\rightarrow$后验概率最大的输出\n- x的某种组合在先验中没有出现的情况, 会出现概率为0的情况, 对应平滑处理方案\n  $$P_\\lambda(X^{(j)}=a_{jl}|Y=c_k)=\\frac{\\sum_{i=1}^{N}{I(x_i^{(j)}=a_{jl}, y_i=c_k)}+\\lambda}{\\sum_{i=1}^{N}{I(y_i=c_k)+S_j\\lambda}}$$\n  - $\\lambda = 0$ 对应极大似然估计\n  - $\\lambda = 1$ 对应拉普拉斯平滑\n- 朴素贝叶斯法实际上学习到生成数据的机制, 所以属于生成模型.\n\n## CH05 决策树\n\n[DT](CH05/README.md)\n\n- 决策树是一种基本的分类与回归方法\n## CH06 逻辑斯谛回归与最大熵模型\n\n[LR](CH06/README.md)\n\n- 逻辑斯谛回归是统计学中的经典分类方法\n- 最大熵是概率模型学习的一个准则, 将其推广到分类问题得到最大熵模型\n\n关于最大熵的学习，推荐阅读该章节的参考文献[1]，[Berger, 1996](Refs/README.md), 有益于书中例子的理解以及最大熵原理的把握。\n\n那么, **为什么LR和Maxent要放在一章?**\n- 都属于对数线性模型\n\n- 都可用于二分类和多分类\n\n- 两种模型的学习方法一般采用极大似然估计, 或正则化的极大似然估计. 可以形式化为无约束最优化问题, 求解方法有IIS, GD, BFGS等\n\n- 在[Logistic regression](http://scikit-learn.org/stable/modules/linear_model.html#logistic-regression)中有如下描述,\n\n  \u003e Logistic regression, despite its name, is a linear model for classification rather than regression. Logistic regression is also known in the literature as logit regression, maximum-entropy classification (MaxEnt) or the log-linear classifier. In this model, the probabilities describing the possible outcomes of a single trial are modeled using a [logistic function](https://en.wikipedia.org/wiki/Logistic_function).\n\n- 还有[这样的描述](https://www.csie.ntu.edu.tw/~cjlin/papers/maxent_journal.pdf)\n\n  \u003eLogistic regression is a special case of maximum entropy with two labels +1 and −1.\n\n  这个章节的推导中用到了$y\\in \\mathcal{Y}=\\{0,1\\}$的性质\n\n- 有时候我们会说，逻辑回归在NLP方面叫做Maxent\n\n## CH07 支持向量机\n\n[SVM](CH07/README.md)\n\n- 支持向量机是一种二分类模型。\n- 基本模型是定义在特征空间上的间隔最大化的线性分类器, 间隔最大使他有别于[感知机](CH02/README.md)\n- 这一章占了很大篇幅，因为margin这个思想几乎可以串起来整个分类问题。\n\n## CH08 提升方法\n\n[Boosting](CH08/README.md)\n\n- 提升方法是一种常用的统计学习方法, 应用广泛且有效.\n\n## ----分割线----\n\n姑且在这里分一下，因为后面HMM和CRF通常会引出概率图模型的介绍，在《机器学习，周志华》里面更是用了一个单独的**概率图模型**章节来包含HMM，MRF，CRF等内容。另外从HMM到CRF本身也有很多相关的点。\n\n在书中第一章有说明监督学习的三种应用：分类，标注和回归。在第十二章中有补充，本书主要考虑前两者的学习方法。据此， 在这里分割也是合适的，前面介绍分类模型， 少部分提到了回归，后面主要介绍标注问题。\n\n## CH09 EM算法及其推广\n\n[EM](CH09/README.md)\n\n- EM算法是一种迭代算法，用于含有隐变量的概率模型参数**极大似然估计**，或者极大后验概率估计。(这里的极大似然估计和极大后验概率估计是**学习策略**)\n\n- \u003e  如果概率模型的变量都是观测变量，那么给定数据，可以直接用极大似然估计法，或贝叶斯估计法估计模型参数。\n\n  注意书上这个描述如果不理解，参考[CH04](CH04/README.md)中朴素贝叶斯法的参数估计部分。\n\n- 这部分代码实现了BMM和GMM，值得看下\n\n- 关于EM，这个章节写的不多，EM是十大算法之一，EM和Hinton关系紧密，Hinton在2018年ICLR上发表了Capsule Network的第二篇文章《Matrix Capsules with EM Routing》\n\n- 在CH22中将EM算法归类于基础机器学习方法，不涉及具体的机器学习模型，可用于无监督学习也可用于监督学习，半监督学习。\n\n## CH10 隐马尔可夫模型\n\n[HMM](CH10/README.md)\n\n- 隐马尔可夫模型是可用于标注问题的统计学习模型，描述由隐藏的马尔可夫链随机生成观测序列的过程，属于生成模型。\n- 隐马尔可夫模型是关于时序的概率模型，描述由一个隐藏的马尔可夫链随机生成不可观测的状态的序列，再由各个状态速记生成一个观测而产生观测的序列的过程。\n- 可用于**标注**(Tagging)问题，状态对应标记。\n- 三个基本问题：概率计算问题，学习问题，预测问题。\n\n## CH11 条件随机场\n\n[CRF](CH11/README.md)\n\n- 条件随机场是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型，其特点是假设输出随机变量构成**马尔可夫随机场**。\n- 概率无向图模型，又称为马尔可夫随机场，是一个可以由无向图表示的**联合概率分布**。\n- 三个基本问题：概率计算问题，学习问题，预测问题\n\n## CH12 监督学习方法总结\n\n[Summary](CH12/README.md)\n\n这章就简单的几页，可以考虑如下阅读套路：\n- 和第一章一起看\n\n- 在前面的学习中遇到不清楚的问题的时候，过一遍这个章节。\n\n- 将这一章看厚，从这一章展开到其他十个章节。\n\n- 注意这一章有个图12.2，这里面提到了逻辑斯谛损失函数，这里的$y$应该是定义在$\\cal{Y}=\\{+1,-1\\}$中的，在前面介绍[LR](CH06/README.md)的时候$y$定义在$\\cal{Y}=\\{0,1\\}$，这里注意下。\n\n李老师这本书真的是每次刷都会有新的收获。\n\n## ----分割线----\n\n第二版增加了八个无监督学习方法：聚类，奇异值分解，主成分分析，潜在语义分析，概率潜在语义分析，马尔可夫链蒙特卡罗法，潜在狄利克雷分配，PageRank。\n\n## CH13 无监督学习概论\n\n[Introduction](./CH13/README.md)\n\n- 无监督学习的基本问题：聚类，降维，话题分析和图分析。\n- 横向**结构**和纵向**结构**这个问题，从存储的角度来考虑。\n- 注意不同任务的策略：类别中心距离最小化，维度转换过程中信息损失的最小化，生成数据概率的最大化。\n- 在无监督学习部分经常会提到**数据中的结构**， 是指数据中变量之间的关系。\n\n## CH14 聚类方法\n\n[Clustering](./CH14/README.md)\n\n- 例子14.2很好，建议画出来先自己展开思考下，再往后看\n- 聚类可以用于图像压缩\n\n## CH15 奇异值分解\n\n- 基本机器学习方法\n- 奇异值分解定理保证分解存在\n- 奇异值矩阵唯一，$U,V$不唯一\n- 有明确的几何解释\n\n## CH16 主成分分析\n\n- 利用正交变换将线性相关变量表示的观测数据转换为少数几个由线性无关变量表示的数据，线性无关的变量称为**主成分**\n- 主成分分析之前，需要对给定数据规范化，使得每一个变量均值为0，方差为1。\n- 主成分并不对应原始数据的某一个特征， 可以通过因子负荷量来观察主成分与原始特征之间的关系。\n- 这部分内容，还没有提到**话题**这个概念，后面章节开始介绍了很多话题分析相关的内容，LSA，PLSA，LDA都是和话题有关，MCMC是在LDA中使用的一个工具。\n- 提到了总体主成分和样本主成分，前者是后者的基础。主要体现在总体考虑期望，样本考虑均值。样本主成分具有和总体主成分一样的性质。\n\n## CH17 潜在语义分析\n\n- 在sklearn的定义中，LSA就是截断奇异值分解。\n- 注意体会LSA和PCA的区别，主要在于是不是去均值。\n- 在LSA中，话题向量空间是$U$，DOC在话题向量空间的表示是$SV^\\mathrm{T}$。但是在sklaern中，xtransformed是$U\\mit\\Sigma$ \n\n## CH18 概率潜在语义分析\n\n## CH19 马尔可夫链蒙特卡罗法\n\n## CH20 潜在狄利克雷分配\n\n## CH21 PageRank算法\n\n## CH22 无监督学习方法总结\n\n## 后记\n\n整个这本书里面各章节也不是完全独立的，这部分希望整理章节之间的联系以及适用的数据集。算法到底实现到什么程度，能跑什么数据集也是一方面。\n\n![data_algo_map](assets/data_algo_map.png)\n\n\n\n## 参考\n\n[^1]: [Matrix Capsules with EM Routing](http://arxiv.org/abs/1710.09829)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSmirkCao%2FLihang","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FSmirkCao%2FLihang","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSmirkCao%2FLihang/lists"}