用 NumPy 手写 30 个主流机器学习算法,GitHub 9K 星,全都开源了!

机器学习入门:10小时掌握四大基石算法,打通深度学习之路 如果你是一名刚进入研究生阶段的同学,正在为“机器学习”这门课感到无从下手,或者想快速构建起从机器学习到深度学习的知识桥梁,那么这篇文章就是为你准备的。我们直接切入核心:机器学习领域算法众多,但真正构成基石、决定你能否顺利过渡到深度学习的,其实只有四个关键算法。抓住它们,你就能在10小时左右建立起坚实的理解框架,而不是在庞杂的概念中迷失方向。 这篇文章不会泛泛而谈,而是聚焦于这四个算法的“实战理解”。我们会逐一拆解每个算法的核心思想、在Python中的实现方式、以及它们如何为深度学习铺平道路。无论你的目标是应 阅读详情

转自 | 机器之心

参与 | 思源、一鸣、张倩

用 NumPy 手写所有主流 ML 模型,普林斯顿博士后 David Bourgin 最近开源了一个非常剽悍的项目。超过 3 万行代码、30 多个模型,这也许能打造「最强」的机器学习基石?

NumPy 作为 Python 生态中最受欢迎的科学计算包,很多读者已经非常熟悉它了。它为 Python 提供高效率的多维数组计算,并提供了一系列高等数学函数,我们可以快速搭建模型的整个计算流程。毫不负责任地说,NumPy 就是现代深度学习框架的「爸爸」。

尽管目前使用  写模型已经不是主流,但这种方式依然不失为是理解底层架构和深度学习原理的好方法。最近,来自普林斯顿的一位博士后将 NumPy 实现的所有机器学习模型全部开源,并提供了相应的论文和一些实现的测试效果。

  • 项目地址:https://github.com/ddbourgin/numpy-ml

根据机器之心的粗略估计,该项目大约有 30 个主要机器学习模型,此外还有 15 个用于预处理和计算的小工具,全部.py 文件数量有 62 个之多。平均每个模型的代码行数在 500 行以上,在神经网络模型的 layer.py 文件中,代码行数接近 4000。

这,应该是目前用 NumPy 手写机器学习模型的「最高境界」吧。

谁用 NumPy 手推了一大波 ML 模型

通过项目的代码目录,我们能发现,作者基本上把主流模型都实现了一遍,这个工作量简直惊为天人。我们发现作者 David Bourgin 也是一位大神,他于 2018 年获得加州大学伯克利分校计算认知科学博士学位,随后在普林斯顿大学从事博士后研究。

尽管毕业不久,David 在顶级期刊与计算机会议上都发表了一些优秀论文。在最近结束的 ICML 2019 中,其关于认知模型先验的研究就被接收为少有的 Oral 论文。

David Bourgin 小哥哥就是用 NumPy 手写 ML 模型、手推反向传播的大神。这么多的工作量,当然还是需要很多参考资源的,David 会理解这些资源或实现,并以一种更易读的方式写出来。

正如 reddit 读者所质疑的:在 autograd repo 中已经有很多这样的例子,为什么你还要做这个项目?

作者表示,他的确从 autograd repo 学到了很多,但二者的不同之处在于,他显式地进行了所有梯度计算,以突出概念/数学的清晰性。当然,这么做的缺点也很明显,在每次需要微分一个新函数时,你都要写出它的公式……

估计 David Bourgin 小哥哥在写完这个项目后,机器学习基础已经极其牢固了。最后,David 表示下一步会添加文档和示例,以方便大家使用。

项目总体介绍

这个项目最大的特点是作者把机器学习模型都用 NumPy 手写了一遍,包括更显式的梯度计算和反向传播过程。可以说它就是一个机器学习框架了,只不过代码可读性会强很多。

David Bourgin 表示他一直在慢慢写或收集不同模型与模块的纯 NumPy 实现,它们跑起来可能没那么快,但是模型的具体过程一定足够直观。每当我们想了解模型 API 背后的实现,却又不想看复杂的框架代码,那么它可以作为快速的参考。

