来自 大鱼AI

作者 Smirk

李航的《统计学习方法》可以说是机器学习的入门宝典,许多机器学习培训班、互联网企业的面试、笔试题目,很多都参考这本书。笔者近期发现了一个 GitHub 项目,不仅包含了该书的详细笔记,同时提供了各章节机器学习算法详细的 Python 代码。

该项目的作者是 Smirk,项目地址为:

https://github.com/SmirkCao/Lihang

前言

作者提到李航老师的这本书,真的很薄,但是几乎每句话都会带出很多点,值得反复研读。希望在反复研读的过程中,将整个这本书看厚,变薄。这个系列的所有的文档,以及代码,没有特殊说明的情况下"书中"这个描述指代的都是李航老师的《统计学习方法》。 其他参考文献中的内容如果引用会给出链接。

方便参考文献下载, 添加了 ref_downloader.sh,可以用来下载书中列举的参考文献。

该项目中还包含了 math_markdown.pdf,基本覆盖了书中用到的数学公式的 LaTeX 表达方式。方便读者对照理解。

课程笔记

关于《统计学习方法》的篇幅,其中 SVM 是大部头,占了很大的篇幅,另外DT,HMM,CRF 也占了相对较大的篇幅。如下图所示:

章节之间彼此又有联系,比如 NB 和 LR,DT 和 AdaBoost,Perceptron 和SVM,HMM 和 CRF 等等,如果有大章节遇到困难,可以回顾前面章节的内容,或查看具体章节的参考文献,一般都给出了对这个问题描述更详细的参考文献,可能会解释你卡住的地方。

这份详细笔记整理成 markdown 文件格式。大致提纲如下:

CH01 统计学习方法概论 

统计学习方法三要素:

  • 模型

  • 策略

  • 算法

CH02 感知机

  • 感知机是二类分类的线性分类模型

  • 感知机对应于特征空间中将实例划分为正负两类的分离超平面

CH03 k近邻法

  • kNN是一种基本的分类与回归方法

  • k值的选择, 距离度量及分类决策规则是kNN的三个基本要素

CH04 朴素贝叶斯法 

  • 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法

  • x 的某种组合在先验中没有出现的情况, 会出现概率为0的情况, 对应平滑处理方案:

    λ=0 对应极大似然估计,λ=1 对应拉普拉斯平滑

  • 朴素贝叶斯法实际上学习到生成数据的机制, 所以属于生成模型

CH05 决策树 

  • 决策树是一种基本的分类与回归方法

CH06 逻辑斯谛回归与最大熵模型

  • 逻辑斯谛回归是统计学中的经典分类方法

  • 最大熵是概率模型学习的一个准则, 将其推广到分类问题得到最大熵模型

CH07 支持向量机

  • 支持向量机是一种二分类模型。

  • 基本模型是定义在特征空间上的间隔最大化的线性分类器, 间隔最大使他有别于感知机

  • 这一章占了很大篇幅,因为 margin 这个思想几乎可以串起来整个分类问题。

CH08 提升方法

  • 提升方法是一种常用的统计学习方法, 应用广泛且有效

CH09 EM算法及其推广

  • EM 算法是一种迭代算法, 用于含有隐变量的概率模型参数极大似然估计, 或者极大后验概率估计(这里的极大似然估计和极大后验概率估计是学习策略)

  • 如果概率模型的变量都是观测变量, 那么给定数据, 可以直接用极大似然估计法, 或贝叶斯估计法估计模型参数(注意书上这个描述如果不理解,参考 CH04 中朴素贝叶斯法的参数估计部分)

  • 这部分代码实现了 BMM 和 GMM, 值得看下

  • 关于 EM, 这个章节写的不多, EM是十大算法之一, EM 和 Hinton 关系紧密, Hinton 在 2018 年 ICLR 上发表了 Capsule Network 的第二篇文章《Matrix Capsules with EM Routing》

CH10 隐马尔可夫模型

  • 隐马尔可夫模型是可用于标注问题的统计学习模型, 描述由隐藏的马尔可夫链随机生成观测序列的过程, 属于生成模型

  • 隐马尔可夫模型是关于时序的概率模型, 描述由一个隐藏的马尔可夫链随机生成不可观测的状态的序列, 再由各个状态速记生成一个观测而产生观测的序列的过程

  • 可用于标注(Tagging)问题, 状态对应标记

  • 三个基本问题: 概率计算问题, 学习问题, 预测问题

CH11 条件随机场

  • 条件随机场是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型, 其特点是假设输出随机变量构成马尔可夫随机场

  • 概率无向图模型, 又称为马尔可夫随机场, 是一个可以由无向图表示的联合概率分布

  • 三个基本问题: 概率计算问题, 学习问题, 预测问题

CH12 统计学习方法总结

