NumPy實(shí)現(xiàn)線(xiàn)性代數(shù)常見(jiàn)操作
點(diǎn)擊上方“小白學(xué)視覺(jué)”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)

機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型需要大量的數(shù)據(jù)。它們的性能在很大程度上取決于數(shù)據(jù)量。因此,我們傾向于收集盡可能多的數(shù)據(jù),以建立一個(gè)穩(wěn)健和準(zhǔn)確的模型。數(shù)據(jù)以多種不同的格式收集,從數(shù)字到圖像,從文本到聲波。然而,我們需要將數(shù)據(jù)轉(zhuǎn)換為數(shù)字以便對(duì)其進(jìn)行分析和建模。
僅僅將數(shù)據(jù)轉(zhuǎn)換為標(biāo)量(單個(gè)數(shù)字)是不夠的。隨著數(shù)據(jù)量的增加,使用標(biāo)量的操作開(kāi)始變得低效。我們需要向量化或矩陣運(yùn)算來(lái)有效地進(jìn)行計(jì)算。這就是線(xiàn)性代數(shù)發(fā)揮作用的地方。
線(xiàn)性代數(shù)是數(shù)據(jù)科學(xué)領(lǐng)域的重要課題之一。在這篇文章中,我們將通過(guò)使用NumPy的例子來(lái)介紹線(xiàn)性代數(shù)的基本概念。
?NumPy是Python的一個(gè)科學(xué)計(jì)算庫(kù),是許多庫(kù)(比如Pandas)的基礎(chǔ)。
?
線(xiàn)性代數(shù)中的對(duì)象類(lèi)型
線(xiàn)性代數(shù)中的對(duì)象(或數(shù)據(jù)結(jié)構(gòu))類(lèi)型:
標(biāo)量:?jiǎn)蝹€(gè)數(shù)字
向量:數(shù)字?jǐn)?shù)組
矩陣:二維數(shù)字?jǐn)?shù)組
張量:N>2的N維數(shù)列
標(biāo)量就是一個(gè)數(shù)字。我們將在下面的示例中看到,它可以用于向量化操作。
向量是一組數(shù)字。例如,5個(gè)元素的向量:

我們可以在向量化運(yùn)算中使用標(biāo)量。對(duì)向量的每個(gè)元素執(zhí)行指定的操作。例如

矩陣是二維向量

它看起來(lái)像是一個(gè)包含行和列的pandas數(shù)據(jù)框。實(shí)際上,pandas數(shù)據(jù)幀被轉(zhuǎn)換成矩陣,然后輸入到機(jī)器學(xué)習(xí)模型中。
張量是一個(gè)N維數(shù)數(shù)組,其中N大于2。張量主要用于輸入數(shù)據(jù)為三維的深度學(xué)習(xí)模型。

很難用數(shù)字來(lái)表示,但是可以把T看成3個(gè)3x2形狀的矩陣。
shape方法可用于檢查numpy數(shù)組的形狀。

數(shù)組的大小是通過(guò)乘以每個(gè)維度的大小來(lái)計(jì)算的。

常用矩陣術(shù)語(yǔ)
如果行數(shù)等于列數(shù),矩陣稱(chēng)為方陣。因此,上面的矩陣A是一個(gè)方陣。
單位矩陣,表示為I,是一個(gè)方陣,對(duì)角線(xiàn)上有是,其他位置全是0。NumPy的identity函數(shù)可以用來(lái)創(chuàng)建任意大小的單位矩陣。

一個(gè)單位矩陣的特殊之處在于矩陣乘上它不會(huì)改變。從這個(gè)意義上講,它與實(shí)數(shù)中的數(shù)字1相似。我們將在這篇文章的矩陣乘法部分用單位矩陣做例子。
矩陣的逆矩陣是與原始矩陣相乘得到單位矩陣的矩陣。

不是每個(gè)矩陣都有一個(gè)逆矩陣。如果矩陣A有一個(gè)逆矩陣,那么它被稱(chēng)為可逆或非奇異
點(diǎn)乘與矩陣乘法
點(diǎn)乘和矩陣乘法是復(fù)雜機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型的組成部分,因此對(duì)它們進(jìn)行全面的了解是非常有價(jià)值的。
兩個(gè)向量的點(diǎn)積是元素相對(duì)于其位置的乘積之和。第一個(gè)向量的第一個(gè)元素乘以第二個(gè)向量的第一個(gè)元素,依此類(lèi)推。這些積的和就是點(diǎn)積。在NumPy中計(jì)算點(diǎn)積的函數(shù)是「dot()」。
讓我們首先以numpy數(shù)組的形式創(chuàng)建兩個(gè)簡(jiǎn)單的向量并計(jì)算點(diǎn)積。