文章后面会具体介绍整个项目都有什么模型,这里先简要介绍它的整体结构。如下所示为项目文件,不同的文件夹即不同种类的代码集。

在每一个代码集下,作者都会提供不同实现的参考资料,例如模型的效果示例图、参考论文和参考链接等。如下所示,David 在实现神经网络层级的过程中,还提供了参考论文。

当然如此庞大的代码总会存在一些 Bug,作者也非常希望我们能一起完善这些实现。如果我们以前用纯 NumPy 实现过某些好玩的模型,那也可以直接提交 PR 请求。因为实现基本上都只依赖于 NumPy,那么环境配置就简单很多了,大家差不多都能跑得动。

手写 NumPy 全家福

作者在 GitHub 中提供了模型/模块的实现列表,列表结构基本就是代码文件的结构了。整体上,模型主要分为两部分,即传统机器学习模型与主流的深度学习模型。

其中浅层模型既有隐马尔可夫模型和提升方法这样的复杂模型,也包含了线性回归或最近邻等经典方法。而深度模型则主要从各种模块、层级、、最优化器等角度搭建代码架构,从而能快速构建各种神经网络。

除了模型外,整个项目还有一些辅助模块,包括一堆预处理相关的组件和有用的小工具。

该 repo 的模型或代码结构如下所示:

1. 高斯混合模型

  • EM 训练

2. 隐马尔可夫模型

  • 维特比解码

  • 似然计算

  • 通过 Baum-Welch/forward-backward 算法进行 MLE 参数估计

3. 隐狄利克雷分配模型(主题模型)

  • 用变分 EM 进行 MLE 参数估计的标准模型

  • 用 MCMC 进行 MAP 参数估计的平滑模型

4. 神经网络

4.1 层/层级运算

  • Add

  • Flatten

  • Multiply

  • Softmax

  • 全连接/Dense

  • 稀疏进化连接

  • LSTM

  • Elman 风格的 RNN

  • 最大+平均池化

  • 点积注意力

  • 受限玻尔兹曼机 (w. CD-n training)

  • 2D 转置卷积 (w. padding 和 stride)

  • 2D 卷积 (w. padding、dilation 和 stride)

  • 1D 卷积 (w. padding、dilation、stride 和 causality)

4.2 模块

  • 双向 LSTM

  • ResNet 风格的残差块(恒等变换和卷积)

  • WaveNet 风格的残差块(带有扩张因果卷积)

  • Transformer 风格的多头缩放点积注意力

4.3 正则化项

  • Dropout

  • 归一化

  • 批归一化(时间上和空间上)

  • 层归一化(时间上和空间上)

4.4 优化器

  • SGD w/ 动量

  • AdaGrad

  • RMSProp

4.5 学习率调度器

  • 常数

  • 指数

  • Noam/Transformer

  • Dlib 调度器

4.6 权重初始化器

  • Glorot/Xavier uniform 和 normal

  • He/Kaiming uniform 和 normal

  • 标准和截断正态分布初始化

4.7 损失

  • 交叉熵

  • 平方差

  • Bernoulli VAE 损失

  • 带有梯度惩罚的 Wasserstein 损失

4.8 激活函数

  • ReLU

  • Tanh

  • Affine

  • Sigmoid

  • Leaky ReLU

4.9 模型

  • Bernoulli 变分自编码器

  • 带有梯度惩罚的 Wasserstein GAN

4.10 神经网络工具

  • col2im (MATLAB 端口)

  • im2col (MATLAB 端口)

  • conv1D

  • conv2D

  • deconv2D

  • minibatch

5. 基于树的模型

  • 决策树 (CART)

  • [Bagging] 随机森林

  • [Boosting] 梯度提升决策树

6. 线性模型

  • 岭回归

  • Logistic 回归

  • 最小二乘法

  • 贝叶斯线性回归 w/共轭先验

7.n 元序列模型

  • 最大似然得分

  • Additive/Lidstone 平滑

  • 简单 Good-Turing 平滑

