作者:Saniya Parveez, Roberto Iriondo
來源:AI研習社
譯者:季一帆
對n階矩陣A,有矩陣B∈R^n*n滿足AB =I_n(單位矩陣)= BA的性質,稱B為A的逆,表示為A^-1。
正規方程的轉置矩陣和逆矩陣
import numpy as np Featuresx = np.array([[2, 1834, 1],[3, 1534, 2],[2, 962, 3]])# Target or Pricey = [8500, 9600, 258800]# Transpose of xtranspose_x = x.transpose()transpose_xmulti_transpose_x_to_x = np.dot(transpose_x, x)inverse_of_multi_transpose_x_to_x = np.linalg.inv(multi_transpose_x_to_x)multiplication_transposed_x_y = np.dot(transpose_x, y)theta = np.dot(inverse_of_multi_transpose_x_to_x, multiplication_transposed_x_y)
線性方程線性方程是線性代數的核心,通過它可以解決許多問題,下圖是一條直線方程。
線性回歸中的線性方程回歸就是給出線性方程的過程,該過程試圖找到滿足特定數據集的最優曲線,即:其中,a是Y軸截距,決定直線與Y軸相交的點;b是斜率,決定直線傾斜的方向和程度。import pandas as pddf = pd.read_csv('house_price.csv')df.head()
def get_mean(value): total = sum(value) length = len(value) mean = total/length return meandef get_variance(value): mean = get_mean(value) mean_difference_square = [pow((item - mean), 2) for item in value] variance = sum(mean_difference_square)/float(len(value)-1) return variancedef get_covariance(value1, value2): value1_mean = get_mean(value1) value2_mean = get_mean(value2) values_size = len(value1) covariance = 0.0 for i in range(0, values_size): covariance += (value1[i] - value1_mean) * (value2[i] - value2_mean) return covariance / float(values_size - 1)def linear_regression(df): X = df['square_feet'] Y = df['price'] m = len(X) square_feet_mean = get_mean(X) price_mean = get_mean(Y)
#variance of X square_feet_variance = get_variance(X) price_variance = get_variance(Y)
covariance_of_price_and_square_feet = get_covariance(X, Y) w1 = covariance_of_price_and_square_feet / float(square_feet_variance) w0 = price_mean - w1 * square_feet_mean
# prediction --> Linear Equation prediction = w0 + w1 * X
df['price (prediction)'] = prediction return df['price (prediction)']
向量範數向量範數可用于衡量向量的大小,也就是說,範數|| x ||表示變量x的大小,範數|| x-y ||表示兩個向量x和y之間的距離。
一階範數/Manhattan範數
L2範數/Euclidean範數
機器學習中的正則化正則化是指通過修改損失函數以懲罰學習權重的過程,是避免過擬合的有效方式。
L1正則化(Lasso)L2正則化(Ridge)
特徵提取和特徵選擇特徵提取和特徵選擇的主要目的是選擇一組最佳的低維特徵以提高分類效率,以避免維數災難。在實踐中,通過矩陣操作實現特徵選擇和特徵提取。特徵提取在特徵提取中,我們通過映射函數從現有特徵中找到一組新特徵,即:特徵選擇主要特徵抽取方法包括主成分分析PCA和線性判別分析LDA。其中,PCA是一種典型的特徵提取方法,了解協方差矩、特徵值或特徵向量對於理解PCA至關重要。
協方差矩陣
在PCA推導過程中,協方差矩陣起到至關重要的作用。以下兩個概念是計算協方差矩陣的基礎:方差
協方差
協方差矩陣協方差矩陣是方陣,其中每個元素表示兩個隨機矢量之間的協方差。
特徵值與特徵向量特徵值:令m為n*n矩陣,如果存在非零向量x∈R^n,使得mx =λx,則標量λ為矩陣m的特徵值。
特徵值與特徵向量的計算若n階矩陣m有特徵值λ和相應特徵向量x,有mx =λx,則mx —λx= 0,得到下式:因此,矩陣m有兩個特徵值2和-1。每個特徵值對應多個特徵向量。
正交性正交集如果某一集合中的所有向量相互正交,且均為單位長度,稱為規範正交集合。其張成的子空間稱為規範正交集。
擴張空間令V為向量空間,元素v1,v2,…..,vn∈V。將這些元素與標量相乘加和,所有的線性組合集稱為擴張空間。Span (v1, v2, v3) = av1 + bv2 + cv3
基向量空間的基是一組向量,通過基向量的線性可以組成向量空間中任意一個元素。主成分分析PCA通過PCA能夠對數據進行降維,以處理儘可能多的數據。其原理是:找到方差最大的方向,在該方向上進行投影以減小數據維度。設有一個N*1向量,其值為x1,x2,…..,xm。
python實現主成分分析import numpy as npimport pylab as plimport pandas as pdfrom sklearn import datasetsimport matplotlib.pyplot as pltfrom sklearn.preprocessing import StandardScaler
load_iris = datasets.load_iris()iris_df = pd.DataFrame(load_iris.data, columns=[load_iris.feature_names])iris_df.head()標準化數據使得所有特徵數據處於同一量級區間,有利於分析特徵。standardized_x = StandardScaler().fit_transform(load_iris.data)standardized_x[:2]covariance_matrix_x = np.cov(standardized_x.T)covariance_matrix_xeigenvalues, eigenvectors = np.linalg.eig(covariance_matrix_x)
eigenvaluestotal_of_eigenvalues = sum(eigenvalues)varariance = [(i / total_of_eigenvalues)*100 for i in sorted(eigenvalues, reverse=True)]varariance可以看到,第三和第四成分具有很小的方差,可以忽略不記,這些組分不會對最終結果產生太大影響。eigenpairs = [(np.abs(eigenvalues[i]), eigenvectors[:,i]) for i in range(len(eigenvalues))]# Sorting from Higher values to lower valueeigenpairs.sort(key=lambda x: x[0], reverse=True)eigenpairsmatrix_weighing = np.hstack((eigenpairs[0][1].reshape(4,1),eigenpairs[1][1].reshape(4,1)))matrix_weighingplt.figure()target_names = load_iris.target_namesy = load_iris.targetfor c, i, target_name in zip("rgb", [0, 1, 2], target_names): plt.scatter(Y[y==i,0], Y[y==i,1], c=c, label=target_name)plt.xlabel('PCA 1')plt.ylabel('PCA 2')plt.legend()plt.title('PCA')plt.show()
矩陣分解矩陣分解在機器學習中也至關重要,該過程本質上是將矩陣分解為矩陣的乘積。常用的矩陣分解技術有LU分解,奇異值分解(SVD)等。令M為矩陣,其可以分解為三個矩陣的乘積,即正交矩陣(U),對角矩陣(S)和正交矩陣(V)的轉置。
結論機器學習和深度學習是建立在數學概念之上的,掌握理解數學知識對於算法構建和數據處理有極大幫助。線性代數的研究包括向量及其操作。在機器學習中,各處可見線性代數的背影,如線性回歸,獨熱編碼,主成分分析PCA,推薦系統中的矩陣分解。深度學習更甚,其完全基於線性代數和微積分。梯度下降,隨機梯度下降等優化方法也建立在此之上。矩陣是線性代數中的重要概念,通過矩陣可以緊湊地表示線性方程組、線性映射等。同樣,向量也是重要的概念,將不同向量與標量乘積進行加和可以組成不同的向量空間。歡迎在評論區回覆你的看法,我會虛心接受並進行改進。免責聲明:本文中表達的觀點僅為作者個人觀點,不(直接或間接)代表卡耐基梅隆大學或與作者相關的其他組織。我知道,本文不盡完善,僅是本人當前的一些看法與思考,希望對讀者有所幫助。資源:Google colab implementation:
https://colab.research.google.com/drive/1WhzsrEQ-JatDbaaJ81Wh8aYY9jqGWdsw?usp=sharing
Github repository:
https://github.com/towardsai/tutorials/tree/master/linear-algebra-for-ml-and-deep-learning
參考:[1] Linear Algebra, Wikipedia, https://en.wikipedia.org/wiki/Linear_algebra
[2] Euclidean Space, Wikipedia, https://en.wikipedia.org/wiki/Euclidean_space
[3] High-dimensional Simplexes for Supermetric Search, Richard Connor, Lucia Vadicamo, Fausto Rabitti, ResearchGate, https://www.researchgate.net/publication/318720793_High-Dimensional_Simplexes_for_Supermetric_Search
[4] ML | Normal Equation in Linear Regression, GeeksforGeeks, https://www.geeksforgeeks.org/ml-normal-equation-in-linear-regression/
[5] Vector Norms by Roger Crawfis, CSE541 — Department of Computer Science, Stony Brook University, https://www.slideserve.com/jaimie/vector-norms
[6] Variance Estimation Simulation, Online Stat Book by Rice University, http://onlinestatbook.com/2/summarizing_distributions/variance_est.html
[7] Lecture 17: Orthogonality, Oliver Knill, Harvard University, http://people.math.harvard.edu/~knill/teaching/math19b_2011/handouts/math19b_2011.pdf
[8] Orthonormality, Wikipedia, https://en.wikipedia.org/wiki/Orthonormality
[9] Linear Algebra/Basis, Wikibooks, https://en.wikibooks.org/wiki/Linear_Algebra/Basis
[10] Linear Algebra, LibreTexts, https://math.libretexts.org/Bookshelves/Linear_Algebra
AI研習社是AI學術青年和開發者社區,為大家提供一個頂會資訊、論文解讀、數據競賽、求職內推等的技術交流陣地,歡迎登陸www.yanxishe.com加入我們吧~
投稿、轉載、媒介合作聯繫微信號 | bajiaojiao-sz
商務合作聯繫微信號 | LJ18825253481