• 沒有找到結果。

第02讲 向量的基础知识

N/A
N/A
Protected

Academic year: 2021

Share "第02讲 向量的基础知识"

Copied!
8
0
0

加載中.... (立即查看全文)

全文

(1)

第02讲 向量的基础知识

作者:欧新宇(Xinyu OU)

本文档所展示的测试结果,均运行于:Intel Core i7-7700K CPU 4.2GHz

本章要点

1. 向量的基本知识回顾 2. 列向量及向量的Python描述 3. 向量的范数

4. 常用向量

空间是贯穿线性代数整个领域的主干和核心概念,我们所有的概念和应用都会构架在空间这个逻辑实体 上。而向量和矩阵就是我们用来填充这个实体的工具,包括运算、映射、降维、投影、近似求解、特征 提取等,都将建立在基于矩阵和向量的空间中实现。

1. 重温向量

向量:也称欧几里得向量、几何向量、矢量,它指具有大小方向的量。它可以形象化地表示为 带箭头的线段。直观地说,一组排列成行或列的有序数字,就是向量。

箭头所指:代表向量的方向;

线段长度:代表向量的大小;

向量的记法:

印刷体,记作小写粗斜体字母,如 *a, b, u, v *;

手写体,在字母顶上加一小箭头 “→”,如 给定向量的起点A和终点B,可记作 ;

在空间直角坐标系中,以数对形式表示,如 (2, 3)

1.1 二维向量的空间表示

【例2.1】给定二维向量 𝒖= ,它有两个分量,其中x分量值为3,y 分量值为4,以原点(0,0)为起 点,可以在直角坐标系中构建一条有向线段。

(2)

1.2 三维向量的空间表示

【例2.2】 给定三维向量 𝒖= ,它有三个分量,其中x 分量值为4,y 分量值为2,z 分量值为2,以

原点(0,0,0)为起点,可以在三阶笛卡尔坐标系中构建一条有向线段。

2. 列向量及向量的Python描述

2.1 计算机领域主要使用列向量

根据数字的排列方式,向量可以被分为行向量列向量。在计算机领域中,我们常使用列向量来表示 和处理向量。例如,将矩阵A映射到向量x上时,可以用 Ax 来表示,最常见的应用是求解方程组。列向 量通常由两种表示方法。

直观表示:

单行表示(更常用):

2.2 基于Python语言的向量表示

在Python中,最重要,也是最常用的一个库就是数学计算库 Numpy,它也是我们这门课中最主要 python工具包。下面我们将使用numpy库来实现矩阵的创建。

创建numpy数组(向量)

获取变量的数据类型 import numpy as np

A = np.array([1, 2, 3, 4]) print(A)

[1 2 3 4]

(3)

值得注意的是display() 函数是IPython的内置函数,仅适合用于Jupyter Notebook 和 JupyterLab。

IPython是python的交互式shell界面。

下面,我们还可以使用python的内置函数type实现对数据类型的查看 。

 

 

2.3 列向量的生成

前面我们已经提到在机器学习及大多数计算机的任务中,我们需要处理的都是以列形式存在的列向量,

而numpy默认生成的是一个行向量。因此,我们需要对生成的向量进行一定转换。具体而言,我们需要 将numpy生成的行向量转换成列向量。此处,最容易也是最直接的方法就是使用矩阵的转置

(transpose)。

值得注意的是,在计算机的存储意识中,向量是一个一维的量,它只在一个维度上具有值。因 此,无法进行转置(可理解为90度的方向转换,从行向量转换为列向量)。

幸运的是,我们可以将一维的向量理解成一个二维矩阵,只不过矩阵的某个维度值为1。

当我们使用向量来表示一个数据时,可以表示为: A = [a_1, a_2,…, a_n], 此时,A 是一个维度为 1,

长度为 的数据(向量);

而当我们使用矩阵来表示这个向量时,则可以表示为: = [a{11}, a{12},…,a_{1n}], 此时 是 一个维度为2的数据(矩阵),第一个维度长度为 1,第二个维度长度为 ,我们也可以将这样的 矩阵理解为一个行向量,一行n列,形态为: (1, 4)。

在转换为二维矩阵后,我们就可以通过矩阵的转置实现行向量列向量的转换,此时的数据 将转变为一个列向量 ,n行一列,形态为: (4, 1) ,表示为: 。 在Python中,有两种很直接的行列转换方式,他们都可以实现矩阵的转置:A.transpose() 和 A.T。

