机器学习向量简介

向量是线性代数的基础元素。

在机器学习领域中,向量被广泛用于算法和过程的描述,例如在训练算法时的目标变量 (y)。

在本教程中,您将了解机器学习的线性代数向量。

完成本教程后,您将了解:

  • 什么是向量,以及如何使用 Python 中的 NumPy 定义向量。
  • 如何执行向量算术运算,例如加法、减法、乘法和除法。
  • 如何执行其他操作,例如点积和与标量相乘。

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

让我们开始吧。

A Gentle Introduction to Vectors for Machine Learning

机器学习向量简介
图片由 Lachlan Donald 拍摄,保留部分权利。

教程概述

本教程分为5个部分,它们是:

  1. 什么是向量?
  2. 定义向量
  3. 向量算术
  4. 向量点积
  5. 向量-标量乘法

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

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

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

什么是向量?

向量是包含一个或多个称为标量的值的元组。

向量由分量构成,这些分量是普通数字。您可以将向量视为一个数字列表,而向量代数则是对列表中数字执行的操作。

— 第 69 页,《线性代数无废话指南》,2017 年

向量通常用小写字符表示,例如“v”;例如:

其中 v1、v2、v3 是标量值,通常是实数值。

向量也以垂直表示或列的形式显示;例如:

在描述机器学习算法的训练时,通常将目标变量表示为小写“y”的向量。

通常使用几何类比来引入向量,其中向量表示 n 维空间中的一个点或坐标,n 是维数,例如 2。

向量也可以被认为是向量空间原点出发的一条线,具有方向和大小。

这些类比是一个很好的起点,但不应过于拘泥,因为我们在机器学习中经常考虑非常高维的向量。我发现“向量即坐标”在机器学习中最具说服力。

既然我们知道了什么是向量,那么我们来看看如何在 Python 中定义一个向量。

定义向量

我们可以在 Python 中将向量表示为 NumPy 数组

NumPy 数组可以从数字列表创建。例如,下面我们定义了一个长度为 3,整数值为 1、2 和 3 的向量。

该示例定义了一个包含 3 个元素的向量。

运行该示例将打印出定义的向量。

向量算术

在本节中,我们将演示简单的向量-向量算术,其中所有操作都在两个等长向量之间逐元素执行,从而生成一个具有相同长度的新向量。

向量加法

两个等长的向量可以相加,生成一个新的第三个向量。

新向量与另外两个向量具有相同的长度。新向量的每个元素都是通过将另外两个向量相同索引处的元素相加计算得出的;例如:

或者,换句话说:

我们可以通过在 Python 中添加 NumPy 数组来直接添加向量。

该示例定义了两个各含三个元素的向量,然后将它们相加。

运行示例首先打印两个父向量,然后打印一个新向量,该向量是两个向量的和。

向量减法

一个向量可以从另一个等长向量中减去,从而生成一个新的第三个向量。

与加法类似,新向量与父向量具有相同的长度,并且新向量的每个元素都是通过减去相同索引处的元素来计算的。

或者,换句话说:

NumPy 数组可以在 Python 中直接相减。

该示例定义了两个各含三个元素的向量,然后从第一个中减去第二个。

运行示例首先打印两个父向量,然后打印新向量,该向量是第一个减去第二个的结果。

向量乘法

两个等长向量可以相乘。

与加法和减法一样,此操作是逐元素执行的,结果是一个相同长度的新向量。

或者

或者,换句话说:

我们可以直接在 NumPy 中执行此操作。

该示例定义了两个各含三个元素的向量,然后将这些向量相乘。

运行示例首先打印两个父向量,然后打印新向量。

向量除法

两个等长向量可以相除。

与其他算术运算一样,此操作是逐元素执行的,结果是一个相同长度的新向量。

或者

或者,换句话说:

我们可以直接在 NumPy 中执行此操作。

该示例定义了两个各含三个元素的向量,然后用第一个除以第二个。

运行示例首先打印两个父向量,然后是向量除法的结果。

向量点积

我们可以计算两个等长向量的元素乘积之和,得到一个标量。

这被称为点积,因描述此操作时使用的点运算符而得名。

点积是计算向量投影、向量分解和确定正交性的关键工具。点积的名称来源于用来表示它的符号。

— 第 110 页,《线性代数无废话指南》,2017 年

该操作可用于机器学习中计算向量的加权和。

点积的计算方法如下:

或者

我们可以在 Python 中使用 NumPy 数组的 `dot()` 函数来计算两个向量之间的点积。自 Python 3.5 版本以来,也可以使用更新的 `@` 运算符进行计算。下面的示例演示了这两种方法。

该示例定义了两个各含三个元素的向量,然后计算点积。

运行示例首先打印两个父向量,然后是标量点积。

向量-标量乘法

向量可以乘以一个标量,有效地缩放向量的幅值。

为保持符号简洁,我们将使用小写字母“s”表示标量值。

或者

乘法作用于向量的每个元素,结果是一个相同长度的新标量向量。

或者,换句话说:

我们可以直接使用 NumPy 数组执行此操作。

该示例首先定义向量和标量,然后将向量乘以标量。

