机器学习的数据结构

2025 年 6 月 20 日 | 阅读 8 分钟

机器学习是数据科学家或机器学习专家部署实时项目中最热门的技术之一。然而,仅仅掌握机器学习技能不足以解决现实世界的问题和设计更好的产品,你还需要对数据结构有很好的了解。

Data Structure for Machine Learning

用于机器学习的数据结构与其他软件开发领域的数据结构非常相似,并且经常被使用。机器学习是人工智能的一个子集,它包含各种复杂的算法来在很大程度上解决数学问题。数据结构有助于构建和理解这些复杂问题。理解数据结构还可以帮助你比其他机器学习专业人士更有效地构建机器学习模型和算法。在本主题“机器学习数据结构”中,我们将讨论机器学习中使用的各种数据结构概念,以及数据结构与机器学习之间的关系。那么,让我们从数据结构和机器学习的快速概述开始。

什么是数据结构?

数据结构被定义为计算机编程的基本构建块,它帮助我们组织、管理和存储数据,以便于高效地搜索和检索。.

换句话说,数据结构是数据类型“值”的集合,这些值以允许高效访问和修改的方式进行存储和组织。

数据结构类型

数据结构是数据的有序序列,它告诉编译器程序员如何使用数据,例如整数、字符串、布尔值等

数据结构有两种主要类型:线性数据结构和非线性数据结构。

Data Structure for Machine Learning

现在让我们讨论机器学习中常用的数据结构。

1. 线性数据结构

线性数据结构是一种特殊类型的数据结构,它有助于以特定顺序组织和管理数据,其中元素相邻连接。

线性数据结构主要有4种,如下所示:

Array

数组是机器学习中最基本和最常见的数据结构之一。它也用于线性代数来解决复杂的数学问题。你将在机器学习中经常使用数组,无论是

  • 在预处理分析中将数据框的列转换为列表格式
  • 对数据集中存在的词频进行排序。
  • 使用一系列标记化的词来开始主题聚类。
  • 在词嵌入中,通过创建多维矩阵。

数组包含索引号来表示元素,从0开始。最低索引是arr[0],对应第一个元素。

以机器学习中使用的Python数组为例。虽然Python数组与其它编程语言中的数组有所不同,但Python列表更受欢迎,因为它包含了数据类型及其长度的灵活性。如果有人在机器学习算法中使用Python,那么最好从一开始就从数组开始。

Python数组方法

方法描述
Append()用于在列表末尾添加元素。
Clear()用于删除/清空列表中的所有元素。
Copy()返回列表的副本。
Count()返回可用元素的计数或总数,以整数形式。
Extend()用于将列表的元素添加到当前列表的末尾。
Index()返回具有指定值的第一个元素的索引。
Insert()用于使用索引号在特定位置添加元素。
Pop()用于使用索引号从指定位置删除元素。
Remove()用于删除具有指定值的元素。
Reverse()用于按反向顺序显示列表
Sort()用于对数组中的列表进行排序。

基于LIFO(后进先出)或FILO(先进后出)的概念。它用于深度学习中的二元分类。虽然栈易于学习和在机器学习模型中实现,但熟练掌握它可以帮助许多计算机科学方面的问题,如语法解析等。

栈实现了你电脑上的撤销重做按钮,它们的功能类似于一个博客内容堆栈。将博客添加到堆栈底部没有意义。然而,我们只能查看最近添加的一个。添加和删除发生在堆栈的顶部。

链表

链表是一种集合,包含几个单独分配的节点。换句话说,列表是一种数据元素的集合,它包含一个值和一个指向列表中下一个节点的指针。

在链表中,插入和删除是常数时间操作,非常高效,但访问值很慢,通常需要扫描。因此,链表对于需要移动元素的动态数组非常重要。虽然元素可以在头部、中间或尾部插入,但成本相对较高。然而,链表很容易拼接和拆分。此外,列表可以转换为固定长度的数组以实现快速访问。

