圖解AI數(shù)學基礎 | 線性代數(shù)與矩陣論
1.標量(Scalar)
一個標量就是一個單獨的數(shù)。只具有數(shù)值大小,沒有方向(部分有正負之分),運算遵循一般的代數(shù)法則。
- 一般用小寫的變量名稱表示。
- 質(zhì)量mmm、速率vvv、時間ttt、電阻ρ\rhoρ 等物理量,都是數(shù)據(jù)標量。
2.向量(Vector)
向量指具有大小和方向的量,形態(tài)上看就是一列數(shù)。
- 通常賦予向量粗體小寫的名稱;手寫體則在字母上加一個向右的箭頭。
- 向量中的元素是有序排列的,通過索引可以確定每個元素。
- 以下兩種方式,可以明確表示向量中的元素時(注意用方括號)。
- 可以把向量看作空間中的有向線段,向量的每個組成元素,對應向量在不同的坐標軸上的投影長度。
AI中的應用:在機器學習中,單條數(shù)據(jù)樣本的表征都是以向量化的形式來完成的。向量化的方式可以幫助AI算法在迭代與計算過程中,以更高效的方式完成。
3.矩陣(Matrix)
矩陣是二維數(shù)組,其中的每一個元素被兩個索引確定。矩陣在機器學習中至關重要,無處不在。
- 通常會賦予矩陣粗體大寫的變量名稱。
AI中的應用:樣本以矩陣形態(tài)表示:mmm條數(shù)據(jù)/樣本,nnn個特征的數(shù)據(jù)集,就是一個m×nm \times nm×n的矩陣。
4.張量(Tensor)
幾何代數(shù)中定義的張量,是基于向量和矩陣的推廣。
- 標量,可以視為零階張量
- 向量,可以視為一階張量
- 矩陣,可以視為二階張量
-
圖片以矩陣形態(tài)表示:將一張彩色圖片表示成一個H×W×CH \times W \times CH×W×C的三階張量,其中HHH是高,WWW是寬,CCC通常取3,表示彩色圖3個顏色通道。
-
在這個例子的基礎上,將這一定義繼續(xù)擴展,即:用四階張量(樣本,高度,寬度,通道)表示一個包含多張圖片的數(shù)據(jù)集,其中,樣本表示圖片在數(shù)據(jù)集中的編號。
-
用五階張量(樣本,幀速,高度,寬度,通道)表示視頻。
AI中的應用:張量是深度學習中一個非常重要的概念,大部分的數(shù)據(jù)和權(quán)重都是以張量的形態(tài)存儲的,后續(xù)的所有運算和優(yōu)化算法也都是基于張量進行的。
5.范數(shù)(Norm)
范數(shù)是一種強化了的距離概念;簡單來說,可以把『范數(shù)』理解為『距離』。
在數(shù)學上,范數(shù)包括『向量范數(shù)』和『矩陣范數(shù)』:
- 向量范數(shù)(Vector Norm),表征向量空間中向量的大小。向量空間中的向量都是有大小的,這個大小就是用范數(shù)來度量。不同的范數(shù)都可以來度量這個大小,就好比米和尺都可以來度量遠近一樣。
- 矩陣范數(shù)(Matrix Norm),表征矩陣引起變化的大小。比如,通過運算AX=B\boldsymbol{A}\boldsymbol{X} = \boldsymbol{B}AX=B,可以將向量X\boldsymbol{X}X變化為B\boldsymbol{B}B,矩陣范數(shù)就可以度量這個變化的大小。
向量范數(shù)的計算:
對于p?\mathrm{p} -p?范數(shù),如果x=[x1,x2,??,xn]T\boldsymbol{x}=\left[x_{1}, x_{2}, \cdots, x_{n}\right]^{\mathrm{T}}x=[x1,x2,?,xn]T,那么向量x\boldsymbol{x}x的p?\mathrm{p} -p?范數(shù)就是∥x∥p=(∣x1∣p+∣x2∣p+?+∣xn∣p)1p|\boldsymbol{x}|{p}=\left(\left|x{1}\right|{p}+\left|x_{2}\right|{p}+\cdots+\left|x_{n}\right|{p}\right){\frac{1}{p}}∥x∥p=(∣x1∣p+∣x2∣p+?+∣xn∣p)p1。
L1范數(shù):∣∣x∣∣1=∣x1∣+∣x2∣+∣x3∣+?+∣xn∣|| \boldsymbol{x}||{1}=\left|x{1}\right|+\left|x_{2}\right|+\left|x_{3}\right|+\cdots+\left|x_{n}\right|∣∣x∣∣1=∣x1∣+∣x2∣+∣x3∣+?+∣xn∣
- p=1\mathrm{p} =1p=1時,就是L1范數(shù),是x\boldsymbol{x}x向量各個元素的絕對值之和。
- L1范數(shù)有很多的名字,例如我們熟悉的曼哈頓距離、最小絕對誤差等。
L2范數(shù):∥x∥2=(∣x1∣2+∣x2∣2+∣x3∣2+?+∣xn∣2)1/2|\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}∥x∥2=(∣x1∣2+∣x2∣2+∣x3∣2+?+∣xn∣2)1/2
- p=2\mathrm{p} =2p=2時,就是L2范數(shù),是x\boldsymbol{x}x向量各個元素平方和的開方。
- L2范數(shù)是我們最常用的范數(shù),歐氏距離就是一種L2范數(shù)。
AI中的應用:在機器學習中,L1范數(shù)和L2范數(shù)很常見,比如『評估準則的計算』、『損失函數(shù)中用于限制模型復雜度的正則化項』等。
6.特征分解(Eigen-decomposition)
將數(shù)學對象分解成多個組成部分,可以找到他們的一些屬性,或者能更高地理解他們。例如,整數(shù)可以分解為質(zhì)因數(shù),通過12=2×3×312=2 \times 3 \times 312=2×3×3可以得到『12的倍數(shù)可以被3整除,或者12不能被5整除』。
同樣,我們可以將『矩陣』分解為一組『特征向量』和『特征值』,來發(fā)現(xiàn)矩陣表示為數(shù)組元素時不明顯的函數(shù)性質(zhì)。特征分解(Eigen-decomposition)是廣泛使用的矩陣分解方式之一。
- 特征向量:方陣A\boldsymbol{A}A的特征向量,是指與A\boldsymbol{A}A相乘后相當于對該向量進行縮放的非零向量,即Aν=λν\boldsymbol{A}\nu =\lambda \nuAν=λν。
- 特征值:標量λ\lambdaλ被稱為這個特征向量對應的特征值。
使用特征分解去分析矩陣A\boldsymbol{A}A時,得到特征向量ν\nuν構(gòu)成的矩陣Q\boldsymbol{Q}Q和特征值構(gòu)成的向量Λ\boldsymbol{\Lambda }Λ,我們可以重新將A\boldsymbol{A}A寫作:A=QΛQ?1\boldsymbol{A} = \boldsymbol{Q} \boldsymbol{\Lambda} \boldsymbol{Q}^{-1}A=QΛQ?1
7.奇異值分解(Singular Value Decomposition,SVD)
矩陣的特征分解是有前提條件的。只有可對角化的矩陣,才可以進行特征分解。實際很多矩陣不滿足這一條件,這時候怎么辦呢?
將矩陣的『特征分解』進行推廣,得到一種被稱為『矩陣的奇異值分解』的方法,即將一個普通矩陣分解為『奇異向量』和『奇異值』。通過奇異值分解,我們會得到一些類似于特征分解的信息。
將矩陣A\boldsymbol{A}A分解成三個矩陣的乘積A=UDV?1\boldsymbol{A} = \boldsymbol{U} \boldsymbol{D} \boldsymbol{V}^{-1}A=UDV?1。
- 假設A\boldsymbol{A}A是一個m?nmnm?n矩陣,那么U\boldsymbol{U}U是一個m?mmmm?m矩陣,DDD是一個m?nmnm?n矩陣,VVV是一個n?nnnn?n矩陣。
- UVD\boldsymbol{U} \boldsymbol{V} \boldsymbol{D}UVD這幾個矩陣都擁有特殊的結(jié)構(gòu):
- U\boldsymbol{U}U和V\boldsymbol{V}V都是正交矩陣,矩陣U\boldsymbol{U}U的列向量被稱為左奇異向量,矩陣V\boldsymbol{V}V 的列向量被稱右奇異向量。
- D\boldsymbol{D}D是對角矩陣(注意,D\boldsymbol{D}D不一定是方陣)。對角矩陣D\boldsymbol{D}D對角線上的元素被稱為矩陣A\boldsymbol{A}A的奇異值。
AI中的應用:SVD最有用的一個性質(zhì)可能是拓展矩陣求逆到非方矩陣上。而且大家在推薦系統(tǒng)中也會見到基于SVD的算法應用。
8.Moore-Penrose廣義逆/偽逆(Moore-Penrose Pseudoinverse)
假設在下面問題中,我們想通過矩陣A\boldsymbol{A}A的左逆B\boldsymbol{B}B來求解線性方程:Ax=y\boldsymbol{A} x=yAx=y,等式兩邊同時左乘左逆B后,得到:x=Byx=\boldsymbol{B} yx=By。是否存在唯一的映射將A\boldsymbol{A}A映射到B\boldsymbol{B}B,取決于問題的形式:
- 如果矩陣A\boldsymbol{A}A的行數(shù)大于列數(shù),那么上述方程可能沒有解;
- 如果矩陣A\boldsymbol{A}A的行數(shù)小于列數(shù),那么上述方程可能有多個解。
Moore-Penrose偽逆使我們能夠解決這種情況,矩陣A\boldsymbol{A}A的偽逆定義為:
A+=lim?a→0(ATA+αI)?1AT\boldsymbol{A}^{+}=\lim _{a \rightarrow 0}\left(\boldsymbol{A}^{T} \boldsymbol{A}+\alpha \boldsymbol{I}\right)^{-1} \boldsymbol{A}^{T}A+=lima→0(ATA+αI)?1AT
但是計算偽逆的實際算法沒有基于這個式子,而是使用下面的公式:
A+=UD+VT\boldsymbol{A}^{+}=\boldsymbol{U} \boldsymbol{D}^{+} \boldsymbol{V}^{T}A+=UD+VT
- 矩陣U\boldsymbol{U}U、D\boldsymbol{D}D和VT\boldsymbol{V}^{T}VT是矩陣A\boldsymbol{A}A奇異值分解后得到的矩陣;
- 對角矩陣D\boldsymbol{D}D的偽逆D+\boldsymbol{D}^{+}D+是其非零元素取倒之后再轉(zhuǎn)置得到的。
9.常用的距離度量
在機器學習里,大部分運算都是基于向量的,一份數(shù)據(jù)集包含n個特征字段,那每一條樣本就可以表示為n維的向量,通過計算兩個樣本對應向量之間的距離值大小,有些場景下能反映出這兩個樣本的相似程度。還有一些算法,像KNN和K-means,非常依賴距離度量。
設有兩個nnn維變量:
A=[x11,x12,…,x1n]TA=[ x_{11}, x_{12},…,x_{1n} ] ^{T}A=[x11,x12,…,x1n]T
B=[x21,x22,…,x2n]TB=[ x_{21} ,x_{22} ,…,x_{2n} ] ^{T}B=[x21,x22,…,x2n]T
一些常用的距離公式定義如下:
1)曼哈頓距離(Manhattan Distance)
曼哈頓距離也稱為城市街區(qū)距離,數(shù)學定義如下:
d12=∑k=1n∣x1k?x2k∣d_{12} =\sum_{k=1}^{n}{| x_{1k}-x_{2k} | }d12=∑k=1n∣x1k?x2k∣
曼哈頓距離的Python實現(xiàn):
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)
前往我們的在線編程環(huán)境運行代碼:blog.showmeai.tech/python3-com…
2)歐氏距離(Euclidean Distance)
歐氏距離其實就是L2范數(shù),數(shù)學定義如下:
d12=∑k=1n(x1k?x2k)2d_{12} =\sqrt{\sum_{k=1}^{n}{( x_{1k} -x_{2k} ) ^{2} } }d12=∑k=1n(x1k?x2k)2
歐氏距離的Python實現(xiàn):
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)
前往我們的在線編程環(huán)境運行代碼:blog.showmeai.tech/python3-com…
3)閔氏距離(Minkowski Distance)
從嚴格意義上講,閔可夫斯基距離不是一種距離,而是一組距離的定義:
d12=∑k=1n(x1k?x2k)ppd_{12} =\sqrt[p]{\sum_{k=1}^{n}{( x_{1k} -x_{2k} ) ^{p} } }d12=p∑k=1n(x1k?x2k)p
實際上,當p=1p=1p=1時,就是曼哈頓距離;當p=2p=2p=2時,就是歐式距離。
前往我們的在線編程環(huán)境運行代碼:blog.showmeai.tech/python3-com…
4)切比雪夫距離(Chebyshev Distance)
切比雪夫距離就是無窮范數(shù),數(shù)學表達式如下:
d12=max(∣x1k?x2k∣)d_{12} =max( | x_{1k}-x_{2k} |)d12=max(∣x1k?x2k∣)
切比雪夫距離的Python實現(xiàn)如下:
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)
前往我們的在線編程環(huán)境運行代碼:blog.showmeai.tech/python3-com…
5)余弦相似度(Cosine Similarity)
余弦相似度的取值范圍為[-1,1],可以用來衡量兩個向量方向的差異:
- 夾角余弦越大,表示兩個向量的夾角越小;
- 當兩個向量的方向重合時,夾角余弦取最大值1;
- 當兩個向量的方向完全相反時,夾角余弦取最小值-1。
機器學習中用這一概念來衡量樣本向量之間的差異,其數(shù)學表達式如下:
cosθ=AB∣A∣∣B∣=∑k=1nx1kx2k∑k=1nx1k2∑k=1nx2k2cos\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} } } }cosθ=∣A∣∣B∣AB=∑k=1nx1k2∑k=1nx2k2∑k=1nx1kx2k
夾角余弦的Python實現(xiàn):
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)
前往我們的在線編程環(huán)境運行代碼:blog.showmeai.tech/python3-com…
6)漢明距離(Hamming Distance)
漢明距離定義的是兩個字符串中不相同位數(shù)的數(shù)目。例如,字符串‘1111’與‘1001’之間的漢明距離為2。信息編碼中一般應使得編碼間的漢明距離盡可能的小。
d12=∑k=1n(x1k⊕x2k)d_{12} = \sum_{k=1}^{n} \left ( x_{1k} \oplus x_{2k}\right )d12=∑k=1n(x1k⊕x2k)
漢明距離的Python實現(xiàn):
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)
前往我們的在線編程環(huán)境運行代碼:blog.showmeai.tech/python3-com…
7)杰卡德系數(shù)(Jaccard Index)
兩個集合AAA和BBB的交集元素在AAA和BBB的并集中所占的比例稱為兩個集合的杰卡德系數(shù),用符號J(A,B)J(A,B)J(A,B)表示,數(shù)學表達式為:
J(A,B)=∣A∩B∣∣A∪B∣J( A,B ) =\frac{| A\cap B| }{|A\cup B | }J(A,B)=∣A∪B∣∣A∩B∣
杰卡德相似系數(shù)是衡量兩個集合的相似度的一種指標。一般可以將其用在衡量樣本的相似度上。
前往我們的在線編程環(huán)境運行代碼:blog.showmeai.tech/python3-com…
8)杰卡德距離(Jaccard Distance)
與杰卡德系數(shù)相反的概念是杰卡德距離,其定義式為:
Jσ=1?J(A,B)=∣A∪B∣?∣A∩B∣∣A∪B∣J_{\sigma} =1-J( A,B ) =\frac{| A\cup B | -| A\cap B | }{| A\cup B | }Jσ=1?J(A,B)=∣A∪B∣∣A∪B∣?∣A∩B∣
杰卡德距離的Python實現(xiàn):文章來源:http://www.zghlxwxcb.cn/news/detail-846117.html
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)
前往我們的在線編程環(huán)境運行代碼:blog.showmeai.tech/python3-com…文章來源地址http://www.zghlxwxcb.cn/news/detail-846117.html
ShowMeAI相關文章推薦
- 圖解線性代數(shù)與矩陣論
- 圖解信息論
- 圖解微積分與最優(yōu)化
ShowMeAI系列教程推薦
- 圖解Python編程:從入門到精通系列教程
- 圖解數(shù)據(jù)分析:從入門到精通系列教程
- 圖解AI數(shù)學基礎:從入門到精通系列教程
- 圖解大數(shù)據(jù)技術:從入門到精通系列教程
到了這里,關于圖解AI數(shù)學基礎 | 線性代數(shù)與矩陣論的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!