原文: https://machinelearningmastery.com/gentle-introduction-vectors-machine-learning/
向量是线性代数的基本元素。
在训练算法时,在算法和过程(例如目标变量(y))的描述中,在整个机器学习领域中使用向量。
在本教程中,您将发现用于机器学习的线性代数向量。
完成本教程后,您将了解:
- 什么是向量以及如何使用 NumPy 在 Python 中定义一个向量。
- 如何执行加法,减法,乘法和除法等向量运算。
- 如何使用标量执行点积和乘法等附加操作。
让我们开始吧。
机器学习向量的温和介绍 Lachlan Donald 的照片,保留一些权利。
本教程分为 5 个部分;他们是:
- 什么是向量?
- 定义向量
- 向量算术
- 向量点产品
- 向量标量乘法
向量是一个或多个称为标量的值的元组。
向量由组件构建,组件是普通数字。您可以将向量视为数字列表,将向量代数视为对列表中的数字执行的操作。
- 第 69 页,无线性代数废话指南,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 页,无线性代数废话指南,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 个示例。
- 为定义为列表的向量手动实现每个向量操作。
- 搜索机器学习论文并找到每个正在使用的操作的示例。
如果你探索任何这些扩展,我很想知道。
如果您希望深入了解,本节将提供有关该主题的更多资源。
在本教程中,您发现了用于机器学习的线性代数向量。
具体来说,你学到了:
- 什么是向量以及如何使用 NumPy 在 Python 中定义一个向量。
- 如何执行加法,减法,乘法和除法等向量运算。
- 如何使用标量执行点积和乘法等附加操作。
你有任何问题吗? 在下面的评论中提出您的问题,我会尽力回答。