# 机器学习向量的温和介绍

> 原文： [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 中定义一个向量。
*   如何执行加法，减法，乘法和除法等向量运算。
*   如何使用标量执行点积和乘法等附加操作。

你有任何问题吗？
在下面的评论中提出您的问题，我会尽力回答。