花書學習筆記——線性代數部分

標量、向量、張量

標量 就是一個數, 1, 2, 3.0等
向量 不僅有大小, 還有方向, 它由一組數組成, 如 (1, 2, 3), (x, y)等
張量 可以看作座標超過兩維的數組,因此向量是張量的一個特例

矩陣相關知識

矩陣

矩陣 相當於一個二維數組, 通過行和列下標唯一索引一個矩陣中的元素
(x11x12x13x21x22x23x31x32x33)\begin{pmatrix} x_{11} & x_{12} & x_{13} \\ x_{21} & x_{22} & x_{23} \\ x_{31} & x_{32} & x_{33} \end{pmatrix}
上面的矩陣,第一行第二列唯一表示一個元素x12x_{12}

矩陣常用的運算法則

行列式 將方陣映射到一個實數的函數, 如(1234)\begin{pmatrix}1 & 2 \\ 3 & 4 \end{pmatrix}, 其行列式爲 [1234]=1423=2\left[\begin{array}{ccc} 1 & 2 \\ 3 & 4 \end{array}\right]= 1*4-2*3=-2
加法
A+B=B+A(A+B)+C=A+(B+C)A+O=AA+(A)=O1A=Ak(lA)=(kl)Ak(A+B)=kA+kB(k+l)A=kA+lA A + B = B + A \\ (A + B) + C= A + (B + C) \\ A + O = A \\ A + (-A) = O \\ 1A = A \\ k(lA) = (kl)A \\ k(A+B) = kA + kB \\ (k+l)A = kA + lA
乘法
兩個矩陣內標同,可以相乘, 外標決定最終相乘所得矩陣的形狀, 如AmnA_{m*n},而BnsB_{n*s}, 因爲內標同,即A的列數等於B的行數,所以AA,BB兩矩陣可以相乘, 假定相乘所得的結果矩陣爲CC, 則CC爲m行s列, 相乘的原則爲cij=k=1naikbkjc_{ij} = \sum_{k=1}^{n}a_{ik}*b_{kj}, 這裏cijc_{ij}表示矩陣CC中的每一個元素,而矩陣與向量乘法類似,可以將向量看成只有一列的矩陣, 結果爲一個向量
A(BC)=(AB)CA(B+C)=AB+AC(A+B)C=AC+BC(kA)(lB)=klABAI=A,IA=A(I)OA=O,AO=O滿 A(BC) = (AB)C \\ A(B+C) = AB+AC \\ (A+B)C = AC + BC \\ (kA)(lB)=klAB \\ AI=A, IA=A(I爲單位矩陣) \\ OA=O, AO=O \\ 矩陣乘法不滿足交換律

特殊矩陣

ATA^TAA轉置矩陣, 即AijT=AjiA^T_{ij} = A_{ji},且有(AB)T=BTAT(AB)^T = B^TA^T, xTy=(xTy)T=yTxx^Ty=(x^Ty)^T=y^Tx;
AA^*AA伴隨矩陣, 是由行列式A|A|的每個元素的代數餘子式AijA_{ij}所構成的矩陣, 每個AijA_{ij}按行優先計算, 結果按列優先放置,AA=AA=AEAA^*=A^*A=|A|E, 若A爲可逆矩陣, 則A=AA1A^*=|A|A^{-1};
A1A^{-1}爲A的逆矩陣, 這裏只有行列式不爲0的n階方陣纔有逆矩陣, A1=1AAA^{-1}=\frac{1}{|A|}A^*, AA1=A1A=InAA^{-1}=A^{-1}A=I_n;
單位矩陣 方矩陣, 且主對角線元素均爲1, 其它部分元素均爲0;
對角矩陣 方矩陣, 且除了主對角線元素外,其餘部分元素均爲0;
對稱矩陣 方矩陣, 且AT=AA^T=A
反對稱矩陣 方矩陣, 且AT=AA^T = -A
正交矩陣 方矩陣, AAT=ATA=IAA^T=A^TA=IAT=A1A^T=A^{-1}
奇異矩陣 行列式得0的矩陣, 或者不是滿秩的方陣
非奇異矩陣 行列式得0得矩陣, 或者爲滿秩的方陣

範數

向量範數

