homemade-machine-learning
纯Python从零实现经典机器学习算法,配有交互式Jupyter Notebook演示
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
纯Python从零实现经典机器学习算法,配有交互式Jupyter Notebook演示
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
项目地址: https://github.com/trekhleb/homemade-machine-learning Star: 24,598 | 语言: Jupyter Notebook / Python | 许可: MIT 核心定位: 用纯 Python 从零实现经典 ML 算法,配有交互式 Jupyter Notebook 演示
作为一名 AI 开发者,你是否有过这样的经历:翻遍了 Stack Overflow,找到了 sklearn 的 LinearRegression 用法,5 行代码跑出了结果,但你始终不清楚——为什么一条直线能拟合数据?学习率调大 10 倍为什么模型就崩了?
这种困惑不是你的问题,而是当今 ML 工具链的通病:高度封装的库让人们跳过数学直觉,直接拿到答案。而 Homemade Machine Learning 正是为了填补这个认知缺口而诞生的。
这个仓库的作者 Oleksandr Trekhleb 希望用一句简单的话概括这个项目:不要用第三方库的一行代码调用来糊弄 ML 算法,从头写一遍,你才能真正理解它。
Homemade Machine Learning 项目诞生于 2018 年,作者 Oleksandr Trekhleb 是一位长期活跃于 ML 教育领域的工程师。项目最初是他在学习 Andrew Ng 在 Coursera 上的机器学习课程时的笔记和代码实践。
在 2018 年那个时间节点,市面上已经存在大量 ML 工具(scikit-learn、TensorFlow、Keras),但大多数学习者面临一个共同困境:工具太完善,反而阻碍了理解。scikit-learn 内部把梯度下降、激活函数、损失函数全部封装好了,你调一个 model.fit(),内部发生了什么完全黑盒。
该项目恰好填补了这个教育空白:用最少的依赖(NumPy、SciPy、Matplotlib),实现最核心的 ML 算法,让学习者在阅读代码时能清晰看到每一步数学运算。截至目前,该项目已获得 24,598 颗 Star,是 GitHub 上最受欢迎的 ML 教学项目之一。
线性回归 = 找最优切割路径的面包师
想象你是一个面包师,需要在一块面团上切一条直线,把面团分成甜的和咸的两部分。但你不知道线该往哪个方向斜。线性回归的工作方式就像:你先随便画一条线,量一量两侧混搭了多少(算损失函数),然后微微调整线的角度,再量,再调……反复 500 次之后,你找到了那条混搭最少的线——这就是梯度下降的本质:通过无数次小步迭代,找到损失函数的最低点。
逻辑回归 = 考试及格线判定器
逻辑回归不是用来回归(预测数值)的,而是用来分类的。比如判断一封邮件是垃圾邮件还是正常邮件。它的工作方式是:先给邮件打个垃圾分(0~1 之间),然后用 Sigmoid 函数把这个分数压扁到 0 和 1 之间——超过 0.5 就判定为垃圾邮件,低于 0.5 就是正常邮件。本质上,它在找一条能把两类数据最好地区分开来的边界线。
K-Means 聚类 = 社交圈自动分组
K-Means 的任务是:在没有任何标签的情况下,把一群人自动分成 K 个看起来最像的组。比如 100 个人,你想分成 3 个社交圈。它的工作方式是:先随机选 3 个中心人物,然后让其他人各自归到最近的中心人物那组,形成 3 个圈子;接着重新算每个圈子的中心,再重新分组……如此迭代,直到分组不再变化为止。
多层感知机(神经网络)= 层层选拔的面试流程
多层感知机模拟的是人类神经网络的层层传递结构。数据从输入层进入后,每一层神经元都会对信息做一次加权求和加激活函数的加工,然后传递给下一层。就像一场多轮面试:初试官筛选一遍(隐藏层1),复试官再筛选一遍(隐藏层2),最后总监拍板决定录用还是拒绝(输出层)。每一层的加工参数(权重 theta)都是通过训练数据不断调整的,最终学会了对新数据进行正确判断。
该项目实现了 5 大类经典 ML 算法:
| 算法类别 | 实现文件 | 核心数学原理 |
|---|---|---|
| 线性回归 | homemade/linear_regression/linear_regression.py | 梯度下降、最小二乘法 |
| 逻辑回归 | homemade/logistic_regression/logistic_regression.py | Sigmoid 函数、One-vs-All 多分类 |
| K-Means 聚类 | homemade/k_means/k_means.py | 欧氏距离、质心迭代 |
| 多层感知机 | homemade/neural_network/multilayer_perceptron.py | 前向传播、BP 反向传播 |
| 高斯异常检测 | homemade/anomaly_detection/gaussian_anomaly_detection.py | 正态分布、概率密度 |
纯 NumPy 实现,无 ML 框架依赖:项目的所有算法实现仅依赖 NumPy 和 SciPy,没有使用 scikit-learn、TensorFlow 或 PyTorch。这使得代码非常透明——你看到的每一个矩阵乘法操作,都直接对应数学公式。
以线性回归的梯度下降为例,核心代码只有一行向量化操作:
theta = theta * reg_param - alpha * (1 / num_examples) * (delta.T @ self.data).T
theta[0] = theta[0] - alpha * (1 / num_examples) * (self.data[:, 0].T @ delta).T
这里 theta[0] 不参与正则化(截距项),体现了数学细节与代码实现的精确对应。
交互式 Jupyter Notebook 演示:每个算法都配有独立的 .ipynb 文件,学习者可以在 Binder 上直接打开,无需本地安装,即可在浏览器中实时修改参数、拖动数据点、观察算法行为。在线性回归的 Notebook 中,你可以:手动拖动数据点观察拟合线变化;调整学习率(alpha)观察收敛速度差异;开启多项式回归观察过拟合现象。
homemade-machine-learning/
homemade/ # 核心算法实现(纯 Python)
linear_regression/ # 线性回归
logistic_regression/ # 逻辑回归
k_means/ # K-Means 聚类
neural_network/ # 多层感知机
anomaly_detection/ # 异常检测
utils/ # 特征处理、激活函数等工具
notebooks/ # 交互式 Jupyter 演示
images/ # 可视化图片
README.md # 项目说明(多语言版本)
requirements.txt # 依赖:numpy, scipy, matplotlib, jupyter
项目接入了 Binder,点击 Badge 即可在浏览器中打开完整的 Jupyter Notebook 环境,无需安装任何依赖。Binder 会自动构建 Docker 镜像,包含所有 Python 环境和数据文件。全程免费,即开即用。
git clone https://github.com/trekhleb/homemade-machine-learning.git
cd homemade-machine-learning
pip install -r requirements.txt
jupyter notebook
本地安装后,你可以自由修改代码参数,添加新的数据集,甚至自己实现一个新算法然后提交 Pull Request。项目有完善的 CONTRIBUTING.md 指导。
这是最需要注意的点:项目代码是教学用的,不是生产级代码。比如多层感知机的反向传播没有实现 mini-batch(每次都用全量数据),逻辑回归的优化使用了 scipy.optimize.minimize(而非工业级优化器),性能远不如 scikit-learn。如果你的目标是部署模型到生产环境,请使用 scikit-learn、PyTorch 等成熟框架。
项目仅包含经典 ML 算法(LR、MLP 最多算浅层神经网络),没有卷积神经网络(CNN)、循环神经网络(RNN)、Transformer 等现代深度学习模型。对于学习深度学习,仍然需要 TensorFlow/PyTorch 生态。
requirements.txt 中锁定了旧版本依赖(NumPy 1.15.3, SciPy 1.1.0),在新版 Python(3.10+)上可能有兼容性问题。建议本地运行时使用虚拟环境隔离依赖版本。
Homemade Machine Learning 代表了一种重要的学习范式:「从零实现」(From Scratch Implementation)。这种范式在 AI 教育领域影响深远:
填补直觉与工具之间的鸿沟:在 AI 工程师群体中,越来越多的人意识到调包调参能力的局限性。能够从数学层面解释算法行为,才能在遇到异常结果时快速定位问题。
降低 ML 学习门槛:相比 Andrew Ng 课程中的 Octave/MatLab 实现,Python 版本更贴近工程实践,学习者可以直接将代码片段迁移到自己的项目中。
开源协作的典范:项目提供了清晰的贡献规范,每个算法都有对应的测试用例和文档说明。这使得即使没有 ML 背景的开发者也能参与贡献。
教育与工业的交汇点:很多 AI 初创公司在面试时,会要求候选人在限定时间内从零实现逻辑回归或 K-Means——这类题型的标准答案参考,往往就是这个项目。
该仓库的增长曲线也值得关注:2018-2020 年间增长迅速,目前稳定在 24,000+ Star,说明 ML 教育需求始终旺盛,且「从零理解」这一学习路径仍有大量拥趸。
本报告由 PIFS 平台自动生成。数据来源:GitHub API + 源码分析。