8. 强化学习模型

  • 使用交叉熵方法的智能体

  • 首次访问 on-policy 蒙特卡罗智能体

  • 加权增量重要采样蒙特卡罗智能体

  • Expected SARSA 智能体

  • TD-0 Q-learning 智能体

  • Dyna-Q / Dyna-Q+ 优先扫描

9. 非参数模型

  • Nadaraya-Watson 核回归

  • k 最近邻分类与回归

10. 预处理

  • 离散傅立叶变换 (1D 信号)

  • 双线性插值 (2D 信号)

  • 最近邻插值 (1D 和 2D 信号)

  • 自相关 (1D 信号)

  • 信号窗口

  • 文本分词

  • 特征哈希

  • 特征标准化

  • One-hot 编码/解码

  • Huffman 编码/解码

  • 词频逆文档频率编码

11. 工具

  • 相似度核

  • 距离度量

  • 优先级队列

  • Ball tree 数据结构

项目示例

由于代码量庞大,机器之心在这里整理了一些示例。

例如,实现点积注意力机制:

class DotProductAttention(LayerBase):
    def __init__(self, scale=True, dropout_p=0, init="glorot_uniform", optimizer=None):
        super().__init__(optimizer)
        self.init = init
        self.scale = scale
        self.dropout_p = dropout_p
        self.optimizer = self.optimizer
        self._init_params()

    def _fwd(self, Q, K, V):
        scale = 1 / np.sqrt(Q.shape[-1]) if self.scale else 1
        scores = Q @ K.swapaxes(-2, -1) * scale  # attention scores
        weights = self.softmax.forward(scores)  # attention weights
        Y = weights @ V
        return Y, weights

    def _bwd(self, dy, q, k, v, weights):
        d_k = k.shape[-1]
        scale = 1 / np.sqrt(d_k) if self.scale else 1

        dV = weights.swapaxes(-2, -1) @ dy
        dWeights = dy @ v.swapaxes(-2, -1)
        dScores = self.softmax.backward(dWeights)
        dQ = dScores @ k * scale
        dK = dScores.swapaxes(-2, -1) @ q * scale
        return dQ, dK, dV

在以上代码中,Q、K、V 三个向量输入到「_fwd」函数中,用于计算每个向量的注意力分数,并通过 softmax 的方式得到权重。而「_bwd」函数则计算 V、注意力权重、注意力分数、Q 和 K 的梯度,用于更新网络权重。

在一些实现中,作者也进行了测试,并给出了测试结果。如图为隐狄利克雷(Latent Dirichlet allocation,LDA)实现进行文本聚类的结果。左图为词语在特定主题中的分布热力图。右图则为文档在特定主题中的分布热力图。

图注:隐狄利克雷分布实现的效果

机器学习工程师成长路线图:从工具书到思想书的进阶路径 机器学习(ML)是一门融合统计学、编程与工程实践的交叉学科,其核心在于理解算法原理、掌握工具链并构建可解释的业务模型。初学者常因混淆‘工具书’(如Hands-On ML,重在端到端实现)、‘原理书’(如ESL,聚焦偏差-方差、正则化等统计基础)和‘思想书’(如Goodfellow《深度学习》,强调表征学习与生成式建模)而陷入低效学习。科学路径应遵循认知负荷理论:先以Python和scikit-learn建立数据→模型→评估的肌肉记忆,再通过数学直觉深化对损失函数、梯度下降、贝叶斯推断等关键概念的理解,最终在 阅读详情

相关推荐

Python机器学习:从基础到工业级应用全解析

机器学习作为人工智能的核心技术,通过算法让计算机从数据中学习规律。其底层依赖线性代数、概率统计等数学原理,Python凭借简洁语法和丰富生态成为首选实现工具。在工程实践中,完整的机器学习流程包含数据预处理、特征工程、模型训练与评估等关键环节。工业级应用还需考虑部署方案选择(如REST API或批处理)、模型监控(数据漂移检测)等生产环境问题。以scikit-learn、TensorFlow/PyTorch为代表的工具链,配合Pandas等数据处理库,能有效支撑从实验到落地的全过程。掌握这些技术可应用于推荐系

weixin_34302798的博客 411

