乐趣区

关于数学:图解AI数学基础-线性代数与矩阵论

作者:韩信子 @ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/83
本文地址:http://www.showmeai.tech/article-detail/162
申明:版权所有,转载请分割平台与作者并注明出处


1. 标量(Scalar)

一个标量就是一个独自的数。只具备数值大小,没有方向(局部有正负之分),运算遵循个别的代数法令。

  • 个别用小写的变量名称示意。
  • 品质 \(m \)、速率 \(v \)、工夫 \(t \)、电阻 \(\rho \) 等物理量,都是数据标量。

2. 向量(Vector)

向量指具备大小和方向的量,状态上看就是一列数。

  • 通常赋予向量 粗体小写 的名称;手写体则在字母上加一个向右的箭头。
  • 向量中的元素是有序排列的,通过索引能够确定每个元素。
  • 以下两种形式,能够明确示意向量中的元素时(留神用方括号)。
  • 能够把向量看作空间中的有向线段,向量的每个组成元素,对应向量在不同的坐标轴上的投影长度。

AI 中的利用:在机器学习中,单条数据样本的表征都是以向量化的模式来实现的。向量化的形式能够帮忙 AI 算法在迭代与计算过程中,以更高效的形式实现。

3. 矩阵(Matrix)

矩阵是二维数组,其中的每一个元素被两个索引确定。矩阵在机器学习中至关重要,无处不在。

  • 通常会赋予矩阵粗体大写的变量名称。

AI 中的利用 :样本以矩阵状态示意:\(m \) 条数据 / 样本,\(n \)个特色的数据集,就是一个 \(m \times n \)的矩阵。

4. 张量(Tensor)

几何代数中定义的张量,是基于向量和矩阵的推广。

  • 标量,能够视为零阶张量
  • 向量,能够视为一阶张量
  • 矩阵,能够视为二阶张量

  • 图片以矩阵状态示意:将一张彩色图片示意成一个 \(H \times W \times C \)的三阶张量,其中 \(H \)是高,\(W \)是宽,\(C \)通常取 3,示意黑白图 3 个色彩通道。
  • 在这个例子的根底上,将这一定义持续扩大,即:用四阶张量(样本,高度,宽度,通道)示意一个蕴含多张图片的数据集,其中,样本示意图片在数据集中的编号。
  • 用五阶张量(样本,帧速,高度,宽度,通道)示意视频。

AI 中的利用:张量是深度学习中一个十分重要的概念,大部分的数据和权重都是以张量的状态存储的,后续的所有运算和优化算法也都是基于张量进行的。

5. 范数(Norm)

范数是一种强化了的间隔概念;简略来说,能够把『范数』了解为『间隔』。

在数学上,范数包含『向量范数』和『矩阵范数』:

  • 向量范数(Vector Norm),表征向量空间中向量的大小。向量空间中的向量都是有大小的,这个大小就是用范数来度量。不同的范数都能够来度量这个大小,就好比米和尺都能够来度量远近一样。
  • 矩阵范数(Matrix Norm),表征矩阵引起变动的大小。比方,通过运算 \(\boldsymbol{A}\boldsymbol{X} = \boldsymbol{B} \),能够将向量 \(\boldsymbol{X} \)变动为 \(\boldsymbol{B} \),矩阵范数就能够度量这个变动的大小。

向量范数的计算

对于 \(\mathrm{p} – \)范数,如果 \(\boldsymbol{x}=\left[x_{1}, x_{2}, \cdots, x_{n}\right]^{\mathrm{T}} \),那么向量 \(\boldsymbol{x} \)的 \(\mathrm{p} – \)范数就是 \(|\boldsymbol{x}|_{p}=\left(\left|x_{1}\right|^{p}+\left|x_{2}\right|^{p}+\cdots+\left|x_{n}\right|^{p}\right)^{\frac{1}{p}} \)。

L1 范数:\(|| \boldsymbol{x}||_{1}=\left|x_{1}\right|+\left|x_{2}\right|+\left|x_{3}\right|+\cdots+\left|x_{n}\right| \)

  • \(\mathrm{p} =1 \)时,就是 L1 范数,是 \(\boldsymbol{x} \)向量各个元素的绝对值之和。
  • L1 范数有很多的名字,例如咱们相熟的曼哈顿间隔、最小绝对误差等。