向量範數 用來衡量一個向量的大小,將向量映射到非負值的函數,它滿足以下性質:
f(x)0x=0f(x)=0f(x+y)f(x)+f(y)αR,f(αx)=αf(x) f(x) \geq 0,當x=0時,纔有f(x)=0 \\ f(x+y) \leq f(x) + f(y) \\ \forall \alpha \in R, f(\alpha x) = |\alpha|f(x)
0-範數 x0||x||_0表示爲向量中非零元素的個數;
1-範數 x1=i=1nxi||x||_1=\sum_{i=1}^n|x_i|, 表示爲向量元素的絕對值之和;
2-範數 x2=i=1nxi2||x||_2=\sqrt{\sum_{i=1}^nx_i^2}, 又被稱爲歐幾里得範數,即對向量的每一個分量的平方和相加然後再開根號;
p-範數 xp=(i=1nxip)1p||x||_p=(\sum_{i=1}^n|x_i|^p)^{\frac{1}{p}},即向量的每一個分量取絕對值後求p次方累加起來的和再求1p\frac{1}{p}次冪
\infty-範數 x=maxixi||x||_{\infty}=\mathop{\max}\limits_{i}|x_i|,表示向量中擁有最大幅值元素的絕對值
-\infty-範數 x=minixi||x||_{-\infty}=\mathop{\min}\limits_{i}|x_i|, 表示向量中擁有最小幅值的元素的絕對值

import numpy as np

# 隨機生成一個包含五個元素的向量
vector = np.random.randint(1, 10, 5)
vector
# 計算0範數
np.linalg.norm(vector, 0)
# 計算1範數
np.linalg.norm(vector, 1)
# 計算2範數
np.linalg.norm(vector, 2)
# 計算無窮範數
np.linalg.norm(vector, np.inf)
# 計算負無窮範數
np.linalg.norm(vector, -np.inf)
# 計算p範數, 假設p = 3
np.linalg.norm(vector, 3)

輸出結果:輸出結果

矩陣範數

矩陣範數 用於衡量矩陣的大小
1-範數 A1=maxji=1maij||A||_1=\mathop{\max}\limits_{j}\sum_{i=1}^m|a_{ij}|, 列和範數,即矩陣中每一個列向量絕對值之和的最大值;
2-範數 A2=λ1||A||_2=\sqrt{\lambda_1}, λ1\lambda_1表示ATAA_TA的最大特徵值, 稱爲譜範數
\infty-範數 A=maxjj=1naij||A||_{\infty}=\mathop{\max}\limits_{j}\sum_{j=1}^n|a_{ij}|,行和範數, 即所有矩陣行向量絕對值之和的最大值
F-範數 AF=(i=1mj=1naij2)12||A||_F=(\sum_{i=1}^m\sum_{j=1}^na_{ij}^2)^{\frac{1}{2}}, Frobenius範數, 即矩陣中所有元素的絕對值的平方和再開平方

import numpy as np

# 隨機生成一個3*3的矩陣
matrix = np.random.randint(1, 10, 9).reshape(3, 3)
matrix

# 計算列和範數
np.linalg.norm(matrix, 1)
# 計算譜範數
np.linalg.norm(matrix, 2)
# 計算行和範數
np.linalg.norm(matrix, -np.inf)
# 計算Frobenius範數 
np.linalg.norm(matrix, 'fro')

輸出結果
輸出結果

特徵分解

特徵值與特徵向量AAnn階矩陣,如果存在一個數λ\lambda和非零的nn維列向量vv, 使得Av=λvAv=\lambda v, 則稱λ\lambda爲矩陣AA的一個特徵值, 非零向量vv爲矩陣AA屬於特徵值λ\lambda的特徵向量。其中, λIA|\lambda I-A|爲特徵多項式, λIA=0|\lambda I-A|=0爲特徵方程。類似地, vTA=λvTv^TA=\lambda v^T, 這裏的vTv^T爲矩陣AA的做特徵值。若vvAA的特徵向量, 則sv(sR,s0)sv(s \in R, s \neq 0)也是AA的特徵向量
矩陣相似與對角化 假定矩陣A的所有特徵值構成一個對角矩陣Λ\Lambda, 所有特徵值對應的特徵向量構成一個矩陣VV, 則有V1AV=ΛV_{-1}AV=\Lambda, 即A=VΛV1A=V\Lambda V_{-1}
在實對稱矩陣中, 不同特徵值對應的特徵向量必定正交, 對於k重特徵值有k個線性無關的特徵向量, 這k個線性無關的特徵向量可以通過施密特正交化轉化爲正交的特徵向量,因此特徵向量構成的矩陣爲正交矩陣,則A=QΛQT=QΛQ1A=Q\Lambda Q^T=Q\Lambda Q^{-1}

