分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

eriklindernoren/ML-From-Scratch

机器学习

用纯 NumPy 从零实现从线性回归到 CNN、GAN 的机器学习算法,适合想逐行看清计算过程的学习者。

33,230
5,529
Python
MIT
创建于 9 年前

项目内容

这个仓库用 NumPy 从零实现了一批经典机器学习模型和算法,不依赖深度学习框架。它的目的不是追求速度和工程优化,而是把算法的内部计算过程摊开给人看,因此适合学习、实验和对照原理,不适合直接当生产库使用。覆盖范围从线性回归、岭回归、Lasso 和多项式回归,到决策树、随机森林、梯度提升、SVM、朴素贝叶斯、K 近邻,再到无监督方法(K-Means、DBSCAN、PCA、高斯混合、自编码器、GAN)、深度 Q 网络,以及一个包含全连接、卷积、池化、批归一化、Dropout 和 RNN 层的小型深度学习栈。完整列表见实现索引,深度学习部分见层与模型类型。

项目在 About 部分说明了自己的定位:呈现算法的透明实现,而非高性能版本。它适合已经了解一些机器学习、想看清底层机制的开发者,而不是想要开箱即用、经过调参和 GPU 加速的训练框架的人。

快速使用

安装走标准 setuptools 流程,在仓库根目录执行;如果构建过程需要编译,要准备好 Python 环境和 C 编译器工具链:

git clone https://github.com/eriklindernoren/ML-From-Scratch
cd ML-From-Scratch
python setup.py install

安装完成后,每个示例都是独立脚本,在仓库根目录运行。想快速确认环境是否可用的,可以先跑多项式回归示例:

python mlfromscratch/examples/polynomial_regression.py

它会对温度数据拟合一个带正则化的多项式回归模型并展示训练过程。其他示例用法相同,比如 python mlfromscratch/examples/dbscan.py 做聚类,python mlfromscratch/examples/convolutional_neural_network.py 用 CNN 做数字分类。部分示例更重或有额外依赖:深度 Q 网络示例训练 OpenAI gym 的 CartPole-v1 环境,CNN 示例在 README 记录的那次运行中训练耗时约两分钟。

使用约束

代码以可读性优先,不追求数值或计算效率,因此不要期待优化过的训练循环、GPU 支持或生产级健壮性。实现依赖 NumPy,强化学习示例还依赖 OpenAI gym;其他示例可能还需要 README 没有逐一列出的库。2017 年的讨论中有人指出,用矩阵求逆解线性方程组在数值上不如 QR 分解、SVD 或最小二乘求解器,作者当时表示会修正。把这些代码当作参考材料,在敏感场景复用前先核对数值细节。项目采用 MIT 许可证。

HotRepo 点评

项目在 2017 年 2 月获得了规模可观的 Hacker News 早期讨论(694 分、63 条评论)。讨论中,读者希望在工作代码之外补充每个方法的文档和原理说明,作者回应会增加文档和参考文献;另有评论者针对上文提到的矩阵求逆问题给出具体改进意见。这些信号说明它更像广泛流传的教学材料,价值在于透明,同时存在作者本人也承认的粗糙之处。本站只记录到 2026-11-01 的 Python 语言日榜快照,当天新增 36 Star、名次第 16;没有全部语言日榜记录,因此这一条快照不应被当作趋势判断。

本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。

Hacker News 讨论

Machine Learning from scratch: Bare bones implementations in Python
▲ 694 · 63 条评论 · 2017年2月25日
Machine Learning from Scratch – Python
▲ 3 · 0 条评论 · 2018年6月22日