(注意,我们前面介绍过,矩阵转置对于向量是无效的。)

- 直接使用一维向量进行转换

display(A)

array([1, 2, 3, 4])

type(A)

numpy.ndarray

import numpy as np

A = np.array([2, 2, 3, 4]) B = A.transpose()

C = A.T

print('a={}'.format(A)) print('A={}'.format(B)) print('B={}'.format(C))

(4)

 

- 使用二维矩阵进行转换

 

【结果分析】

从上面 “直接使用一维向量进行转换” 的结果来看,原始的一维向量A和经过 .transpose()和 .T 转换 后的向量B和C,都呈现为相同的形态 (4, 1),并且值也完全相同。这说明在Python中,转置在向量上是 无效的。

当我们使用二维矩阵进行转换时,新生成的矩阵 是一个 的二维矩阵,当经过 .transpose() 和 .T 转换后,两个矩阵都变成了 的矩阵。这说明,原来以二维矩阵显示的行向量,形态为 (1,4);已经转换为以二维矩阵显示的列向量了,形态为(4, 1)。

a=[2 2 3 4]

A=[2 2 3 4]

B=[2 2 3 4]

print('A的形态: {}'.format(A.shape))

print('B的形态: {}; C的形态: {}'.format(B.shape, C.shape))

A的形态: (4,)

B的形态: (4,); C的形态: (4,)

import numpy as np

A2 = np.array([[1, 2, 3, 4]]) B2 = A2.transpose()

C2 = A2.T

print('A2={}'.format(A2)) print('B2={}'.format(B2)) print('C2={}'.format(C2))

A2=[[1 2 3 4]]

B2=[[1]

[2]

[3]

[4]]

C2=[[1]

[2]

[3]

[4]]

print('A2的形态: {}'.format(A2.shape))

print('B2的形态: {}; C2的形态: {}'.format(B2.shape, C2.shape))

A2的形态: (1, 4)

B2的形态: (4, 1); C2的形态: (4, 1)

(5)

值得注意的是,在Python中一维向量二维矩阵的表示非常容易转换,只需要增加一层中括号“[

]”就可以实现从一维二维的转换。相似地,三维矩阵使用三层中括号表示,n 维矩阵使用 n 层 中括号表示。下面给出一维向量和二维向量的表示。

3. 向量的范数

3.1 范数的定义

范数(norm):数学中的一种基本概念。在线性代数、泛函分析及相关的数学领域,范数是一个具有 度 概念的函数。在泛函分析中,它定义在赋范线性空间中,并满足一定的条件,即: ①非负性;②齐次 性;③三角不等式。

范数常常被用来度量向量空间(或矩阵)中的某个向量的长度或大小。例如,在二维的欧氏几何空间R 中,元素被刻画成一个从原点出发的带有箭头的有向线段,每一个矢量的有向线段的长度即为该矢量的 欧氏范数。

对于一个 维向量 ,其大小可以用向量 的范数来进行衡量,其一般形式可以表示 为 :

其中, 且 。

值得注意的是,符号 也被称为 𝒑-范数(p-norm)。

3.2 范数的典型性质

范数直观上可以表示为衡量向量长度的函数,相当于求原点o到点𝑣的距离,因此所有的范数都满足以下 三条性质:

非负性:函数的值永远都是非负,当且仅当向量为全零向量时,范数函数值为0.

其中, 是任意向量, 是 的范数。

三角不等式:两个向量范数的和大于等于两个向量和的范数。

正值齐次性:

3.3 常见范数

3.3.1 L2范数

L2范数的定义

对于 -范数,当 等于2时, 范数(L2范数, L2 norm)也被称为欧几里得范数,它表示从源点出发到 向量𝑣的欧几里得距离,简称欧式距离。向量𝑣的欧式距离通常可以表示为 ,也可以省略为: , 即:

在二维空间中,向量𝑣(𝑥, 𝑦) 的长度可以表示为:

A = np.array([1, 2, 3, 4]) A2 = np.array([[1, 2, 3, 4]])

(6)

向量间的距离

对于空间中的任意两个向量,也可以利用L2范数来求它们之间的距离。

【例2.3】 求向量 和向量 之间的距离 。

L2范数在机器学习和深度学习中被广泛应用,在具体的应用中,我们可以用两个向量的欧式距离来表达 它们之间的相似性。此外,还可以使用L2范数来对样本的特征或权重进行约束。