import numpy as np

# 隨機生成一個3*3的矩陣
matrix = np.random.randint(1, 10, 9).reshape(3, 3)
matrix

eigen_values, eigen_vectors = np.linalg.eig(matrix)
eigen_values
eigen_vectors

輸出結果:
輸出結果二次型 含有n個變量的二次齊次函數稱爲n元二次型, 有f(X)=f(x1,x2,...,xn)=XTAXf(X) = f(x_1, x_2, ..., x_n)=X^TAX, 其中AA被稱爲二次型矩陣,限制x2=1||x||_2=1, xx等於某個特徵向量時, f返回對應的特徵值。所有特徵值爲正數的矩陣稱爲正定矩陣, 所有特徵值是非負數的矩陣稱爲半正定矩陣, 所有特徵值爲負數的矩陣稱爲負定矩陣, 所有特徵值是非正數的矩陣稱爲半負定矩陣

奇異值分解

奇異值分解(singular value decomposition, SVD) 將矩陣分解成奇異向量和奇異值,每個實數矩陣一定都有一個奇異值分解, 但不一定有特徵分解, 因爲特徵分解是針對方陣而言的。對於方陣來說,其奇異值分解的結果與特徵分解的結果相同。對矩陣AA進行奇異值分解爲:
A=UDVT A = UDV^T
上式中UUAATAA^T的特徵向量所組成的矩陣, AATAA^T的特徵向量被稱爲矩陣AA的左奇異向量, VTV^TATAA^TA的特徵向量所組成的矩陣轉置後的矩陣, ATAA^TA的特徵向量被稱爲矩陣AA的右奇異向量, 而矩陣DD是一個對角矩陣, 但不一定是一個方陣, 裏面矩陣對角線元素爲AATAA^T的特徵值開根號。

import numpy as np

# 隨機生成一個2*3的矩陣, 對其進行奇異值分解
A = np.random.randint(1, 10, 6).reshape(2, 3)
A
np.linalg.svd(A)

A_T = A.transpose()
np.linalg.eig(A.dot(A_T))
np.linalg.eig(A_T.dot(A))

輸出結果:
輸出結果

僞逆矩陣

僞逆矩陣 任何一個矩陣都有僞逆矩陣, 而只有行列式不爲0的方陣纔有逆矩陣, 且行列式不爲0的矩陣其僞逆矩陣與逆矩陣相同,求且矩陣A的僞逆矩陣A+A^+的公式爲:
A+=VD+UT A^+=VD^+U^T
其中U, D, V是對矩陣進行奇異值分解後得到的矩陣, 即U是AATAA^T的特徵向量組成的矩陣進行轉置, V是ATAA^TA的特徵向量組成的矩陣, D+D^+代表D的僞逆矩陣, 即將D中的非零元素取倒數之後, 再進行轉置得到的矩陣。
輸出結果# 跡運算
一個方矩陣的主對角線元素之和, 被稱爲這個矩陣的跡, 即Ann=(x11x12x13...x1nx21x22x23...x2nx31x32x33...x3nx41x42x43...x4nxn1xn2xn3...xnn)A_{n*n}=\begin{pmatrix} x_{11} & x_{12} & x_{13} & ... & x_{1n} \\ x_{21} & x_{22} & x_{23} & ... & x_{2n} \\ x_{31} & x_{32} & x_{33} & ... & x_{3n} \\ x_{41} & x_{42} & x_{43} & ... & x_{4n} \\ x_{n1} & x_{n2} & x_{n3} & ... & x_{nn}\end{pmatrix},其中跡Tr(A)=i=1nAiiTr(A)=\sum\limits_{i=1}^nA_{ii},矩陣的Frobenius範數可以用跡的運算來表示, AF=Tr(AAT)=i=1mj=1nAij2||A||_F=\sqrt{Tr(AA^T)}=\sqrt{\sum\limits_{i=1}^{m}\sum\limits_{j=1}^{n}A_{ij}^2}
跡的運算 矩陣轉置後跡不變,多個矩陣相乘得到的方陣的跡在交換個別位置後,如果仍然可以相乘,則跡也不變,標量的跡是其本身。
Tr(A)=Tr(AT)Tr(ABC)=Tr(CAB)=Tr(BCA)a=Tr(a) Tr(A) = Tr(A^T) \\ Tr(ABC) = Tr(CAB)=Tr(BCA) \\ a = Tr(a)

