撒花!机器学习圣经 PRML 出 Python 复现代码了!

微信扫一扫,分享到朋友圈

撒花!机器学习圣经 PRML 出 Python 复现代码了!

编辑 | 红色石头

整理 | AI有道

《Pattern Recognition and Machine Learning》,中文译名《模式识别与机器学习》,简称 PRML。出自微软剑桥研究院实验室主任 Christopher Bishop 大神之手。这本书无疑是机器学习算法的集大成者。

而这本书在豆瓣上评分高达 9.5。

毫不夸张地说,PRML 当之无愧算得上是 AI 领域的圣经了。PRML 涵盖面广,语言通俗,例子和习题更加详细,附带更多基础性的讲解和指引,难度梯度设置更为合理,是其深受广大中老年 PHD 朋友喜爱的原因。

PRML 内容十分丰富,共有 14 章的内容,每一章都是干货满满。整体目录如下:

  • 第一章 介绍 

  • 第二章 概率分布

  • 第三章 线性回归模型

  • 第四章 线性分类模型

  • 第五章 神经网络

  • 第六章 内核方法

  • 第七章 稀疏内核机器

  • 第八章 图形模型

  • 第九章 混合模型和EM

  • 第十章 近似推断

  • 第十一章 采样方法

  • 第十二章 连续潜在变量

  • 第十三章 顺序数据

  • 第十四章 组合模型

这本书虽然经典,但难度较大,这也造成很多想“啃”这本书的人打了退堂鼓~好消息是,最近发现有人将该书的知识点用 Python 复现了!

复现地址:

https://github.com//ctgk/PRML

目前该 GitHub 项目已经收获近 8k 的 star 了,成为热门项目。

所需环境:

  • python 3

  • numpy

  • scipy

  • jupyter

  • matplotlib

  • sklearn

基本上安装个 Anaconda 就全部搞定啦!

该项目包含了大部分章节的 Python 实现,格式均为 Jupyter 文件。Notebooks 的目录:

例如我们来看一下 ch5. Neural Netwoks 这一章。

class RegressionNetwork(nn.Network):


def __init__(self, n_input, n_hidden, n_output):

super().__init__()

with self.set_parameter():

self.w1 = nn.random.truncnormal(-2, 2, 1, (n_input, n_hidden))

self.b1 = nn.zeros(n_hidden)

self.w2 = nn.random.truncnormal(-2, 2, 1, (n_hidden, n_output))

self.b2 = nn.zeros(n_output)


def __call__(self, x):

h = nn.tanh(x @ self.w1 + self.b1)

return h @ self.w2 + self.b2

def create_toy_data(func, n=50):

x = np.linspace(-1, 1, n)[:, None]

return x, func(x)


def sinusoidal(x):

return np.sin(np.pi * x)


def heaviside(x):

return 0.5 * (np.sign(x) + 1)


func_list = [np.square, sinusoidal, np.abs, heaviside]

plt.figure(figsize=(20, 10))

x = np.linspace(-1, 1, 1000)[:, None]

for i, func, n_iter in zip(range(1, 5), func_list, [1000, 10000, 10000, 10000]):

plt.subplot(2, 2, i)

x_train, y_train = create_toy_data(func)

model = RegressionNetwork(1, 3, 1)

optimizer = nn.optimizer.Adam(model.parameter, 0.1)

for _ in range(n_iter):

model.clear()

loss = nn.square(y_train - model(x_train)).sum()

optimizer.minimize(loss)

y = model(x).value

plt.scatter(x_train, y_train, s=10)

plt.plot(x, y, color="r")

plt.show()

Jupyter 格式的 Python 代码可读性更强,看起来非常方便!

附加资源:

这本书的官网为:

https://www.microsoft.com/en-us/research/people/cmbishop/prml-book/

全书完整的 pdf 下载地址为:

https://www.microsoft.com/en-us/research/uploads/prod/2006/01/Bishop-Pattern-Recognition-and-Machine-Learning-2006.pdf


最新 AI 干货,我










在看






 







微信扫一扫,分享到朋友圈

撒花!机器学习圣经 PRML 出 Python 复现代码了!

闲鱼一亿现金帮扶华强北!免佣金、免费验机、…

上一篇

5G新机vivo Z6直降200:5000mAh+44W到手2098

下一篇

你也可能喜欢

撒花!机器学习圣经 PRML 出 Python 复现代码了!

长按储存图像,分享给朋友