Data Structure for Machine Learning

Queue

队列被定义为“FIFO”(先进先出)。它有助于预测实时程序中的排队场景,例如人们在银行排队取款。因此,队列在需要处理多个代码列表的程序中很重要。

队列数据结构可用于记录F1赛车比赛中的split time。

2. 非线性数据结构

顾名思义,在非线性数据结构中,元素不按任何顺序排列。所有元素都以分层方式排列并相互链接,其中一个元素可以链接到一个或多个元素。

1) 树

二叉树

二叉树的概念与链表非常相似,但节点和它们的指针有所不同。在链表中,每个节点包含一个数据值和一个指向列表中下一个节点的指针,而在二叉树中,每个节点有两个指向后续节点的指针,而不是只有一个

二叉树是排序的,因此插入和删除操作可以轻松地以O(log N)的时间复杂度完成。与链表类似,二叉树也可以根据树排序转换为数组。

Data Structure for Machine Learning

在二叉树中,上面图片显示了一些子节点和父节点。左子节点的数值总是小于父节点的数值,而右子节点的数值总是大于父节点的数值。因此,在二叉树结构中,数据排序是自动完成的,这使得插入和删除更有效。

2) 图

图数据结构在机器学习中对于链接预测也非常有用。图是具有节点和有序或无序对的有向或无向概念。因此,你必须对用于机器学习和深度学习的图数据结构有很好的了解。

3) 映射(Map)

Map是编程界流行的数据结构,主要用于最小化运行时算法和快速搜索数据。它以(键,值)对的形式存储数据,其中键必须是唯一的;但是,值可以重复。每个键对应或映射一个值;因此它被称为Map。

在不同的编程语言中,核心库内置了map或HashMap,每个实现都有不同的名称。

  • Java中:Maps
  • Python中:Dictionaries(字典)
  • C++中:hash_map, unordered_map等。

Python字典在机器学习和数据科学中非常有用,因为许多函数和算法都以字典作为输出。字典也广泛用于实现稀疏矩阵,这在机器学习中非常常见。

4) 堆(Heap)数据结构

堆是一种分层有序的数据结构。堆数据结构也与树非常相似,但它包含垂直排序而不是水平排序。

堆数据结构中的排序是沿着层次结构应用的,而不是跨越它,其中父节点的数值总是大于其左侧或右侧的子节点。

Data Structure for Machine Learning

在这里,插入和删除操作是基于提升进行的。这意味着,首先,元素被插入到可用的最高位置。之后,它会与父节点进行比较并提升,直到达到正确的排名位置。大多数堆数据结构可以存储在数组中,并且元素之间存在关系。

动态数组数据结构

这是用于线性代数以解决一维、二维、三维以及四维数组以进行矩阵运算的最重要数据结构类型之一。此外,它还需要在深度学习编程中对Python库(如Python NumPy)有很好的了解。

数据结构如何在机器学习中使用?

对于机器学习专业人士来说,除了机器学习技能知识外,还需要掌握数据结构和算法。

当我们使用机器学习来解决问题时,我们需要评估模型性能,即哪个模型最快,占用的空间和资源最少,同时具有准确性。此外,如果模型是使用算法构建的,那么比较和对比两种算法以确定最适合任务的算法对机器学习专业人士至关重要。在这种情况下,数据结构技能对机器学习专业人士很重要。

通过掌握数据结构和算法与机器学习的知识,我们可以轻松回答以下问题:

  • 执行需要多少内存?
  • 运行需要多长时间?
  • 考虑到当前的业务场景,哪种算法能提供最佳性能?

结论

在本文中,我们讨论了数据结构如何有助于构建机器学习算法。数据结构是编程世界中的一个关键参与者,可以解决大多数计算问题,并且掌握数据结构知识并实施最佳算法可以为机器学习问题提供最佳和最优的解决方案。此外,对数据结构有扎实的了解将有助于你打下坚实的基础,并利用这些技能在机器学习中创建更好的项目。