机器学习中线性代数的10个例子

线性代数是数学的一个子领域,涉及向量、矩阵和线性变换。

它是机器学习领域的一个关键基础,从用于描述算法操作的符号到算法在代码中的实现。

尽管线性代数是机器学习领域不可或缺的一部分,但这种紧密的关系通常未被解释,或者使用向量空间或特定矩阵运算等抽象概念来解释。

在这篇文章中,您将发现10个您可能熟悉且使用、需要并最好通过线性代数来理解的常见机器学习示例。

阅读本文后,你将了解:

  • 在处理数据时使用线性代数结构,例如表格数据集和图像。
  • 在进行数据准备时使用线性代数概念,例如独热编码和降维。
  • 在深度学习、自然语言处理和推荐系统等子领域中,线性代数符号和方法的根深蒂固的使用。

通过我的新书《机器学习的线性代数》来启动您的项目,包括分步教程和所有示例的Python源代码文件。

让我们开始吧。

10 Examples of Linear Algebra in Machine Learning

机器学习中线性代数的10个例子
图片由j. Barbosa提供,保留部分权利。

概述

在这篇文章中,我们将回顾机器学习中10个明显且具体的线性代数例子。

我尽量选择您可能熟悉或以前使用过的例子。它们是:

  1. 数据集和数据文件
  2. 图像和照片
  3. 独热编码
  4. 线性回归
  5. 正则化 (Regularization)
  6. 主成分分析
  7. 奇异值分解
  8. 潜在语义分析
  9. 推荐系统
  10. 深度学习

您在机器学习中有自己最喜欢的线性代数示例吗?
在下面的评论中告诉我。

在机器学习线性代数方面需要帮助吗?

