ML-From-Scratch:用 NumPy 手写 36 个机器学习算法的透明实现
发布时间:2026/9/2 9:30:03 作者:尧图编辑部 阅读量:1,286

ML-From-Scratch用 NumPy 手写 36 个机器学习算法的透明实现【免费下载链接】ML-From-ScratchMachine Learning From Scratch. Bare bones NumPy implementations of machine learning models and algorithms with a focus on accessibility. Aims to cover everything from linear regression to deep learning.项目地址: https://gitcode.com/GitHub_Trending/ml/ML-From-Scratch当你在 sklearn 里调用fit()之后看不到梯度下降到底怎么走、反向传播里每个偏导数怎么推可以翻 ML-From-Scratch——一个用纯 NumPy 手写的机器学习算法库从线性回归到 GAN 的 36 个实现全部可读每一行矩阵运算都能被断点跟踪。 依赖 NumPy 的 36 个算法作者声明不追求性能作者在 README 里开宗明义The purpose of this project is not to produce as optimized and computationally efficient algorithms as possible, but rather to present the inner workings of them in a transparent and accessible way.这个项目不追求性能只追求透明。翻开仓库目录能数清楚mlfromscratch/supervised_learning/下 21 个分类与回归模型、mlfromscratch/unsupervised_learning/下 11 个无监督算法、mlfromscratch/reinforcement_learning/下 1 个 Deep Q-Network、mlfromscratch/deep_learning/下 14 种可组合 LayerDense、Conv2D、Dropout、BatchNorm、Pooling 等与 3 种网络CNN、MLP、RNN合计 36 个算法实现加 14 种 Layer。依赖清单requirements.txt只有 9 项matplotlib、numpy、sklearn、pandas、cvxopt、scipy、progressbar33、terminaltables、gym其中 8 项只用于数据加载或画训练曲线核心算法完全绕开 PyTorch 与 TensorFlow矩阵运算全部是 NumPy 的.dot与切片。透明这个定位正是它和商用框架的差异——你不需要在这里学 API你需要在这里看实现。⚙️ 梯度下降、反向传播与 Layer 抽象怎么拆整个库的架构一句话每个算法一个类每个类只依赖 NumPy 与mlfromscratch/utils/里的数据工具反向传播和 Layer 抽象在deep_learning/下独立成型可以脱离上面的分类/回归模型单独使用。回归模型如何把梯度下降摊开Regression是 Linear、Ridge、Lasso、Elastic Net、Polynomial 五种回归模型的公共基类权重更新循环只有五行核心逻辑# mlfromscratch/supervised_learning/regression.py for i in range(self.n_iterations): y_pred X.dot(self.w) # 前向预测 mse np.mean(0.5 * (y - y_pred) ** 2) # l2 损失 grad_w -(y - y_pred).dot(X) # 损失对 w 的偏导 self.w - self.learning_rate * grad_w # 沿梯度反方向更新五种回归的差异全部收敛到regularization属性L1 用np.linalg.norm(w)、L2 用w.T.dot(w)、Elastic Net 是两者的加权和每个正则化类不到 10 行。读这段代码只需要会矩阵乘法不需要框架背景。这也是为什么 examples/polynomial_regression.py 能直接用温度数据画出一条正弦近似曲线——没有黑盒你看到的就是训练本身。反向传播被拆成两个方法NeuralNetwork把训练循环抽象成fit → train_on_batch → (_forward_pass, _backward_pass)三层# mlfromscratch/deep_learning/neural_network.py def train_on_batch(self, X, y): y_pred self._forward_pass(X) # 逐层前向 loss_grad self.loss_function.gradient(y, y_pred) # 损失对输出的偏导 self._backward_pass(loss_grad) # 反向传播 权重更新 return np.mean(self.loss_function.loss(y, y_pred))_forward_pass只做for layer in self.layers: layer.forward_pass(...)_backward_pass用reversed(self.layers)从最后一层回传。这种每层只算自己那段偏导的写法跟 PyTorchautograd思路一致但没有自动微分——每一层的求导公式得你自己在backward_pass里写出来这恰恰是理解反向传播最快的路径。想加 Dropout 或 BatchNorm在NeuralNetwork上nn.add(BatchNormalization())就行跟 Keras 的Model.add()语法一致但每个 Layer 的backward_pass实现都得自己读一遍。Layer 抽象Dense 的 forward 与 backward 各五行# mlfromscratch/deep_learning/layers.py def forward_pass(self, X, trainingTrue): self.layer_input X return X.dot(self.W) self.w0 # 全连接 矩阵乘 偏置 def backward_pass(self, accum_grad): grad_w self.layer_input.T.dot(accum_grad) # 对 W 求导 self.W self.W_opt.update(self.W, grad_w) # 交给优化器更新Conv2D、Pooling、BatchNorm都继承同一个Layer基类对外接口就forward_pass/backward_pass/output_shape三个方法summary()会自动打印每层参数量见 layers.py。optimizer也是同一套抽象——optimizers.py 里的StochasticGradientDescent、NesterovAcceleratedGradient、Adagrad、Adam都是接收权重与梯度、返回新权重的三行方法。想加自定义层照 Dense 抄一遍即可。 安装命令三步跑通第一个示例git clone https://gitcode.com/GitHub_Trending/ml/ML-From-Scratch cd ML-From-Scratch pip install -r requirements.txt python setup.py install python mlfromscratch/examples/polynomial_regression.py示例用 mlfromscratch/data/TempLinkoping2016.txt 里瑞典 Linöping 2016 年逐日温度数据拟合一条周期曲线跑完会打印训练误差下降曲线。生产环境别用它跑模型——README 明确声明目标不是计算效率把它当作可读的参考实现在生产项目里用 PyTorch 复现同样的数学公式才是合理分工。⚠️ 什么时候用 PyTorch 什么时候用它性能fit循环是纯 Python for 循环无 GPU 加速百万级样本训练会明显慢于 sklearn 或 PyTorch作者也明确说了不追求效率。模型覆盖强化学习只有 DQN 一个无监督里没有图神经网络requirements.txt里的gym是 2017 年版本 API跑新环境需要自己适配。数据仓库里只内置了 data/TempLinkoping2016.txt 一份温度数据其他示例都依赖sklearn.datasets的内置数据集。维护节奏setup.py 里版本号停在 0.0.4作者以个人项目方式维护不是组织化开源项目。与同类开源对比d2l、fast.ai 这类教材项目也讲实现但它们围绕课程组织代码ML-From-Scratch 是围绕可 import 的类组织每个算法都是一个能直接from mlfromscratch.supervised_learning import KNN拿到的实现。与商用框架对比在我需要可解释的训练过程场景下比 PyTorch 更适合在我需要跑大模型场景下更适合 PyTorch。两者不是替代关系是分层关系——这里负责让你看懂数学商用框架负责让你跑起来。下一步从 mlfromscratch/examples/linear_regression.py 开始跑一遍读完 regression.py 的fit方法再对照 PyTorch 里的nn.Linear反向推一遍——这是这个项目能给你的最短路径。【免费下载链接】ML-From-ScratchMachine Learning From Scratch. Bare bones NumPy implementations of machine learning models and algorithms with a focus on accessibility. Aims to cover everything from linear regression to deep learning.项目地址: https://gitcode.com/GitHub_Trending/ml/ML-From-Scratch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考