(一)前言
1、總結(jié)大數(shù)據(jù)、人工智能機(jī)器學(xué)習(xí)中的數(shù)學(xué)知識
2、已經(jīng)調(diào)試通過直接運用,減少查找資料的時間
3、您的關(guān)注就是對我對大的支持,也是對科技的支持
機(jī)器學(xué)習(xí)的核心技術(shù)是以 數(shù)學(xué)和數(shù)據(jù)結(jié)構(gòu)算法為主的基礎(chǔ)學(xué)科,包括高等數(shù)學(xué)、線性代數(shù)、數(shù)論、圖論、決策論等等基礎(chǔ)理論知識點,在實際的工程實踐中出現(xiàn)了很多數(shù)學(xué)工具比如R語言數(shù)學(xué)庫,商用MATLAB數(shù)學(xué)庫,近年來Python數(shù)學(xué)庫發(fā)展的很快,這里涉及到的案例將使用Python語言描述,為了方便大家的運用,本篇文章將線性代數(shù)常用的知識點總結(jié)出來,可以方便大家的引用,也可以作為大學(xué)生和大學(xué)教師的參考課件。
本篇文章涉及到的案例基本都是筆者親自調(diào)試通過,要求Python3.6以上版本,要安裝numpy、pandas、sklearn、 matplotlib等常見類庫,特別說明不建議讀者使用Python2.7版本。建議大家使用Pycharm來提高效率。
(二)矩陣
矩陣的運算有加減乘、求矩陣的逆、求矩陣的秩、矩陣的轉(zhuǎn)置等運算,矩陣的運算在線性回歸中有著重要的作用,數(shù)據(jù)分析領(lǐng)域也起著重要的作用,比如關(guān)系型數(shù)據(jù)庫本質(zhì)就是矩陣的各種運算。
1、矩陣的加法
importnumpy asnp
a1 = np.array([[1,2,3]])
a2 = np.array([[4,5,6]])
print(a1 + a2 )
2、矩陣的乘法
設(shè) 有兩個矩陣A和B,A為3x2矩陣,B為2x3矩陣,乘積的結(jié)果為C3x3矩陣,矩陣乘積的規(guī)則大家都學(xué)過了,再溫習(xí)下,如下圖所示:
importnumpy asnp
A = np.array([[1,2],[3,4],[5,6]])
B = np.array([[1,2,3],[4,5,6]])
print(np.dot(A,B) )
A x B = C ,結(jié)果為:
[[ 9 12 15]
[19 26 33]
[29 40 51]]
C 的第1行為 :1x1+1x4 1x2 + 2x5 1x3+2x6
C 的第2行為 :3x1+4x4 3x2 + 4x5 3x3 +4x6
C 的第3行為 :5x1 + 6x4 5x2 +6x5 5x3 + 6x6
3、求矩陣的秩
矩陣A的列秩是A的線性獨立的縱列的極大數(shù)目。類似地,行秩是A的線性無關(guān)的橫行的極大數(shù)目。如果把矩陣看成一個個行向量或者列向量,秩就是這些行向量或者列向量的秩,也就是極大無關(guān)組中所含向量的個數(shù)。
importnumpy asnp
fromscipy importlinalg
A = np.array([[1, 0, 0],
[0, 1, 0],
[0, 0, 1],
[0, 0, 0]])
#非0的行數(shù)就是矩陣的秩
n = np.linalg.matrix_rank(A)
print(n)
結(jié)果:n = 3
4、求矩陣的逆
設(shè)A是數(shù)域上的一個n階方陣,若在相同數(shù)域上存在另一個n階矩陣B,使得: AB=BA=E。 則我們稱B是A的逆矩陣,而A則被稱為可逆矩陣。
importnumpy asnp
fromscipy importlinalg
A = np.array([[1, 2 ],
[3, 4, ]
])
An = linalg.inv(A)
print(An)
5、求解線性方程組
有個方程組如下所示:
X1 + x2 + x3 = 10
X1 - x2 + x3 = 6
X1 - x2 - x3 = 0
importnumpy asnp
fromscipy importlinalg
A = np.array([[1, 1, 1],
[1, -1, 1],
[1, -1, -1]])
y = np.array([10, 6, 0])
x = linalg.solve(A, y)
print(x)
結(jié)果:[5. 2. 3.]
(三)向量
1、向量的概念
在線性代數(shù)中 的向量是指n個實數(shù)/復(fù)數(shù)組成的有序數(shù)組,稱為n維向量。α=(a1,a2,…,an) 稱為n維向量。其中ai稱為向量α的第i個分量。
2、行向量和列向量
(1)行向量
importnumpy asnp
V = np.array([1,2,3 ])
print(V)
(2)列向量
importnumpy asnp
#行向量
v1 =np.array([[1,2,3]])
#v1轉(zhuǎn)置
v2 = v1.T
print(v2 )
3、向量的運算
(1)向量的加法
importnumpy asnp
v1 = np.array([[1,2,3]])
v2 = np.array([[4,5,6]])
print(v1+v2 )
結(jié)果: [[5 7 9]]
(2)向量的內(nèi)積
計算內(nèi)積的時候要注意一個是行向量,一個是列向量:
importnumpy asnp
v1 = np.array([[1,2,3]])
v2 = np.array([[4,5,6]]).T
print(np.dot(v1,v2) )
4、特征向量
如果向量v與變換A滿足 Av=λv,則稱向量v是變換A的一個特征向量,λ是相應(yīng)的特征值。線性變換的特征向量是指在變換下方向不變,或者簡單地乘以一個縮放因子的非零向量;特征向量對應(yīng)的特征值是它所乘的那個縮放因子。
在A變換的作用下,向量V僅僅在尺度上變?yōu)樵瓉淼摩吮?。稱V是A 的一個特征向量,λ是對應(yīng)的特征值。
例如:有個簡單的二階方陣A = [[2,1] , [ 1, 2 ] ]求其特征向量和特征值
importnumpy asnp
fromscipy importlinalg
A = np.array([[1, 2],
[2, 8]])
v, v_vector = linalg.eig(A)
print(v)
print(v_vector)
結(jié)果為:
[0.46887113+0.j 8.53112887+0.j]
[[-0.96649965 -0.25666794]
[ 0.25666794 -0.96649965]]
意思是:
特征值0.46887113對應(yīng)的特征向量是【 [[-0.96649965 , [ 0.25666794 】
特征值8.53112887對應(yīng)的特征向量是【 -0.25666794, -0.96649965 】