立即参加我为期7天的免费电子邮件速成课程(附示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

1. 数据集和数据文件

在机器学习中,您在数据集上拟合模型。

这是一个表格状的数字集合,其中每行代表一个观察值,每列代表该观察值的一个特征。

例如,下面是鸢尾花数据集的片段

这些数据实际上是一个矩阵:线性代数中的一个关键数据结构。

此外,当您将数据分割成输入和输出以拟合监督机器学习模型时,例如测量值和花的种类,您会得到一个矩阵 (X) 和一个向量 (y)。向量是线性代数中的另一个关键数据结构。

每行的长度相同,即列数相同,因此我们可以说数据是向量化的,其中行可以一次提供给模型一行或一批,模型可以预先配置为期望固定宽度的行。

有关将数据文件加载为 NumPy 数组的帮助,请参阅教程

2. 图像和照片

也许您更习惯于在计算机视觉应用程序中使用图像或照片。

您使用的每张图像本身都是一个表格结构,具有宽度和高度,对于黑白图像,每个单元格中有一个像素值;对于彩色图像,每个单元格中有三个像素值。

照片是线性代数中矩阵的又一个例子。

图像上的操作,例如裁剪、缩放、剪切等,都使用线性代数的符号和操作来描述。

有关将图像加载为 NumPy 数组的帮助,请参阅教程

3. 独热编码

有时您在机器学习中处理分类数据。

也许是分类问题的类标签,或者分类输入变量。

通常对分类变量进行编码,以便更容易处理和学习一些技术。一种流行的分类变量编码是独热编码。

独热编码是指创建一个表格来表示变量,其中每列代表一个类别,每行代表数据集中的一个示例。对于给定行中的分类值,在相应的列中添加一个勾选或一值,并在所有其他列中添加一个零值。

例如,包含3行的颜色变量

可能被编码为

每行都被编码为二进制向量,一个包含零或一值的向量,这是稀疏表示的一个例子,是线性代数的一个完整子领域。

有关独热编码的更多信息,请参阅教程

4. 线性回归

线性回归是统计学中一种描述变量之间关系的古老方法。

它常用于机器学习中,在简单的回归问题中预测数值。

有许多方法可以描述和解决线性回归问题,即找到一组系数,这些系数与每个输入变量相乘并相加,从而得到输出变量的最佳预测。

如果您使用过机器学习工具或库,解决线性回归最常见的方法是通过最小二乘优化,该优化使用线性回归中的矩阵分解方法(例如 LU 分解或奇异值分解,或 SVD)来解决。

甚至总结线性回归方程的常用方式也使用线性代数符号

其中 y 是输出变量,A 是数据集,b 是模型系数。

有关从线性代数角度看待线性回归的更多信息,请参阅教程

5. 正则化

在应用机器学习中,我们通常寻求最简单的模型,以在我们的问题上达到最佳性能。

更简单的模型通常在从特定示例泛化到未见数据方面表现更好。

在许多涉及系数的方法中,例如回归方法和人工神经网络,更简单的模型通常以具有较小系数值的模型为特征。

一种常用于鼓励模型在数据拟合时最小化系数大小的技术称为正则化。常见的实现包括 L2 和 L1 形式的正则化。

这两种形式的正则化实际上都是对系数作为向量的幅值或长度的度量,它们是直接从线性代数中提取出来的方法,称为向量范数。

有关正则化中使用的向量范数的更多信息,请参阅教程

6. 主成分分析

通常,一个数据集有许多列,可能几十、几百、几千甚至更多。

处理具有许多特征的数据具有挑战性,而包含不相关特征的数据构建的模型通常不如从最相关数据训练的模型有效。

很难知道数据中的哪些特征是相关的,哪些是不相关的。

自动减少数据集列数的方法称为降维,其中最流行的方法可能是主成分分析,简称 PCA。

该方法在机器学习中用于创建高维数据的投影,以便于可视化和模型训练。

PCA 方法的核心是线性代数中的一种矩阵分解方法。特征分解可以使用,更稳健的实现可能使用奇异值分解 (SVD)。

有关主成分分析的更多信息,请参阅教程

7. 奇异值分解

另一种流行的降维方法是奇异值分解方法,简称 SVD。

如前所述,顾名思义,它是一种来自线性代数领域的矩阵分解方法。

它在线性代数中应用广泛,可以直接用于特征选择、可视化、降噪等应用。

我们将在下面看到另外两个在机器学习中使用 SVD 的案例。

有关奇异值分解的更多信息,请参阅教程

8. 潜在语义分析

在机器学习处理文本数据的子领域——自然语言处理中,通常将文档表示为包含单词出现次数的大型矩阵。

例如,矩阵的列可以是词汇表中的已知单词,行可以是文本的句子、段落、页面或文档,矩阵中的单元格标记为单词出现的计数或频率。

这是一种文本的稀疏矩阵表示。矩阵分解方法,例如奇异值分解,可以应用于这个稀疏矩阵,其效果是将表示提炼成其最相关的本质。以这种方式处理的文档更容易比较、查询,并用作监督机器学习模型的基础。

这种数据准备形式称为潜在语义分析 (Latent Semantic Analysis, LSA),也称为潜在语义索引 (Latent Semantic Indexing, LSI)。

9. 推荐系统

涉及产品推荐的预测建模问题称为推荐系统,它是机器学习的一个子领域。

例如,根据您以前的购买记录和与您相似的亚马逊客户的购买记录推荐书籍,以及根据您的观看历史和与您相似的 Netflix 订阅者的观看历史推荐电影和电视节目。

推荐系统的开发主要关注线性代数方法。一个简单的例子是使用欧几里得距离或点积等距离度量来计算稀疏客户行为向量之间的相似性。

奇异值分解等矩阵分解方法在推荐系统中广泛用于将项目和用户数据提取其本质,以便进行查询、搜索和比较。

10. 深度学习

人工神经网络是一种非线性机器学习算法,其灵感来源于大脑信息处理的元素,并已证明在各种问题上都非常有效,其中最重要的是预测建模。

深度学习是近年来人工神经网络应用的复兴,通过更新的方法和更快的硬件,使得在非常大的数据集上开发和训练更大更深(更多层)的网络成为可能。深度学习方法在机器翻译、照片字幕、语音识别等一系列具有挑战性的问题上,不断取得最先进的成果。

从根本上说,神经网络的执行涉及线性代数数据结构的乘法和加法。扩展到多个维度,深度学习方法处理输入和系数的向量、矩阵甚至张量,其中张量是具有两个以上维度的矩阵。

线性代数对于通过矩阵符号描述深度学习方法至关重要,也对深度学习方法的实现至关重要,例如谷歌的 TensorFlow Python 库,其名称中包含“张量”一词。

有关张量的更多信息,请参阅教程

总结

在这篇文章中,您发现了10个您可能熟悉并使用线性代数的常见机器学习示例。

具体来说,你学到了:

  • 在处理表格数据集和图像等数据时使用线性代数结构。
  • 在进行独热编码和降维等数据准备时使用线性代数概念。
  • 在深度学习、自然语言处理和推荐系统等子领域中,线性代数符号和方法的根深蒂固的使用。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

掌握机器学习线性代数!

Linear Algebra for Machine Learning

建立对线性代数的工作理解

...通过在 python 中编写代码

在我的新电子书中探索如何实现
机器学习线性代数

它提供关于以下主题的自学教程
向量范数、矩阵乘法、张量、特征分解、SVD、PCA 等等...

最终理解数据的数学

跳过学术理论。只看结果。

查看内容

机器学习中线性代数的10个例子的21条回复

  1. Raj 2018年3月9日 上午8:47 #

    感谢 Jason 用简单的方式解释了这些例子。我经常阅读您的博客。

    我是这个领域的新手,正在慢慢学习,因此有一些关于 SVD/PCA 的基本问题——
    1. 我们应该如何做出特征选择的最佳决策,以及哪些特征对提高性能贡献更大?
    2. 它能解决偏差-方差权衡问题吗?
    3. 假设模型已在生产中实现(例如模型版本 v1),模型实现后,如果在数据集中添加了根据业务需求至关重要的新变量/列,并且在根据新变量需求重建模型后/期间,新模型的性能未能达到先前模型的性能,也未能达到业务对性能的预期。模型性能发生了显著变化,预测值也有所不同。在这种情况下,有什么方法或建议可以满足性能预期吗?

    期待您的回复。

    • Jason Brownlee 2018年3月10日 上午6:15 #

      问得好!

      您应该通过实验不同的特征选择方法作为模型的输入,并根据由此产生的模型技能进行选择。

      偏差-方差权衡无法解决,它总是存在的。这是应用机器学习的一个事实。

      是的,您可能需要开始一个新项目,放弃那些有助于实现先前模型的假设/发现。

      • Raj 2018年3月13日 上午2:52 #

        感谢 Jason 的回复。一定会努力尝试不同的特征选择并比较结果。

  2. Michael Londeen 2018年3月9日 下午5:19 #

    以上内容充斥着???? 选择和确认偏差。精通线性代数对于有效地进行机器学习来说完全没有必要。你上面说的一些话完全是牵强附会。

    如果你确实是一个科学家,你就不会隐藏/删除这条评论

  3. Osita 2018年3月10日 下午3:24 #

    特征值分解?

  4. John W 2018年3月14日 上午12:03 #

    Jason,非常有启发性的文章!随着越来越多的人学习和研究机器学习,深度学习曲线总是回到算术的挑战。归根结底,为了真正学习机器学习,必须具备代数的基础知识。不知道代数是否会使一个人无法在机器学习领域真正取得伟大成就?很可能不会,但掌握代数的核心知识肯定会有所帮助。

    • Jason Brownlee 2018年3月14日 上午6:25 #

      不。即使对线性代数没有深入的了解,您也可以取得很好的结果并创造巨大的价值。

      在试图从模型中榨取更多技能/性能时,它可能会有所不同。

  5. Kumar 2018年8月3日 上午1:15 #

    嗨,Jason,
    我一直在寻找线性代数教程,以澄清我对线性代数和机器学习之间关系的理解。

    但我想要一个教程,它不仅教我什么是线性代数,还教我如何使用线性代数而不是 Keras 或 Scikit Learn 来替代实现机器学习项目。我希望这样做是为了将线性代数与机器学习联系起来。只了解线性代数会让我一无所获。

    我想向您确认,您的书《机器学习线性代数基础》是否包含一些使用线性代数而不是 Scikit Learn 或 Keras 实现的机器学习项目示例。我在书的索引部分找不到任何关于使用线性代数实现机器学习项目示例的详细信息。

    我对购买这本书感兴趣,但对这个特定领域更感兴趣。

    请告诉我。
    谢谢。

  6. Kumar 2018年8月3日 下午10:23 #

    嗨,Jason,
    感谢指出链接。

    我仍有几点不清楚,请帮忙。

    我目前对线性代数和机器学习之间联系的假设是,“线性代数之于机器学习,就像汇编语言之于Java”。

    无论一个人是否了解汇编语言,它都很少能帮助他以更好的方式重新定义或改写他的Java程序。

    我的理解可能大错特错,这就是为什么我请求您的帮助,以了解线性代数和机器学习之间的联系。

    如果您能消除我下面的疑问,它将帮助我充满热情地学习线性代数,因为我知道我正在朝着正确的方向前进

    1. 很多人说线性代数是成为一名优秀机器学习科学家的必备条件。但没有人澄清学习线性代数后,这个人将在机器学习的哪个方面表现出色。您在上面的评论中说,如果他了解线性代数,他可以从模型中挤出更多技能/性能。我无法理解,机器学习人员受限于 Scikit learn 或 Keras 提供的库,了解线性代数在那里有什么帮助?

    2. 学习线性代数后,我是否能以不同的方式使用 Keras 或 Scikit learn?因为 Keras 将是我所有机器学习工作的主力,我不会使用线性代数编写机器学习算法,那么学习线性代数是否意味着我能更好地使用 Keras,而这种“更好”的方式又是什么?

    3. 最后,学习线性代数能否提高我对机器学习问题的直觉,它的影响是否仅限于直觉的提高,还是Beyond that?

    请帮忙。
    线性代数是一个广阔的海洋,我不想在不知道为什么和做什么的情况下跳入其中。

    谢谢。

    • Jason Brownlee 2018年8月4日 上午6:07 #

      不太对。

      在某些情况下,线性代数是一种做事方式,例如,解决线性回归时使用线性代数与梯度下降。

      在某些情况下,线性代数是一种非常高效的描述事物的方式,例如,更像伪代码与Java的关系。

      从线性代数的角度看您的 Keras 模型,可以轻松完成数据准备和连接层,不再混淆。它还可以帮助您发现解决相同问题的不同方法/架构。一个很好的例子是使用几个线性代数转换层来实现注意力等操作,而不是将其编码为自定义层。

      这有帮助吗?

      • Kumar 2018年8月6日 上午1:45 #

        嗨,Jason,

        感谢您的回复,更重要的是您的耐心。
        我知道我可能会用愚蠢的问题惹恼您。

        现在我至少明白,了解线性代数比不了解它更有益。

        正如您所说,在某些情况下,我们可以用线性代数更好地做某些事情,比如线性代数与梯度下降。我假设如果我们了解线性代数,我们就能够根据我们的需要对优化函数进行一些自定义修改。

        我一直在寻找您提到的这些东西,仅仅了解线性代数以获得更好的直觉是不够的,除此之外,我必须能够实现我的自定义需求,不一定是算法,因为那不是我的专长,但至少可以在这里和那里进行一些小的修改。

        以自定义代码形式实现知识对我来说更重要。

        非常感谢您为我解惑。
        上帝保佑。

  7. Lara 2019年8月9日 上午1:20 #

    你好…
    我拥有QA背景,正在寻找转行。我不想在未来的经济中变得无关紧要,因此考虑机器学习。
    这看起来像一片海洋。您能提供一些建议吗?

  8. VINAY 2020年3月20日 下午2:11 #

    你能告诉我概率论在机器学习中是如何帮助的吗?
    我们该如何学习概率论才能成为一个完美的数据科学家?
    谢谢

  9. Rob 2022年6月29日 上午3:22 #

    如果我儿子想进入这个领域,我该从何开始教他?

发表回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。