MLAlgorithms
rushter/MLAlgorithms加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
凌晨两点,你刚跑完一个 scikit-learn 模型,精度不错,但你心里始终有个问号挥之不去:梯度下降到底是怎么更新参数的?反向传播的矩阵运算藏在哪个函数里?Conv2D 的卷积核是怎么滑动的?你翻了 sklearn 源码,满眼都是 Cython 优化过的数值计算,根本找不到一条能"顺着读下去"的路径。
这是每一个想深入理解机器学习的开发者都会遇到的困境:生产级库追求效率,牺牲了可读性;而教科书里的伪代码又太抽象,无法直接运行验证。
MLAlgorithms 正是为解决这个问题而生——它用最干净的 Python + NumPy,从头实现每一个经典机器学习算法,让代码本身成为最好的教科书。
MLAlgorithms 由俄罗斯工程师 Artem Golubin(GitHub @rushter)创建和维护。Golubin 的个人主页写着"available for hire",这个仓库更像他个人技术能力的名片——干净、专注、长期维护。
项目起步于 2016 年左右,正值深度学习爆发期。彼时市面上的教程要么是调用 Keras/PyTorch 的高层 API,要么是纯数学推导的论文复现。Golubin 选择了一条少有人走的路:用最少的依赖、最直白的代码,实现最核心的算法。没有 PyTorch、没有 TensorFlow,只用 numpy、scipy 和 autograd。
经过多年迭代,项目已积累 11,182 颗 GitHub Stars,被 KDnuggets 等权威数据科学媒体推荐收录,成为 GitHub Topics "machine-learning-algorithms" 下的标杆项目之一。
项目目前实现了 15 大类机器学习算法,涵盖监督学习、无监督学习、深度学习和强化学习四大领域:
传统机器学习:
集成学习:
深度学习(重头戏):
项目最精华的部分是 mla/neuralnet/ 模块,实现了完整的神经网络基础设施:
nnet.py —— 神经网络核心框架,支持前向传播、反向传播layers/ —— 层组件:Dense(全连接)、Dropout、Activation(激活函数)layers/convnet.py —— Conv2D 卷积层(手动实现 im2col 矩阵化)、MaxPooling、Flattenlayers/rnn.py —— RNN 和 LSTM 的循环结构activations.py —— Sigmoid、ReLU、Softmax 等激活函数optimizers.py —— SGD、Adam、Adadelta 等优化器loss.py —— 交叉熵、MSE 等损失函数regularizers.py —— L2 正则化、Dropoutinitializations.py —— Xavier、He 等权重初始化方法强化学习:
mla/rl/dqn.py —— Deep Q-Network 实现,基于深度学习的强化学习每个算法都配有独立的 example 文件,拿来就能跑:
# examples/nnet_mlp.py — 快速验证 MLP 分类
from mla.neuralnet import NeuralNet
from mla.neuralnet.layers import Dense, Dropout, Activation
from mla.neuralnet.optimizers import Adam
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=1000, n_features=100, n_informative=75)
y = one_hot(y)
net = NeuralNet(layers=[
Dense(128), Activation('relu'), Dropout(0.3),
Dense(64), Activation('relu'),
Dense(y.shape[1]), Activation('softmax')
], optimizer=Adam())
net.fit(X_train, y_train, epochs=50)
这行代码背后,是 300+ 行的神经网络底层实现——Layer 基类、Parameter 管理、梯度累积、优化器更新,全部透明可见。
项目的依赖清单只有 8 个包,全部是数值计算基础库:
numpy # 矩阵运算
scipy # 科学计算(稀疏矩阵、特殊函数)
autograd # 自动微分(核心!替代 PyTorch 的 autograd)
scikit-learn # 数据集生成、指标计算
matplotlib # 可视化
seaborn # 图表美化
gym # 强化学习环境
tqdm # 进度条
没有任何深度学习框架——这既是限制,也是特色。没有 CUDA、没有 cuDNN,意味着只能在 CPU 上运行、规模受限;但也意味着你看到的每一行代码,都是纯 Python 可以解释的。
mla/neuralnet 的设计参考了 Keras 的 Sequential 模型风格,但更接近 PyTorch 的命令式编程:
NeuralNet
├── layers: [Layer1, Layer2, ...] ← 可任意组合的积木
├── optimizer: 更新权重
├── loss_fn: 计算损失
└── regularizers: 正则化约束
每一层都是独立的类,实现了 forward_pass() 和 backward_pass() 方法。反向传播时,梯度通过 delta 从后往前传递,每个层负责计算自己的梯度并传给上一层。这种设计让添加新层变得极其简单——只需要实现前向后向两个方法。
Conv2D 层的手写实现尤其值得研究:它用 image_to_column 将图像块展平成矩阵列,然后调用 np.dot 完成卷积运算。这个思路是所有深度学习框架卷积层的核心原理。
1. 机器学习入门者 如果你刚学完吴恩达的 ML 课程,想亲手"从零实现一遍"验证理解,这个项目是最好的练习场。每个算法的代码量在 100-500 行之间,足以在一天内读完并理解核心逻辑。
2. 面试准备 面试中常被问到:"你能手写一个 SVM 的损失函数梯度吗?""反向传播的链式法则怎么实现?"这个项目的 SVM、神经网络实现就是最标准的答案参考。
3. 教学辅助 教授机器学习课程时,用生产级库(sklearn)讲解原理,总有学生困惑"为什么这样设计"。MLAlgorithms 的代码和公式几乎是一一对应的,看完代码立刻理解数学原理。
1. 生产环境 这是学习项目,不是生产级实现。没有 GPU 支持、没有分布式训练、没有模型持久化的标准方案。大规模数据上跑会很慢。
2. 最新模型 没有 Transformer、没有 Diffusion、没有 LLM。如果你需要这些,去 Hugging Face。
3. 追求效率 NumPy 的向量化虽然比纯 Python 快,但相比 Cython/Torch 实现仍有数量级的差距。做研究原型可以,但不要用来跑大数据集。
在 GitHub 上,"手写 ML 算法"类的项目并不少,但大多停留在单一算法、教学示例级别。MLAlgorithms 的独特之处在于:
1. 覆盖完整:从传统 ML 到深度学习到强化学习,一条线串起来 2. 长期维护:从 2016 年持续更新至今 3. 工程质量高:有测试用例、有 flake8 检查、有完整 README 4. 示例丰富:18 个可直接运行的例子
它填补了"教科书公式"和"生产级库"之间的空白——不是玩具代码,也不是工业级实现,而是一座连接理论和实践的桥。
如果你正在学习机器学习,MLAlgorithms 值得你花一个周末认真读一遍。不是要你记住每一行代码,而是理解:当没有 PyTorch 的 autograd 时,梯度是怎么计算和传递的;当没有 sklearn 的 fit() 时,参数是怎么迭代更新的。
当你读懂了这个项目,再去看 PyTorch 的源码,会发现一切都有迹可循。
本报告基于 2026-09-30 的 GitHub 数据生成,stars: 11,182 | forks: 1,767 | language: Python | license: MIT