ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 机器学习向量的温和介绍 > 原文: [https://machinelearningmastery.com/gentle-introduction-vectors-machine-learning/](https://machinelearningmastery.com/gentle-introduction-vectors-machine-learning/) 向量是线性代数的基本元素。 在训练算法时,在算法和过程(例如目标变量(y))的描述中,在整个机器学习领域中使用向量。 在本教程中,您将发现用于机器学习的线性代数向量。 完成本教程后,您将了解: * 什么是向量以及如何使用 NumPy 在 Python 中定义一个向量。 * 如何执行加法,减法,乘法和除法等向量运算。 * 如何使用标量执行点积和乘法等附加操作。 让我们开始吧。 ![A Gentle Introduction to Vectors for Machine Learning](img/a45add0c0b7a62bce5a0f79b4004b886.jpg) 机器学习向量的温和介绍 [Lachlan Donald](https://www.flickr.com/photos/lox/9407402400/) 的照片,保留一些权利。 ## 教程概述 本教程分为 5 个部分;他们是: 1. 什么是向量? 2. 定义向量 3. 向量算术 4. 向量点产品 5. 向量标量乘法 ## 什么是向量? 向量是一个或多个称为标量的值的元组。 > 向量由组件构建,组件是普通数字。您可以将向量视为数字列表,将向量代数视为对列表中的数字执行的操作。 - 第 69 页,[无线性代数废话指南](http://amzn.to/2k76D4C),2017 年 向量通常用小写字符表示,例如“v”;例如: ``` v = (v1, v2, v3) ``` 其中 v1,v2,v3 是标量值,通常是实数值。 向量也使用垂直表示或列显示;例如: ``` v1 v = ( v2 ) v3 ``` 在描述机器学习算法的训练时,通常将目标变量表示为具有小写“y”的向量。 通常使用几何类比引入向量,其中向量表示 n 维空间中的点或坐标,其中 n 是维数的数量,例如 2。 向量也可以被认为是来自向量空间的原点的线,具有方向和幅度。 这些类比作为一个起点很好,但不应该太紧,因为我们经常考虑机器学习中非常高的维度向量。我发现向量坐标是机器学习中最引人注目的类比。 现在我们知道了一个向量是什么,让我们来看看如何在 Python 中定义一个向量。 ## 定义向量 我们可以将 Python 中的向量表示为 NumPy 数组。 可以从数字列表创建 NumPy 数组。例如,下面我们定义一个长度为 3 且整数值为 1,2 和 3 的向量。 ``` # create a vector from numpy import array v = array([1, 2, 3]) print(v) ``` 该示例定义了具有 3 个元素的向量。 运行该示例将打印定义的向量。 ``` [1 2 3] ``` ## 向量算术 在本节中将演示简单的向量向量算法,其中所有操作在两个相等长度的向量之间以元素方式执行,以产生具有相同长度的新向量 ### 向量加法 可以将两个相等长度的向量相加在一起以创建新的第三向量。 ``` c = a + b ``` 新向量与其他两个向量具有相同的长度。新向量的每个元素被计算为在相同索引处添加其他向量的元素;例如: ``` a + b = (a1 + b1, a2 + b2, a3 + b3) ``` 或者,换句话说: ``` c[0] = a[0] + b[0] c[1] = a[1] + b[1] c[2] = a[2] + b[2] ``` 我们可以通过添加 NumPy 数组直接在 Python 中添加向量。 ``` # add vectors from numpy import array a = array([1, 2, 3]) print(a) b = array([1, 2, 3]) print(b) c = a + b print(c) ``` 该示例定义了两个向量,每个向量具有三个元素,然后将它们相加。 首先运行该示例打印两个父向量然后打印一个新向量,该向量是两个向量的相加。 ``` [1 2 3] [1 2 3] [2 4 6] ``` ### 向量减法 可以从另一个相等长度的向量中减去一个向量以创建新的第三向量。 ``` c = a - b ``` 与加法一样,新向量具有与父向量相同的长度,并且新向量的每个元素被计算为相同索引处的元素的减法。 ``` a - b = (a1 - b1, a2 - b2, a3 - b3) ``` Or, put another way: ``` c[0] = a[0] - b[0] c[1] = a[1] - b[1] c[2] = a[2] - b[2] ``` 可以在 Python 中直接减去 NumPy 数组。 ``` # subtract vectors from numpy import array a = array([1, 2, 3]) print(a) b = array([0.5, 0.5, 0.5]) print(b) c = a - b print(c) ``` 该示例定义了两个向量,每个向量包含三个元素,然后从第二个向量中减去第一个向量。 首先运行该示例打印两个父向量,然后打印第一个减去第二个的新向量。 ``` [1 2 3] [ 0.5 0.5 0.5] [ 0.5 1.5 2.5] ``` ### 向量乘法 两个相等长度的向量可以相乘。 ``` c = a * b ``` 与加法和减法一样,该操作以元素方式执行以产生相同长度的新向量。 ``` a * b = (a1 * b1, a2 * b2, a3 * b3) ``` 要么 ``` ab = (a1b1, a2b2, a3b3) ``` Or, put another way: ``` c[0] = a[0] * b[0] c[1] = a[1] * b[1] c[2] = a[2] * b[2] ``` 我们可以直接在 NumPy 中执行此操作。 ``` # multiply vectors from numpy import array a = array([1, 2, 3]) print(a) b = array([1, 2, 3]) print(b) c = a * b print(c) ``` 该示例定义了两个向量,每个向量具有三个元素,然后将向量相乘。 首先运行该示例打印两个父向量,然后打印新向量。 ``` [1 2 3] [1 2 3] [1 4 9] ``` ### 向量分部 可以划分两个相等长度的向量。 ``` c = a / b ``` 与其他算术运算一样,此操作以元素方式执行,以产生相同长度的新向量。 ``` a / b = (a1 / b1, a2 / b2, a3 / b3) ``` or ``` a / b = (a1b1, a2b2, a3b3) ``` Or, put another way: ``` c[0] = a[0] / b[0] c[1] = a[1] / b[1] c[2] = a[2] / b[2] ``` We can perform this operation directly in NumPy. ``` # divide vectors from numpy import array a = array([1, 2, 3]) print(a) b = array([1, 2, 3]) print(b) c = a / b print(c) ``` 该示例定义了两个向量,每个向量具有三个元素,然后将第一个除以第二个。 首先运行该示例打印两个父向量,然后是向量分割的结果。 ``` [1 2 3] [1 2 3] [ 1\. 1\. 1.] ``` ## 向量点产品 我们可以计算两个相同长度向量的相乘元素之和,得到一个标量。 这称为点积,由于在描述操作时使用的点运算符而命名。 > 点积是计算向量投影,向量分解和确定正交性的关键工具。名称点积来自用于表示它的符号。 - 第 110 页,[无线性代数废话指南](http://amzn.to/2k76D4C),2017 年 ``` c = a . b ``` 该操作可用于机器学习以计算向量的加权和。 点积计算如下: ``` a . b = (a1 * b1 + a2 * b2 + a3 * b3) ``` or ``` a . b = (a1b1 + a2b2 + a3b3) ``` 我们可以使用 NumPy 数组上的 dot()函数计算 Python 中两个向量之间的点积。 ``` # dot product vectors from numpy import array a = array([1, 2, 3]) print(a) b = array([1, 2, 3]) print(b) c = a.dot(b) print(c) ``` 该示例定义了两个向量,每个向量包含三个元素,然后计算点积。 运行该示例首先打印两个父向量,然后打印标量点积。 ``` [1 2 3] [1 2 3] 14 ``` ## 向量标量乘法 向量可以乘以标量,实际上缩放向量的大小。 为了使符号简单,我们将使用小写“s”来表示标量值。 ``` c = s * v ``` or ``` c = sv ``` 对向量的每个元素执行乘法,以产生相同长度的新缩放向量。 ``` s * v = (s * v1, s * v2, s * v3) ``` Or, put another way: ``` c[0] = a[0] * s c[1] = a[1] * s c[2] = a[2] * s ``` 我们可以直接使用 NumPy 数组执行此操作。 ``` # vector-scalar multiplication from numpy import array a = array([1, 2, 3]) print(a) s = 0.5 print(s) c = s * a print(c) ``` 该示例首先定义向量,然后标量将向量乘以标量。 首先运行示例打印父向量,然后打印标量,然后将两者相乘的结果。 ``` [1 2 3] 0.5 [ 0.5 1\. 1.5] ``` 类似地,向量标量加法,减法和除法可以以相同的方式执行。 ## 扩展 本节列出了一些扩展您可能希望探索的教程的想法。 * 使用您自己的数据使用每个操作创建 5 个示例。 * 为定义为列表的向量手动实现每个向量操作。 * 搜索机器学习论文并找到每个正在使用的操作的示例。 如果你探索任何这些扩展,我很想知道。 ## 进一步阅读 如果您希望深入了解,本节将提供有关该主题的更多资源。 ### 图书 * 第 1.15 节,向量。 [线性代数无废话指南](http://amzn.to/2k76D4),2017 年。 * 第 2.2 节,向量运算。 [线性代数无废话指南](http://amzn.to/2k76D4),2017 年。 * [线性代数](http://amzn.to/2j2J0g4)简介,2016 年。 * 第 2 章,线性代数,[深度学习](http://amzn.to/2j4oKuP),2016。 ### API * [numpy.array()API](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.array.html) * [numpy.dot()API](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.dot.html) ### 用品 * 维基百科上的[向量空间](https://en.wikipedia.org/wiki/Vector_space) * 维基百科上的 [Dot 产品](https://en.wikipedia.org/wiki/Dot_product) ## 摘要 在本教程中,您发现了用于机器学习的线性代数向量。 具体来说,你学到了: * 什么是向量以及如何使用 NumPy 在 Python 中定义一个向量。 * 如何执行加法,减法,乘法和除法等向量运算。 * 如何使用标量执行点积和乘法等附加操作。 你有任何问题吗? 在下面的评论中提出您的问题,我会尽力回答。