向量、矩陣的介紹和運(yùn)算
今天是除夕,大家新年快樂(lè)呀。
今年沒(méi)有回老家,留在杭州過(guò)年。所以放假前稍微計(jì)劃了下,買了一些想看的書、課程。匯總了一些不太懂的問(wèn)題,準(zhǔn)備這段時(shí)間集中學(xué)習(xí)下。
下面是復(fù)習(xí)的一些線性代數(shù)基礎(chǔ)知識(shí)。
線性代數(shù)中的向量
線性代數(shù)中最常用、也最重要的概念,向量(Vector),也可以叫作矢量。它代表一組數(shù)字,并且這些數(shù)字是有序排列的,并且有方向。常說(shuō)的單個(gè)數(shù)字,屬于標(biāo)量(Scalar),它只是一個(gè)單獨(dú)的數(shù)字,而且不能表示方向。
用加粗的小寫字母表示一個(gè)向量,例如 x,x1、x2、xn來(lái)表示向量中的每個(gè)元素,這里面的 n 就是向量的維。
延伸的特征向量(Feature Vector)定義:由于一個(gè)向量包含了很多個(gè)元素,因此我們自然地就可以把它運(yùn)用在機(jī)器學(xué)習(xí)的領(lǐng)域。因?yàn)槲矬w/主體有很多的的屬性,轉(zhuǎn)換為能夠用數(shù)字表達(dá)的特征。由于特征有很多維,因此我們可以使用向量來(lái)表示某個(gè)物體的特征。其中,向量的每個(gè)元素就代表一維特征,而元素的值代表了相應(yīng)特征的值。比如用戶畫像中,用戶特征(年齡、性別、價(jià)格敏感度、消費(fèi)區(qū)間等等)。
需要注意的是,這個(gè)特征向量和矩陣的特征向量(Eigenvector)是兩碼事。矩陣的幾何意義是坐標(biāo)的變換。如果一個(gè)矩陣存在特征向量和特征值,這個(gè)矩陣的特征向量就表示了它在空間中最主要的運(yùn)動(dòng)方向。
向量的運(yùn)算
標(biāo)量和向量之間可以進(jìn)行運(yùn)算,把標(biāo)量和向量中的每個(gè)元素進(jìn)行運(yùn)算。標(biāo)量和向量相加或者相乘時(shí),直接把標(biāo)量和向量中的每個(gè)元素相加或者相乘。
向量和向量之間的加法,首先它們需要維度相同,然后是對(duì)應(yīng)的元素相加。
可以這么解釋兩個(gè)向量相加。在下面這張圖中,有兩個(gè)向量 x 和 y,它們的長(zhǎng)度分別是 x’和 y’,它們的相加結(jié)果是 x+y,這個(gè)結(jié)果所對(duì)應(yīng)的點(diǎn)相當(dāng)于 x 向量沿著 y 向量的方向移動(dòng) y’,或者是 y 向量沿著 x 向量的方向移動(dòng) x’。
向量之間的乘法默認(rèn)是點(diǎn)乘,向量 x 和 y 的點(diǎn)乘是這么定義的:
點(diǎn)乘的作用是把相乘的兩個(gè)向量轉(zhuǎn)換成了標(biāo)量,它有具體的幾何含義。會(huì)用點(diǎn)乘來(lái)計(jì)算向量的長(zhǎng)度以及兩個(gè)向量間的夾角,所以一般情況下會(huì)默認(rèn)向量間的乘法是點(diǎn)乘。至于向量之間的夾角和距離,它們?cè)谙蛄靠臻g模型(Vector Space Model)中發(fā)揮了重要的作用。機(jī)器學(xué)習(xí)領(lǐng)域充分利用了向量空間模型,計(jì)算不同對(duì)象之間的相似程度。
矩陣由多個(gè)長(zhǎng)度相等的向量組成,其中的每列或者每行就是一個(gè)向量。因此把向量延伸一下就能得到矩陣(Matrix)。從數(shù)據(jù)結(jié)構(gòu)的角度看,向量是一維數(shù)組,那矩陣就是一個(gè)二維數(shù)組。如果二維數(shù)組里絕大多數(shù)元素都是 0 或者不存在的值,那么我們就稱這個(gè)矩陣很稀疏。
矩陣還有一種比較好理解的方式,就是用方程組來(lái)表達(dá)。比如方程組:

然后把每一個(gè)變量的系數(shù)寫在對(duì)齊的一列中,可以寫成矩陣:
也可以寫成矩陣:
第 1 個(gè)矩陣稱為方程組的系數(shù)矩陣,第 2 個(gè)矩陣稱為方程組的增廣矩陣。
矩陣用加粗的斜體大寫字母表示,例如 X,而 X12,X22,…,Xnm 等等,表示矩陣中的每個(gè)元素,而這里面的 n 和 m 分別表示矩陣的行維數(shù)和列維數(shù)。
矩陣的運(yùn)算
和向量一樣,矩陣的和標(biāo)量之間的加法和乘法,需要把標(biāo)量和矩陣中的每個(gè)元素相加或相乘,就能得到結(jié)果。
矩陣和矩陣之間加法,只要保證兩個(gè)矩陣具有相同的行維度和列維度,就可以把對(duì)應(yīng)的元素兩兩相加。比如下面:
那么:
矩陣的乘法形式:
其中,矩陣 Z 為矩陣 X 和 Y 的乘積,X 是形狀為 i x k 的矩陣,而 Y 是形狀為 k × j 的矩陣。X 的列數(shù) k 必須和 Y 的行數(shù) k 相等,兩者才可以進(jìn)行這樣的乘法。
還有一個(gè)比較常見(jiàn)的運(yùn)算,是矩陣的轉(zhuǎn)置。這個(gè)比較常見(jiàn),寫代碼的時(shí)候我們有遇到,下面直接用 DataFrame 數(shù)據(jù)演示下:
#?導(dǎo)入包
import?seaborn?as?sns
from?pandas?import?Series,DataFrame
import?pandas?as?pd
import?matplotlib.pyplot?as?plt
%matplotlib?inline
#?拿到小費(fèi)數(shù)據(jù)集
tips?=?sns.load_dataset('tips')
#?數(shù)據(jù)介紹:total_bill列為消費(fèi)總金額;tip列為小費(fèi)金額;sex列為顧客性別;smoker列為顧客是否抽煙;day列為消費(fèi)的星期;time列為聚餐的時(shí)間段;size列為聚餐人數(shù)
#?查看前5行數(shù)據(jù)
tips.head()

tips.describe()

# DataFrame 數(shù)據(jù)格式的轉(zhuǎn)置,和矩陣轉(zhuǎn)置的性質(zhì)一致。
tips.describe().T

矩陣的轉(zhuǎn)置,也就是上面兩個(gè)數(shù)據(jù)集的行列轉(zhuǎn)換方式。