L2 范数:\(|\boldsymbol{x}|_{2}=\left(\left|x_{1}\right|^{2}+\left|x_{2}\right|^{2}+\left|x_{3}\right|^{2}+\cdots+\left|x_{n}\right|^{2}\right)^{1 / 2} \)

  • \(\mathrm{p} =2 \)时,就是 L2 范数,是 \(\boldsymbol{x} \)向量各个元素平方和的开方。
  • L2 范数是咱们最罕用的范数,欧氏间隔就是一种 L2 范数。

AI 中的利用 :在机器学习中,L1 范数和 L2 范数很常见,比方『 评估准则的计算 』、『 损失函数中用于限度模型复杂度的正则化项』等。

6. 特色合成(Eigen-decomposition)

将数学对象分解成多个组成部分,能够找到他们的一些属性,或者能更洼地了解他们。例如,整数能够合成为质因数,通过 \(12=2 \times 3 \times 3 \)能够失去『12 的倍数能够被 3 整除,或者 12 不能被 5 整除』。

同样,咱们能够将『矩阵』合成为一组『特征向量』和『特征值』,来发现矩阵示意为数组元素时不显著的函数性质。特色合成(Eigen-decomposition)是宽泛应用的矩阵合成形式之一。

  • 特征向量 :方阵 \(\boldsymbol{A} \) 的特征向量,是指与 \(\boldsymbol{A} \)相乘后相当于对该向量进行缩放的非零向量,即 \(\boldsymbol{A}\nu =\lambda \nu \)。
  • 特征值 :标量 \(\lambda \) 被称为这个特征向量对应的特征值。

应用特色合成去剖析矩阵 \(\boldsymbol{A} \)时,失去特征向量 \(\nu \)形成的矩阵 \(\boldsymbol{Q} \)和特征值形成的向量 \(\boldsymbol{\Lambda} \),咱们能够从新将 \(\boldsymbol{A} \)写作:\(\boldsymbol{A} = \boldsymbol{Q} \boldsymbol{\Lambda} \boldsymbol{Q}^{-1} \)

7. 奇怪值合成(Singular Value Decomposition,SVD)

矩阵的特色合成是有前提条件的。只有可对角化的矩阵,才能够进行特色合成。理论很多矩阵不满足这一条件,这时候怎么办呢?

将矩阵的『特色合成』进行推广,失去一种被称为『矩阵的奇怪值合成』的办法,行将一个一般矩阵合成为『奇怪向量』和『奇怪值』。通过奇怪值合成,咱们会失去一些相似于特色合成的信息。

将矩阵 \(\boldsymbol{A} \)分解成三个矩阵的乘积 \(\boldsymbol{A} = \boldsymbol{U} \boldsymbol{D} \boldsymbol{V}^{-1} \)。

  • 假如 \(\boldsymbol{A} \)是一个 \(mn \)矩阵,那么 \(\boldsymbol{U} \)是一个 \(mm \)矩阵,\(D \)是一个 \(mn \)矩阵,\(V \)是一个 \(nn \)矩阵。
  • \(\boldsymbol{U} \boldsymbol{V} \boldsymbol{D} \)这几个矩阵都领有非凡的构造:

    • \(\boldsymbol{U} \)和 \(\boldsymbol{V} \)都是正交矩阵,矩阵 \(\boldsymbol{U} \)的列向量被称为左奇怪向量,矩阵 \(\boldsymbol{V} \) 的列向量被称右奇怪向量。
    • \(\boldsymbol{D} \)是对角矩阵(留神,\(\boldsymbol{D} \)不肯定是方阵)。对角矩阵 \(\boldsymbol{D} \)对角线上的元素被称为矩阵 \(\boldsymbol{A} \)的奇怪值。

AI 中的利用:SVD 最有用的一个性质可能是拓展矩阵求逆到非方矩阵上。而且大家在举荐零碎中也会见到基于 SVD 的算法利用。