运行示例首先打印父向量,然后是标量,最后是两者相乘的结果。

同样,向量-标量加法、减法和除法也可以用相同的方式执行。

扩展

本节列出了一些您可能希望探索的扩展本教程的想法。

  • 使用您自己的数据,为每个操作创建 5 个示例。
  • 手动实现定义为列表的向量的每个向量运算。
  • 搜索机器学习论文,并找到每个操作被使用的一个例子。

如果您探索了这些扩展中的任何一个,我很想知道。

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

书籍

API

文章

总结

在本教程中,您学习了机器学习的线性代数向量。

具体来说,你学到了:

  • 什么是向量,以及如何使用 Python 中的 NumPy 定义向量。
  • 如何执行向量算术运算,例如加法、减法、乘法和除法。
  • 如何执行其他操作,例如点积和与标量相乘。

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

掌握机器学习线性代数!

Linear Algebra for Machine Learning

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

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

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

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

最终理解数据的数学

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

查看内容

机器学习向量入门》的 33 条回复

  1. Edward 2019年6月6日下午4:05 #

    那么如何确定一个向量来帮助分类呢?

    • Jason Brownlee 2019年6月7日上午7:50 #

      Edward,你具体是什么意思?

      • Edward 2019年6月7日下午8:51 #

        当您有一个特征向量并被要求确定该向量时,这意味着什么?

        • Jason Brownlee 2019年6月8日上午6:53 #

          如果您有一个特征向量,它可以通过模型进行分类。

          特征向量只是一行,其中每个值都是不同特征或列的度量。

          这有帮助吗?

  2. Ahmed Ramadan 2019年6月23日下午8:23 #

    向量加法在机器学习中意味着什么?
    我有两个包含特征的向量,我可以使用向量加法将两个特征保存在单个向量中吗?

    • Jason Brownlee 2019年6月24日上午6:24 #

      将两个向量相加。

      通常我们不会将特征相加,除非它在领域中具有特定含义,例如两者都是某个更大的 n 维空间中的坐标。

      我们可以使用向量算术或 GAN 潜在空间来探索嵌入。

  3. Vania Todorova 2019年7月12日上午1:47 #

    你用 SageMaker 的数据处理过向量吗?我的数据是 numpy 数组,但我收到的错误消息是标签必须是向量。

  4. Ricardo Lizano G 2019年8月8日上午11:02 #

    非常清楚,谢谢!

  5. Aminzai 2019年8月9日上午12:51 #

    谢谢
    Jason Brownlee 讲解得非常好。

  6. mohara 2020年1月30日上午7:37 #

    嗨,据我所知,对于文本分类,我们需要一些特征,并且是否根据特定的老师来向量化每个句子,这取决于我们自己,对吗?
    我的意思是,我们应该编写合适的程序,根据我们的特征将每个句子转换为向量,对吗?

    • mohara 2020年1月30日上午7:44 #

      ##我修正了我的问题,先生
      嗨,据我所知,对于文本分类,我们需要一些特征,并且是否根据特定的特征将每个句子向量化,这取决于我们自己,对吗?
      我的意思是,我们应该编写合适的程序,根据我们的特征将每个句子转换为向量,对吗?
      对于特征 1,我们应该编写一个程序来将我们的句子表示为向量,而对于特征 2,我们应该考虑另一段代码来将我们的句子表示为向量,是吗?

    • Jason Brownlee 2020年1月30日下午2:13 #

      你可以使用词袋模型
      https://machinelearning.org.cn/gentle-introduction-bag-words-model/

  7. Saurabh Singh 2020年4月17日上午3:39 #

    我一直在寻找类似的教程很长时间,现在我找到了。真诚地感谢您。

  8. Faiqa 2020年7月2日下午10:49 #

    就像我们有一个特征向量一样,我们是否也可以有一个响应向量?如果可以,那它会包含什么呢?

    • Jason Brownlee 2020年7月3日上午6:16 #

      是的。

      您可以为您的项目定义特征向量和目标向量的构成。

  9. Jim 2020年10月4日上午10:04 #

    我对线性代数一窍不通,但这个解释让我完全明白了。感谢您简单、清晰、简洁的解释。

  10. firoza 2020年10月19日上午2:53 #

    解释太棒了!!很容易理解。

  11. Tony 2020年12月19日上午5:12 #

    很好的解释。谢谢!

  12. Terry Jerry 2021年1月27日上午12:38 #

    我用列表编写的向量算术运算代码。我知道它并不完美。

    • Terry Jerry 2021年1月27日上午12:40 #

      我忘了补充

      导入模块后,您应该添加一行

      Vector = List[float]

    • Jason Brownlee 2021年1月27日上午6:09 #

      做得好,谢谢分享!

  13. Maanas 2022年2月1日下午4:47 #

    对两个向量应用点积的直觉是什么?例如,为什么我们在基于内容的过滤(推荐系统)中对项目向量和用户向量应用点积?

  14. Guillermo 2022年2月16日下午11:57 #

    你好。你能解释一下参考向量的概念吗?我看到 Kohonen 自组织图中提到了它,但我无法理解。

留下回复

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