線性相關和生成子空間

線性組合 一組向量中的每一個向量乘以標量係數之後的和, i=1nciv(i)\sum\limits_{i=1}^{n}c_iv^{(i)}
線性相關和線性無關 一組向量中的某一個向量可以用該組向量中的其它向量的線性組合來表示, 則這個向量組是線性相關的,反之,一組向量中的任意一個向量都不能由該組向量中的其它向量線性組合來表示, 則這個向量組是線性無關的;
生成子空間 原始向量線性組合所能抵達的點的集合,例如Ax=bAx=b中,A的列向量的線性組合構成的所有列向量表示爲A的列向量的生成子空間或者A的值域, 如果向量bb恰好在A的值域內,則xx一定有解, 這裏的xx的各個分量就相當於bbAA矩陣的列向量乘以對應的係數來表示得到的。

主成分分析

定義

主成分分析(principle components analysis, PCA) 一種廣泛使用的數據降維算法,將nn維特徵映射到kk維上,這裏n>kn \gt k,這k維全新的正交特徵被稱爲主特徵。一般選取的kk維特徵滿足前k個特徵值之和與所有的特徵值之和的比值大於%95, 特徵矩陣中特徵值由大到小進行排列。

方法

  1. 假定一個矩陣AmnA_{m*n}, 其中m行爲m個樣例, n列爲n個不同的特徵,則首先對矩陣每一列計算均值,然後矩陣中的每一列元素減去該列的均值,這個過程稱爲去均質化, 其幾何意義相當於將所有樣本點移動到座標原點處;
  2. 計算這n列元素之間的協方差,得到一個協方差矩陣,協方差的計算公式爲:cov(X,Y)=E[(XiXˉ)(YiYˉ)]=i=1n(XiXˉ)(YiYˉ)n1cov(X, Y)=E[(X_i - \bar X)(Y_i-\bar Y)] = \frac{\sum\limits_{i=1}^{n}(X_i-\bar X)(Y_i-\bar Y)}{n-1};
  3. 對求得的協方差矩陣計算其特徵值和特徵向量, 按特徵值由大到小排列,選取前kk個特徵值,保證其和與所有特徵值之和的比值大於%95, 然後選取這kk個特徵值所對應的kk個線性無關的特徵向量;
  4. 將均值標準化後的原矩陣與前kk個特徵向量組成的矩陣相乘得到的新矩陣即爲降維後的新矩陣。

舉例

使用numpy隨機生成一個A102A_{10*2}的矩陣,代表10個用例,每個用例有兩個特徵,現在將其降至1維

X Y
1.75 1.90
6.42 1.92
3.15 1.97
9.68 1.93
4.78 1.90
5.68 1.93
2.73 1.91
6.34 1.88
8.02 1.87
0.06 1.85
import numpy as np

# 首先進行均值標準化
meanArr = np.mean(A, axis = 0)
A[:, 0] -= meanArr[0]
A[:, 1] -= meanArr[1]

# 計算所有維度之間的協方差
cov_matrix = np.cov(A, rowvar = False)
# 對協方差矩陣求特徵值與特徵向量
eigen_values, eigen_vectors = np.linalg.eig(cov_matrix)
# 特徵值從大到小排列, 選取第一個特徵值所對應的特徵向量
# 將均值標準化後的矩陣與該特徵向量相乘, 得到降維後的矩陣
final_matrix = np.dot(A, eigen_vectors[:, 0])
print(final_matrix)

輸出結果
輸出結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章