例如,公式 ,给出了岭回归算法(一种使用L2正则化的线性模型)的典 型形式。

如上例所示,为了方便计算,经常会使用平方L2范数来替代L2范数,省去开平方操作。

向量间的点积

两个向量的点积〖 𝑥〗^𝑇 𝑦可以用范数来表示,具体如下:

3.3.2 L1范数

当 等于1时,𝒑-范数就会退化成另外一种常用的特殊范数L1范数(L1范数, L1 norm)。其数学表达 为:

不难看出,它是对向量中的每个元素的绝对值的累加。因此,L1范数可以用来区分零元素和非零元素。

在机器学习和深度学习中,区分零和非零是非常重要,因此它也可以实现对样本特征或权重的约束。

例如,公式 ,,给出了套索(Lasso)回归算法(一种使用L1正则化的线性 模型)的典型形式。

3.3.3 无穷范数

当 趋近于 时, -范数就会变为机器学习中经常出现的另外一种范数: 范数,又称为无穷范数或最 大范数(max norm)。 范数表示向量中最大分量的绝对值:

在数据处理中,有时需要选择出响应最大的分量来进行处理。此时,就可以使用无穷范数。在深度学习 中的卷积神经网络CNN模型中的最大池化(max-pooling)就是这种思想最典型的应用。

 

(7)

3.3.4 F-范数

弗罗贝尼乌斯范数(Frobenius范数):简称为F范数,是一种定义在矩阵上的范数,用于衡量矩阵的大 小。F范数表示矩阵中各元素的平方和开方,其数学表达为:

F范数的计算规则与L2范数非常相似,区别是它是定义在矩阵上的范数,用于衡量矩阵的大小。

3.4 范数的Python描述

L2范数:

L1范数:

无穷范数:

F范数:

4. 常用的向量

全0向量和全1向量

全0向量:所有分量都为0的向量,用一个粗体的0表示。

全1向量:所有分量都为1的向量,用一个粗体的1表示。

全0向量和全1向量,通常都是为了保证表达式描述的正确性或为变量进行初始化使用。

One-hot向量

One-Hot向量:又称为独热码(独热编码),有且仅有一个分量为1,其它分量都为0的向量。其形式 如下:

One-Hot向量在编码中使用广泛,例如,在分类应用中,对于一个有8个类别的场景,通常将分类结果 编码为一个One-Hot向量,元素为1的那个分量对应的类别即为真实(预测)的分类类别。

One-Hot属于一种稀疏编码,不同分量之间默认没有关联。并且不同分量间通常是独立同分布(IID)

的。

单位向量

np.linalg.norm(x)  # 默认状态为L2范数 np.linalg.norm(x, ord=2)

np.linalg.norm(x, ord=1)

np.linalg.norm(x, ord=np.inf)

np.linalg.norm(X)    # 当X为矩阵时,即为F范数

(8)

单位向量(Unit Vector):L2范数为1的向量。

单位向量将向量的长度约束为1,这样很好地屏蔽了模长带来的影响,使向量只用于表达方向一种量。

例如常用的余弦相似性(cosine similarity)就通过比较两个向量的夹角大小来确定向量间的相似性。

其中, 为两个向量的夹角, 和 为两个单位向量。

參考文獻

相關文件

z 除了大小,電流還要考慮方 向,箭頭所指的方向就是電流I 流動的方向,此一方向稱為基 準方向。此一基準方向可以任

The purpose of this research is to study a tiling problem: Given an m × n chessboard, how many ways are there to tile the chessboard with 1 × 2 dominoes and also ”diagonal”

 1932 年提出李克特量表( Likert Scale ),是一種 心理測量量表,通常用於問卷設計,為目前最受調查 研究者廣泛使用的測量方法.

sort 函式可將一組資料排序成遞增 (ascending order) 或 遞減順序 (descending order)。. 如果這組資料是一個行或列向量,整組資料會進行排序。

在編輯/偵錯視窗 (Editor) 中,善用 “反白 MATLAB 宣告式. → 按下滑鼠右鍵 → 選取

Department of Mathematics, National Taiwan Normal University,

[r]

評定量表 (rating scale) :指用以評定等級的工具,按評定結果可以看出學生 在某種特質上的等級,當中有各種形式如數字評定量表 (numerical rating scal e) 、圖示評定量表