惊为天人,普林斯顿博士NumPy手写全部主流机器学习模型,代码超3万行

点击上方“高级农民工”,选择“星标”公众号第一时间速享重磅干货本文转自 机器之心,禁止二次转载用 NumPy 手写所有主流 ML 模型,普林斯顿博士后 David Bou...

苏克的博客 822

2022实战型机器学习书单:理论-工具-工程三层认知地图

机器学习不是单纯学算法,而是构建‘问题定义→数据处理→模型训练→部署监控’的全栈能力。其核心在于理解数学直觉(如统计推断如何解释模型失效)、掌握工具映射(如sklearn参数与信息增益的对应关系)、形成工程决策力(如AUC微升但延迟激增时的取舍)。免费资源可覆盖基础建模与代码实践,但生产级的数据漂移检测、模型服务化规范、跨团队技术权衡等隐性知识,仍需经企业验证的付费书籍补全。本推荐聚焦2022年技术时效性——涵盖TensorFlow 2.x API、XGBoost新特性、数据为中心范式及GDPR合规要求,为

weixin_30776545的博客 451

如何学习python?Github上这10个教程和项目帮你轻松入门

如果说有一种编程语言能完成所有你想象得到的事情,那应该就是Python了,现如今它已成为了最热门的编程语言之一。我接触过的——。基于这个原因,码农从,非常推荐初学python的朋友尝试一下。

libaiup的博客 2963

numpy.std默认ddof=0的陷阱:样本标准差误用导致模型偏差

标准差是数据科学中最基础的离散度度量,其计算本质分为描述性统计(总体标准差,分母n)与推断性统计(样本标准差,分母n−1)。numpy.std默认ddof=0对应总体标准差,但机器学习特征工程、交叉验证指标分析、时间序列滚动计算等绝大多数场景实际需要无偏的样本标准差(ddof=1)。未显式指定ddof参数,将系统性低估真实变异性——小样本下偏差可达15%~25%,引发特征缩放失真、模型评估虚高、线上指标下跌等连锁问题。本文聚焦numpy.std在真实工程链路(从EDA、标准化、CV评估到在线监控)中的ddo

weixin_33709364的博客 353

GitHub热榜Top 5项目技术解析:AI开发框架与自动化工具实战

开源项目分析是开发者把握技术趋势的重要方法,其核心原理在于通过社区活跃度、代码质量等指标评估项目价值。在技术选型过程中,关注GitHub热榜能够帮助识别具有工程实践意义的工具,如AI开发框架和自动化渗透测试工具。这些技术通过模块化架构和智能算法,显著提升开发效率和安全防护能力。应用场景涵盖智能应用开发、代码智能分析、安全测试自动化等领域。以ponytail和strix为代表的热门项目,体现了AI与自动化技术的深度融合,为开发者提供了现代化的解决方案。

weixin_30599769的博客 381

Github | NumPy手写全部主流机器学习模型

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达该 repo 的模型或代码结构如下所示:1. 高斯混合模型EM 训练2. 隐马尔可夫模型维特比解码似然计算通过 Bau...

小白学视觉 508

RSOME优化建模框架:用NumPy语法解决鲁棒与随机优化问题

优化建模是运筹学和数据科学中的核心方法,用于在约束条件下寻找最优决策。其基本原理是将实际问题抽象为数学形式,通过变量、目标函数和约束条件构建模型,再利用求解器计算最优解。在工程实践中,面对参数不确定的复杂场景(如需求波动、资源变化),传统的确定性优化往往失效,这时鲁棒优化和分布鲁棒优化等技术价值凸显,它们通过考虑不确定性集合或模糊概率分布,提供更稳健的决策方案。这些方法广泛应用于金融风控、供应链管理、能源调度等关键领域。本文聚焦的RSOME框架,正是为了简化这类复杂优化问题的建模而生。它创新地采用NumPy

cuanmo8775的博客 324

Python使用Numpy入门数据计算