这章就简单的几页, 可以考虑如下阅读套路

  • 和第一章一起看

  • 在前面的学习中遇到不清楚的问题的时候,过一遍这个章节

  • 将这一章看厚, 从这一章展开到其他十个章节

  • 李老师这本书真的是每次刷都会有新的收获

随书 Python 代码

该项目除了有详细的讲解笔记之外,每一章还配备了完整可直接运行的 Python 代码 以及测试代码。下面以 感知机和k 近邻为例,演示代码。

感知机:

import numpy as np
import random
import argparse
import loggingclass Perceptron(object):
def __init__(self,
max_iter=5000,
eta=0.00001,
verbose=True):
self.eta_ = eta
self.max_iter_ = max_iter
self.w = 0
self.verbose = verbosedef fit(self, X, y):
self.w = np.zeros(X.shape[1] + 1)
correct_count = 0
n_iter_ = 0while n_iter_ < self.max_iter_:
index = random.randint(0, y.shape[0] - 1)
xx_ = np.hstack([X[index], 1])
yy_ = 2 * y[index] - 1
wx = np.dot(self.w, xx_)if wx * yy_ > 0:
correct_count += 1
if correct_count > self.max_iter_:
break
continueself.w += self.eta_ * yy_ * xx_
n_iter_ += 1
if self.verbose:
print(n_iter_)def predict(self, X):
# for b
X = np.hstack([X, np.ones(X.shape[0]).reshape((-1, 1))])
# activation function for perceptron: sign
rst = np.array([1 if rst else -1 for rst in np.dot(X, self.w) > 0])
# np.sign(0) == 0
# rst = np.sign(np.dot(X, self.w))
return rstif __name__ == '__main__':
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)ap = argparse.ArgumentParser()
ap.add_argument("-p", "--path", required=False, help="path to input data file")
args = vars(ap.parse_args())

k 近邻:

from collections import namedtuple
from pprint import pformat
import numpy as npclass Node(namedtuple('Node', 'location left_child right_child')):
def __repr__(self):
return pformat(tuple(self))class KNN(object):def __init__(self,
k=1,
p=2):
""":param k: knn
:param p:
"""
self.k = k
self.p = p
self.kdtree = None@staticmethod
def _fit(X, depth=0):
try:
k = X.shape[1]
except IndexError as e:
return None
# todo: 这里可以展开,通过方差选择
axis = depth % k
X = X[X[:, axis].argsort()]
median = X.shape[0] // 2try:
X[median]
except IndexError:
return Nonereturn Node(
location=X[median],
left_child=KNN._fit(X[:median], depth + 1),
right_child=KNN._fit(X[median + 1:], depth + 1)
)def _distance(self, x, y):
return np.linalg.norm(x-y, ord=self.p)def _search(self, point, tree=None, depth=0, best=None):
if tree is None:
return bestk = point.shape[0]
# update best
if best is None or self._distance(point, tree.location) < self._distance(best, tree.location):
next_best = tree.location
else:
next_best = best# update branch
if point[depth%k] < tree.location[depth%k]:
next_branch = tree.left_child
else:
next_branch = tree.right_child
return self._search(point, tree=next_branch, depth=depth+1, best=next_best)def fit(self, X):
self.kdtree = KNN._fit(X)
return self.kdtreedef predict(self, X):
rst = self._search(X, self.kdtree)
return rstdef predict_proba(self, X):
passif __name__ == '__main__':
pass

后记

整个这本书里面各章节也不是完全独立的,这部分希望整理章节之间的联系以及适用的数据集。算法到底实现到什么程度,能跑什么数据集也是一方面。

推荐阅读:

一大批历史精彩文章啦

详解Transition-based Dependency parser基于转移的依存句法解析器

干货 | 找工作的经验总结(一)

经验 | 初入NLP领域的一些小建议

学术 | 如何写一篇合格的NLP论文

干货 | 那些高产的学者都是怎样工作的?

是时候研读一波导师的论文--一个简单有效的联合模型

近年来NLP在法律领域的相关研究工作


好文!我在看!