8.Moore-Penrose 狭义逆 / 伪逆(Moore-Penrose Pseudoinverse)

假如在上面问题中,咱们想通过矩阵 \(\boldsymbol{A} \)的左逆 \(\boldsymbol{B} \)来求解线性方程:\(\boldsymbol{A} x=y \),等式两边同时左乘左逆 B 后,失去:\(x=\boldsymbol{B} y \)。是否存在惟一的映射将 \(\boldsymbol{A} \)映射到 \(\boldsymbol{B} \),取决于问题的模式:

  • 如果矩阵 \(\boldsymbol{A} \)的行数大于列数,那么上述方程可能没有解;
  • 如果矩阵 \(\boldsymbol{A} \)的行数小于列数,那么上述方程可能有多个解。

Moore-Penrose 伪逆使咱们可能解决这种状况,矩阵 \(\boldsymbol{A} \)的伪逆定义为:

$$\boldsymbol{A}^{+}=\lim _{a \rightarrow 0}\left(\boldsymbol{A}^{T} \boldsymbol{A}+\alpha \boldsymbol{I}\right)^{-1} \boldsymbol{A}^{T}$$

然而计算伪逆的理论算法没有基于这个式子,而是应用上面的公式:

$$
\boldsymbol{A}^{+}=\boldsymbol{U} \boldsymbol{D}^{+} \boldsymbol{V}^{T}
$$

  • 矩阵 \(\boldsymbol{U} \)、\(\boldsymbol{D} \)和 \(\boldsymbol{V}^{T} \)是矩阵 \(\boldsymbol{A} \)奇怪值合成后失去的矩阵;
  • 对角矩阵 \(\boldsymbol{D} \)的伪逆 \(\boldsymbol{D}^{+} \)是其非零元素取倒之后再转置失去的。

9. 罕用的间隔度量

在机器学习里,大部分运算都是基于向量的,一份数据集蕴含 n 个特色字段,那每一条样本就能够示意为 n 维的向量,通过计算两个样本对应向量之间的间隔值大小,有些场景下能反映出这两个样本的类似水平。还有一些算法,像 KNN 和 K -means,十分依赖间隔度量。

设有两个 \(n \)维变量:

$$A=[x_{11}, x_{12},…,x_{1n} ] ^{T}$$

$$B=[x_{21} ,x_{22} ,…,x_{2n} ] ^{T}$$

一些罕用的间隔公式定义如下

1)曼哈顿间隔(Manhattan Distance)

曼哈顿间隔也称为城市街区间隔,数学定义如下:

$$d_{12} =\sum_{k=1}^{n}{| x_{1k}-x_{2k} | }$$

曼哈顿间隔的 Python 实现

import numpy as np
vector1 = np.array([1,2,3])
vector2 = np.array([4,5,6])

manhaton_dist = np.sum(np.abs(vector1-vector2))
print("曼哈顿间隔为", manhaton_dist)

返回咱们的在线编程环境运行代码:http://blog.showmeai.tech/python3-compiler/#/

2)欧氏间隔(Euclidean Distance)

欧氏间隔其实就是 L2 范数,数学定义如下:

$$d_{12} =\sqrt{\sum_{k=1}^{n}{(x_{1k} -x_{2k} ) ^{2} } }$$

欧氏间隔的 Python 实现

import numpy as np
vector1 = np.array([1,2,3])
vector2 = np.array([4,5,6])

eud_dist = np.sqrt(np.sum((vector1-vector2)**2))
print("欧式间隔为", eud_dist)

返回咱们的在线编程环境运行代码:http://blog.showmeai.tech/python3-compiler/#/

3)闵氏间隔(Minkowski Distance)

从严格意义上讲,闵可夫斯基间隔不是一种间隔,而是一组间隔的定义:

$$d_{12} =\sqrt[p]{\sum_{k=1}^{n}{(x_{1k} -x_{2k} ) ^{p} } }$$

实际上,当 \(p=1 \) 时,就是曼哈顿间隔;当 \(p=2 \) 时,就是欧式间隔。

返回咱们的在线编程环境运行代码:http://blog.showmeai.tech/python3-compiler/#/