點(diǎn)積計(jì)算為(1*2)+(2*4)+(3*6),即28。
?因?yàn)槲覀冊(cè)谙嗤奈恢孟喑?,所以這兩個(gè)向量的長(zhǎng)度必須相同才能得到點(diǎn)積。
?
在數(shù)據(jù)科學(xué)領(lǐng)域,我們主要處理矩陣。矩陣是一組以結(jié)構(gòu)化方式組合的行和列向量。因此,兩個(gè)矩陣的相乘涉及向量的許多點(diǎn)積運(yùn)算。我們?cè)倏匆恍├泳蜁?huì)更清楚了。我們先用NumPy創(chuàng)建兩個(gè)2x2矩陣。


2x2矩陣有2行2列。行和列的索引以0開(kāi)頭。例如,A(索引為0的行)的第一行是[4,2]的數(shù)組。A的第一列是[4,0]的數(shù)組。第一行和第一列的元素是4。
我們可以訪(fǎng)問(wèn)單個(gè)行、列或元素,如下所示:

這些是理解矩陣乘法的重要概念。
兩個(gè)矩陣的相乘涉及到第一個(gè)矩陣的行和第二個(gè)矩陣的列之間的點(diǎn)乘。第一步是A的第一行和B的第一列之間的點(diǎn)積。這個(gè)點(diǎn)積的結(jié)果是在位置[0,0](即第一行,第一列)處得到的矩陣的元素。

因此,得到的矩陣C在第一行和第一列將有一個(gè) (4*0) + (2*4) 。C[0,0]=18。
下一步是A的第一行和B的第二列的點(diǎn)積。

C在第一行和第二列有一個(gè)(4*0)+(2*4)。C[0,1]=8。
第一行A已完成,因此我們從A的第二行開(kāi)始,并遵循相同的步驟。

C在第二行和第一列有一個(gè)(0*4)+(3*1)。C[1,0]=3。
最后一步是A的第二行和B的第二列之間的點(diǎn)積。

C在第二行和第二列有一個(gè)(0*0)+(3*4)。C[1,1]=12。
我們已經(jīng)看到它是如何一步一步完成的。所有這些操作都是用「np.dot」操作:

你可能還記得,我們已經(jīng)提到過(guò),單位矩陣乘以任何矩陣時(shí)不會(huì)改變矩陣。讓我們舉個(gè)例子。

我們還提到,當(dāng)一個(gè)矩陣乘以它的逆矩陣時(shí),結(jié)果就是單位矩陣。讓我們先創(chuàng)建一個(gè)矩陣,然后求它的逆矩陣。我們可以利用NumPy函數(shù)**linalg.inv()**求矩陣的逆。

用B的逆矩陣C乘以B:

我們得到了單位矩陣。
正如我們?cè)谙蛄奎c(diǎn)積中回憶的那樣,兩個(gè)向量的長(zhǎng)度必須相同才能有一個(gè)點(diǎn)積。矩陣乘法中的每個(gè)點(diǎn)積運(yùn)算都必須遵循這個(gè)規(guī)則。點(diǎn)積是在第一個(gè)矩陣的行和第二個(gè)矩陣的列之間進(jìn)行的。因此,第一個(gè)矩陣的行和第二個(gè)矩陣的列的長(zhǎng)度必須相同。
矩陣乘法的要求是第一個(gè)矩陣的列數(shù)必須等于第二個(gè)矩陣的行數(shù)。
例如,我們可以用一個(gè)3x2矩陣乘以一個(gè)2x3矩陣。

結(jié)果矩陣的形狀將是3x3,因?yàn)槲覀儗?duì)A的每一行進(jìn)行3點(diǎn)積運(yùn)算,A有3行。確定結(jié)果矩陣形狀的一種簡(jiǎn)單方法是從第一個(gè)矩陣中提取行數(shù),從第二個(gè)矩陣中提取列數(shù):
3x2和2x3相乘返回3x3 3x2和2x2相乘返回3x2 2x4和4x3相乘返回2x3
我們已經(jīng)討論了線(xiàn)性代數(shù)的基本運(yùn)算。這些基本操作是復(fù)雜機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型的構(gòu)建基礎(chǔ)。在模型優(yōu)化過(guò)程中,需要進(jìn)行大量的矩陣乘法運(yùn)算。因此,了解基礎(chǔ)知識(shí)也是非常重要的。
謝謝你的閱讀。如果你有任何反饋,請(qǐng)告訴我。
原文鏈接:https://towardsdatascience.com/linear-algebra-for-data-scientists-explained-with-numpy-6fec26519aea
下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程 在「小白學(xué)視覺(jué)」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺(jué)、目標(biāo)跟蹤、生物視覺(jué)、超分辨率處理等二十多章內(nèi)容。 下載2:Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目52講 在「小白學(xué)視覺(jué)」公眾號(hào)后臺(tái)回復(fù):Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測(cè)、車(chē)道線(xiàn)檢測(cè)、車(chē)輛計(jì)數(shù)、添加眼線(xiàn)、車(chē)牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺(jué)實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺(jué)。 下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講 在「小白學(xué)視覺(jué)」公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。 交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺(jué)、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱(chēng)+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺(jué)SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~