重磅!李航《统计学习方法》最新资源,笔记、Python 代码一应俱全!相关推荐

  1. 《李航 统计学习方法》学习笔记——第八章提升方法

    提升方法 8.1提升方法AdaBoost 8.1.1提升方法的基本思路 8.1.2AdaBoost算法 8.1.3AdaBoost的例子(代码实现) 8.2AdaBoost算法的训练误差分析 定理8. ...

  2. 【李航统计学习方法】感知机模型

    目录 一.感知机模型 二.感知机的学习策略 三.感知机学习算法 感知机算法的原始形式 感知机模型的对偶形式 参考文献 本章节根据统计学习方法,分为模型.策略.算法三个方面来介绍感知机模型. 首先介绍感 ...

  3. 首发:李航老师的《统计学习方法》第二版的代码实现(Github标星过万!)

    李航老师的<统计学习方法>第二版的代码实现更新完毕,本文提供下载.(黄海广) 李航老师编写的<统计学习方法>全面系统地介绍了统计学习的主要方法,特别是监督学习方法,包括感知机. ...

  4. 统计学习方法 pdf_李航统计学习方法(第三章)

    第3章 k 近邻法 k 近邻法(k-NN)是一种基于实例的学习方法,无法转化为对参数空间的搜索问题(参数最优化问题).它的特点是对特征空间进行搜索.除了k近邻法,本章还对以下几个问题进行较深入的讨论: ...

  5. 机器学习理论《统计学习方法》学习笔记:第六章 逻辑斯谛回归与最大熵模型

    机器学习理论<统计学习方法>学习笔记:第六章 逻辑斯谛回归与最大熵模型 6 逻辑斯谛回归与最大熵模型 6.1 逻辑斯谛回归模型 6.1.1 逻辑斯谛分布 6.1.2 二项逻辑斯蒂回归模型 ...

  6. 机器学习理论《统计学习方法》学习笔记:第五章 决策树

    机器学习理论<统计学习方法>学习笔记:第五章 决策树 决策树 5.1 决策树模型与学习 5.1.1 决策树模型 5.1.2 决策树与if-then规则 5.1.3 决策树与条件概率分布 5 ...

  7. 机器学习理论《统计学习方法》学习笔记:第四章 朴素贝叶斯法

    机器学习理论<统计学习方法>学习笔记:第四章 朴素贝叶斯法 4 朴素贝叶斯法 4.1 朴素贝叶斯法的学习与分类 4.1.1 基本方法 4.1.2 后验概率最大化的含义 4.2 朴素贝叶斯法 ...

  8. 机器学习理论《统计学习方法》学习笔记:第三章 k近邻法

    机器学习理论<统计学习方法>学习笔记:第三章 k近邻法 3 k近邻法 3.1 K近邻算法 3.2 K近邻模型 3.2.1 模型 3.2.2 距离度量 3.2.3 K值的选择 3.2.4 分 ...

  9. 机器学习理论《统计学习方法》学习笔记:第二章 感知机

    <统计学习方法>学习笔记:第二章 感知机 2 感知机 2.1 感知机模型 2.2 感知机学习策略 2.2.1 数据的线性可分性 2.2.2 感知机学习策略 2.3 感知机学习算法 2.3. ...

  10. 《统计学习方法》读书笔记——朴素贝叶斯法(公式推导+代码实现)

    传送门 <统计学习方法>读书笔记--机器学习常用评价指标 <统计学习方法>读书笔记--感知机(原理+代码实现) <统计学习方法>读书笔记--K近邻法(原理+代码实现 ...

最新文章

  1. QTP测试之With秒用
  2. android 情景感知 sdk,情景感知服务
  3. ELK 之二:ElasticSearch 和Logstash高级使用
  4. CodeForces 558A,B
  5. C语言 多重指针--整型字符字符串 int**pp
  6. 不能将参数转化为lparam_如何将管理需求转化为信息化方案
  7. java console输出_将java console的输出写入文件
  8. mysql 拼音首字母_Mysql:拼音首字母查询(超高性能)
  9. 计算机多媒体话筒声音怎么调,音频调节器怎么调试麦克风 音频调节器调试麦克风方法介绍...
  10. tensorflow之 feature_column + pre-made estimator组合实战
  11. 浅谈未来计算机操作系统的发展方向,浅谈未来计算机操作系统的发展方向
  12. 如何关闭CSDN右下角的小广告
  13. js中undefined
  14. 四级,六级报名网站很卡怎么办?
  15. Nginx配置带www域名转向无www域名
  16. c语言else需要条件,C语言else条件判断
  17. php程序员的情书,2018浪漫七夕:7款程序员必备表白源码(超炫酷)
  18. 星巴克公司员工股权激励机制
  19. 金立android 7.1.1,金立K30Pro正式上市:运行安卓7.1.1系统,699元起
  20. python中list的意思_python中的list函数什么意思

热门文章

  1. error: Setup script exited with error: Unable to find vcvarsall.bat
  2. keepalived+mysql双主高可用配置
  3. Xilinx发布新版SDAccel开发环境加速数据中心应用
  4. HDU 1500(经典的恶心DP)
  5. spring 事务传播行为类型
  6. vue day8 table page
  7. 3-13 图片几何变换小结
  8. Linux上mysql安装详细教程
  9. Admob(6.12.x)符号未定义错误的解决方法(IOS)
  10. 使用Eclipse开发基于SSH三大框架的Web项目带图详解