图解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}\)是一个\(m*n\)矩阵,那么\(\boldsymbol{U}\)是一个\(m*m\)矩阵,\(D\)是一个\(m*n\)矩阵,\(V\)是一个\(n*n\)矩阵。
\(\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{U}\)、\(\boldsymbol{D}\)和\(\boldsymbol{V}^{T}\)是矩阵\(\boldsymbol{A}\)奇异值分解后得到的矩阵;
对角矩阵\(\boldsymbol{D}\)的伪逆\(\boldsymbol{D}^{+}\)是其非零元素取倒之后再转置得到的。
9.常用的距离度量
在机器学习里,大部分运算都是基于向量的,一份数据集包含n个特征字段,那每一条样本就可以表示为n维的向量,通过计算两个样本对应向量之间的距离值大小,有些场景下能反映出这两个样本的相似程度。还有一些算法,像KNN和K-means,非常依赖距离度量。
设有两个\(n\)维变量:
\]
\]
一些常用的距离公式定义如下:
1)曼哈顿距离(Manhattan Distance)
曼哈顿距离也称为城市街区距离,数学定义如下:
\]
曼哈顿距离的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范数,数学定义如下:
\]
欧氏距离的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)
从严格意义上讲,闵可夫斯基距离不是一种距离,而是一组距离的定义:
\]
实际上,当\(p=1\)时,就是曼哈顿距离;当\(p=2\)时,就是欧式距离。
前往我们的在线编程环境运行代码:http://blog.showmeai.tech/python3-compiler/#/
4)切比雪夫距离(Chebyshev Distance)
切比雪夫距离就是无穷范数,数学表达式如下:
\]
切比雪夫距离的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。
机器学习中用这一概念来衡量样本向量之间的差异,其数学表达式如下:
\]
夹角余弦的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。信息编码中一般应使得编码间的汉明距离尽可能的小。
\]
汉明距离的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)\)表示,数学表达式为:
\]
杰卡德相似系数是衡量两个集合的相似度的一种指标。一般可以将其用在衡量样本的相似度上。
前往我们的在线编程环境运行代码:http://blog.showmeai.tech/python3-compiler/#/
8)杰卡德距离(Jaccard Distance)
与杰卡德系数相反的概念是杰卡德距离,其定义式为:
\]
杰卡德距离的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系列教程推荐
图解AI数学基础 | 线性代数与矩阵论的更多相关文章
- 图解AI数学基础 | 概率与统计
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/83 本文地址:http://www.showmeai.tech/article-det ...
- CS229 斯坦福大学机器学习复习材料(数学基础) - 线性代数
CS229 斯坦福大学机器学习复习材料(数学基础) - 线性代数 线性代数回顾与参考 1 基本概念和符号 1.1 基本符号 2 矩阵乘法 2.1 向量-向量乘法 2.2 矩阵-向量乘法 2.3 矩阵- ...
- AI数学基础之:奇异值和奇异值分解
目录 简介 相似矩阵 对角矩阵 可对角化矩阵 特征值 特征分解 特征值的几何意义 奇异值 Singular value 奇异值分解SVD 简介 奇异值是矩阵中的一个非常重要的概念,一般是通过奇异值分解 ...
- AI 数学基础 张量 范数
1.张量 几何代数中定义的张量是基于向量和矩阵的推广,通俗一点理解的话,我们可以将标量视为零阶张量,矢量视为一阶张量,那么矩阵就是二阶张量. 例如,可以将任意一张彩色图片表示成一个三阶张量,三个维度分 ...
- AI数学基础:符号
1.sigma 表达式 ∑ 是一个求和符号,英语名称:Sigma,汉语名称:西格玛(大写Σ,小写σ) 第十八个希腊字母.在希腊语中,如果一个单字的最末一个字母是小写sigma,要把该字母写成 ς ,此 ...
- AI 数学基础:概率分布,幂,对数
1.概率分布 参考: https://blog.csdn.net/ZZh1301051836/article/details/89371412 p 2.幂次的意义 物理理解:幂次描述的是指数型的变化 ...
- AI 数学基础 : 熵
什么是熵(entropy)? 1.1 熵的引入 事实上,熵的英文原文为entropy,最初由德国物理学家鲁道夫·克劳修斯提出,其表达式为: 它表示一个系系统在不受外部干扰时,其内部最稳定的状态.后来一 ...
- AI数学基础之:概率和上帝视角
目录 简介 蒙题霍尔问题 上帝视角解决概率问题 上帝视角的好处 简介 天要下雨,娘要嫁人.虽然我们不能控制未来的走向,但是可以一定程度上预测为来事情发生的可能性.而这种可能性就叫做概率.什么是概率呢? ...
- AI数学基础之:确定图灵机和非确定图灵机
目录 简介 图灵机 图灵机的缺点 等效图灵机 确定图灵机 非确定图灵机 简介 图灵机是由艾伦·麦席森·图灵在1936年描述的一种抽象机器,它是人们使用纸笔进行数学运算的过程的抽象,它肯定了计算机实现的 ...
随机推荐
- 闯祸了,生成环境执行了DDL操作《死磕MySQL系列 十四》
由于业务随着时间不停的改变,起初的表结构设计已经满足不了如今的需求,这时你是不是想那就加字段呗!加字段也是个艺术活,接下来由本文的主人咔咔给你吹. 试想一下这个场景 事务A在执行一个非常大的查询 事务 ...
- Flutter 2022 产品路线图发布
为了提升产品的透明性,每年年初 Flutter 团队都会发布今年度的产品路线图,以帮助使用 Flutter 的团队和开发者们根据这些优先事项制定计划. 2022 年 Flutter 团队将重点通过关注 ...
- 品味Spring Cache设计之美
最近负责教育类产品的架构工作,两位研发同学建议:"团队封装的Redis客户端可否适配Spring Cache,这样加缓存就会方便多了" . 于是边查阅文档边实战,收获颇丰,写这篇文 ...
- Centos上通过yum命令删除有关MySQL
1.停止mysql 服务service mysql stop 2.刚开始使用的yum安装的,使用以下语句进行卸载 yum remove mysql* 3.然后删除mysql旧版本已经存在的文件或者数据 ...
- 2月1日 体温APP开发记录
1.阅读构建之法 现代软件工程(第三版) 2.观看Android开发视频教程最新版 Android Studio开发
- VueRouter学习01-基本使用
## 基本使用: 1. 创建一个`VueRouter`对象:`new VueRouter()`. 2. 在`VueRouter`中,需要传递一个`routes`参数.这个参数是一个数组类型,数组中存储 ...
- update(修改,DML语句) 和 delete(删除数据,DML语句)
7.7.修改update(DML) 语法格式: update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3....where 条件; 注意:没有条件限制会导致所有数据全部更新 upda ...
- 为什么 Redis 的查询很快, Redis 如何保证查询的高效
Redis 如何保证高效的查询效率 为什么 Redis 比较快 Redis 中的数据结构 1.简单动态字符串 SDS 对比 c 字符串的优势 SDS可以常数级别获取字符串的长度 杜绝缓冲区溢出 减少修 ...
- 权限修饰符和final关键字
public 不受任何限制,可以被其他任何类访问 一个JAVA文件只能包含一个public文件 java将public类作为每个编译单元的数据接口 只能有一个接口 private 只能在自己类中访问 ...
- 深入理解F1-score
本博客的截图均来自zeya的post:Essential Things You Need to Know About F1-Score | by Zeya | Towards Data Science ...