Python的基础数据计算库Numpy,是数据分析领域、机器学习人工智能领域得基础库,包括pandas数据分析、scikit-learn机器学习、tensorflow深度学习等都是使用Numpy作为它们的底层计算库,Numpy使用C语言封装实现提供给Python调用,简单高效并且具备超速的计算性能,想要入门精通数据分析与人工智能领域,Numpy是一个需要学习掌握的基础库。

3种主流坐标转换库性能对比:Python/JS/Go 实现 GCJ02-WGS84 转换

本文对比了Python、JavaScript和Go三种主流编程语言中实现GCJ02-WGS84坐标转换的库性能。通过详细的测试数据,分析了各库在单点转换延迟、内存占用和并发吞吐量等方面的表现,为开发者提供了技术选型建议。Go语言版本在性能上表现最优,适合高性能后端服务;Python适合数据处理,而JavaScript则适合Web前端项目。

weixin_34245082的博客 439

Python-用NumPy实现所有机器学习模型

用 NumPy 实现所有机器学习模型

GitHub星标11.9k的机器学习开源项目分享,3 万行代码,30多个主流模型

今天给大家分享一个超剽悍的开源项目,目前在github上已获11.9k星标。项目作者是普林斯顿博士后David Bourgin,他用 NumPy 手推了一大波 ML 模型,基本上把主流模型都实现了一遍,这个工作量我直呼牛X。虽然现在手写模型已经不是主流了,但在理解底层架构和深度学习原理方面还是非常有效的,当你想了解模型 API 背后的实现,又不想看复杂的框架代码时,这就是最好的参考。

学姐带你玩AI的博客 931

告别‘打架’的检测头:手把手教你用PyTorch实现YOLOv11解耦头(附完整代码)

本文详细解析了YOLOv11解耦检测头的创新设计与PyTorch实现,通过解耦分类和回归任务,显著提升目标检测性能。文章包含完整的代码实现、架构设计解析及工程调优技巧,帮助开发者深入理解并应用这一先进技术。

weixin_29031057的博客 301

ML-From-Scratch企业级机器学习教育平台:零成本AI算法理解与团队培训ROI分析

在机器学习技术快速迭代的今天,企业面临的核心挑战并非缺乏商业AI工具,而是对算法原理的理解深度不足、技术债务累积以及高昂的培训成本。ML-From-Scratch作为完全开源的机器学习实现库,通过从零实现的NumPy算法,为企业提供了零成本、高透明度的机器学习内部培训解决方案,帮助技术团队在90天内建立对主流机器学习算法的深度理解,实现从"调包工程师"到"算法架构师"的转变。 ## 1. 行业痛

gitblog_00723的博客 704

ue4 角色奔跑/冲刺/蹲下 /蹲走 动作切换蓝图

序列:文章分为4部分: 一、准备工作+简单的蓝图连线 二、编写“行走” 混合空间 三、编写“蹲下”混合空间 四、合成2个动画,设置动画蓝图 —————————————— 一、准备工作 下载“动画初学者包”,添加到项目! 主要文件: 打开BP_playerCharacter,组价——添加组件,找到“摄像机”,“机臂” 没有找到就去其他项目复制过来 ———————————— 手写人物的移动,也可以在...

凉城古梦猫扑街的博客 4864

别再手动测接口了!用Pytest+Requests+Allure搭建你的第一个自动化框架(附完整源码)

本文详细介绍了如何使用Pytest+Requests+Allure搭建Python接口自动化测试框架,涵盖环境准备、核心组件封装、测试用例设计、报告生成及CI/CD集成等关键步骤。通过实战案例和完整源码,帮助开发者快速构建高效的接口自动化测试解决方案,提升测试效率和质量。

weixin_42546508的博客 321

ML-From-Scratch:企业级机器学习教育开源替代方案的技术优势与商业价值

在当今数字化转型浪潮中,企业面临着机器学习人才短缺的严峻挑战。传统机器学习教育体系存在三大核心痛点:**高昂的培训成本**、**理论实践脱节**、**算法黑箱化**。商业化的机器学习课程动辄数万元,而开源框架虽多却缺乏从底层原理到实际应用的完整教学链路。更关键的是,主流机器学习库如scikit-learn、TensorFlow虽然功能强大,但其内部实现往往被封装为"黑箱",学习者难以真正理解算法背