4)切比雪夫间隔(Chebyshev Distance)

切比雪夫间隔就是无穷范数,数学表达式如下:

$$d_{12} =max(| x_{1k}-x_{2k} |)$$

切比雪夫间隔的 Python 实现如下

import numpy as np
vector1 = np.array([1,2,3])
vector2 = np.array([4,5,6])

cb_dist = np.max(np.abs(vector1-vector2))
print("切比雪夫间隔为", cb_dist)

返回咱们的在线编程环境运行代码:http://blog.showmeai.tech/python3-compiler/#/

5)余弦类似度(Cosine Similarity)

余弦类似度的取值范畴为[-1,1],能够用来掂量两个向量方向的差别:

  • 夹角余弦越大,示意两个向量的夹角越小;
  • 当两个向量的方向重合时,夹角余弦取最大值 1;
  • 当两个向量的方向齐全相同时,夹角余弦取最小值 -1。

机器学习中用这一概念来掂量样本向量之间的差别,其数学表达式如下:

$$cos\theta =\frac{AB}{| A | |B |} =\frac{\sum_{k=1}^{n}{x_{1k}x_{2k} } }{\sqrt{\sum_{k=1}^{n}{x_{1k}^{2} } } \sqrt{\sum_{k=1}^{n}{x_{2k}^{2} } } }$$

夹角余弦的 Python 实现

import numpy as np
vector1 = np.array([1,2,3])
vector2 = np.array([4,5,6])

cos_sim = np.dot(vector1, vector2)/(np.linalg.norm(vector1)*np.linalg.norm(vector2))
print("余弦类似度为", cos_sim)

返回咱们的在线编程环境运行代码:http://blog.showmeai.tech/python3-compiler/#/

6)汉明间隔(Hamming Distance)

汉明间隔定义的是两个字符串中不雷同位数的数目。例如,字符串‘1111’与‘1001’之间的汉明间隔为 2。信息编码中个别应使得编码间的汉明间隔尽可能的小。

$$d_{12} = \sum_{k=1}^{n} \left (x_{1k} \oplus x_{2k}\right )$$

汉明间隔的 Python 实现

import numpy as np
a=np.array([1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0])
b=np.array([1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1])
hanm_dis = np.count_nonzero(a!=b)
print("汉明间隔为", hanm_dis)

返回咱们的在线编程环境运行代码:http://blog.showmeai.tech/python3-compiler/#/

7)杰卡德系数(Jaccard Index)

两个汇合 \(A\( 和 \( B\( 的交加元素在 \( A\( 和 \( B\( 的并集中所占的比例称为两个汇合的杰卡德系数,用符号 \( J(A,B)\(示意,数学表达式为:

$$J(A,B) =\frac{| A\cap B|}{|A\cup B |}$$

杰卡德类似系数是掂量两个汇合的类似度的一种指标。个别能够将其用在掂量样本的类似度上。

返回咱们的在线编程环境运行代码:http://blog.showmeai.tech/python3-compiler/#/

8)杰卡德间隔(Jaccard Distance)

与杰卡德系数相同的概念是杰卡德间隔,其定义式为:

$$J_{\sigma} =1-J(A,B) =\frac{| A\cup B | -| A\cap B |}{| A\cup B |}$$

杰卡德间隔的 Python 实现

import numpy as np
vec1 = np.random.random(10)>0.5
vec2 = np.random.random(10)>0.5

vec1 = np.asarray(vec1, np.int32)
vec2 = np.asarray(vec2, np.int32)

up=np.double(np.bitwise_and((vec1 != vec2),np.bitwise_or(vec1 != 0, vec2 != 0)).sum())
down=np.double(np.bitwise_or(vec1 != 0, vec2 != 0).sum())
jaccard_dis =1-(up/down)
print("杰卡德间隔为", jaccard_dis)

返回咱们的在线编程环境运行代码:http://blog.showmeai.tech/python3-compiler/#/

ShowMeAI 相干文章举荐

  • 图解线性代数与矩阵论
  • 图解信息论
  • 图解微积分与最优化

ShowMeAI 系列教程举荐

  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程

退出移动版