gitblog_00108的博客 1052

推荐系统[八]算法实践总结V3:重排在快手短视频推荐系统中的应用and手淘信息流多兴趣多目标重排技术

快手推荐系统包括了传统的召回、粗排、精排、Learning To Rank 的多目标排序、多目标预估等技术环节。而在这些模块之后的技术环节就属于重排序,主要包括手机端和服务端两部分。服务端通过传统服务器部署重排服务,包括序列重排、多源内容混排、多样性模块。端上部分包括端上重排模型和端上重排策略两部分。重排技术是快手十分重要的技术环节,它的发展速度远快于其他排序环节,属于较新的技术范畴。整个序列的价值并非单 item 效果的累计,如何使得序列价值最大化;

丨汀、的博客 1065

人工智能算法工程师成长

算法工程师成长

usa_washington的博客 198

11.1华为OD机试真题 新系统 - 整理学生编号 (Java/Py/C/C++/Js/Go)

11.1华为OD机试真题 新系统 - 整理学生编号 (Java/Py/C/C++/Js/Go)

算法大师! 498

3. 动手运行第一个 SAP Fiori Elements 应用(ListReport 类型)

这个代理服务器能够自动监听我们 Fiori Elements 应用里向 ES5 Demo 系统发送的 OData 请求,拦截这个请求,并通过 Node.js 代码向 ES5 服务器转发,拿到响应数据后再交还给 Fiori Elements 应用。后者对自己发出的请求被代理这件事情一无所知。本文的任务是,大家按照我的介绍,在本地成功运行笔者准备的这个 Fiori Elements 应用。的错误消息, 说明大家安装的 Node.js 版本没有达到本地运行 Fiori Elements 的最低要求。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1674

矩阵计算优化:GitHub_Trending/ma/math线性代数高效算法

你是否曾在处理大规模数据集时因矩阵运算缓慢而束手无策?是否在实现机器学习模型时困惑于为何理论上可行的算法在实际中却耗时严重?作为GitHub_Trending/ma/math项目核心模块之一,线性代数计算的效率直接决定了从量子物理模拟到数据分析的全流程性能。本文将系统拆解矩阵计算的五大优化维度,通过12个实战案例与8组性能对比,带你掌握从基础矩阵运算到稀疏矩阵求解的全栈优化技术,最终实现运算速度1...

gitblog_01041的博客 1013

抖音移动端Web用户主页视频列表爬虫实战:逆向加密参数与高频采集方案

App端Hook/抓包:需要安卓逆向、Xposed或Frida,门槛高且容易被风控。官方开放API:限制极多,几乎不开放用户级视频列表。PC端Web:页面加载方式繁杂,且大量依赖懒加载与内部状态。移动端Web(:接口相对稳定,加密逻辑集中,且适合使用Requests/HTTPSession模拟,无需渲染引擎。本文聚焦于移动端Web下的用户主页视频列表爬取,采用Python 3.11 + httpx + PyExecJS + 正则/JSON解析的组合,破解X-Bogus签名和_signature。

2201_76125261的博客 864

斯坦福CS229机器学习课程2026版:中文字幕与课件资源高效学习指南

机器学习作为人工智能的核心分支,其基础理论是理解现代算法模型的关键。从监督学习到无监督学习,其原理建立在统计学与优化理论之上,通过算法从数据中自动学习规律,为预测与决策提供支持。这一技术价值在于将数据转化为可行动的洞察,广泛应用于推荐系统、计算机视觉、自然语言处理等领域。对于希望系统掌握机器学习核心的学习者,斯坦福CS229课程提供了从线性回归到前沿模型的完整知识体系。本文聚焦于该课程2026年夏季最新版本,其配套的**中文字幕**和**官方课件**极大降低了学习门槛,并提供了从资源获取、学习路径规划到实践

weixin_30562507的博客 400

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 如何从NumPy直接创建RNN?
下一篇: 机器学习基础:别 乱 用 AUC
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值