【機器學習快速入門教程2】Numpy庫和線性代數(shù)有關(guān)的知識

章節(jié)2:Numpy庫和線性代數(shù)有關(guān)的知識

在學習回歸和分類問題前愉棱,我們先來學習下線代和微積分中一些重要的概念。這些基礎有助于你理解接下來3章的理論知識哲戚,同時羽氮,我們也將介紹Numpy庫。

Numpy庫

我們將經(jīng)常使用Numpy惫恼,它是一個Python庫档押,增加了對大規(guī)模向量和矩陣以及對數(shù)據(jù)進行操作的一些重要數(shù)學函數(shù)快速有效計算的支持。Numpy是一個非常大的庫祈纯,具有許多便利的函數(shù)令宿。如果對這些函數(shù)進行全面介紹,則超出了本章的內(nèi)容腕窥。我們會在以后的章節(jié)中粒没,根據(jù)我們的需要介紹相關(guān)的Numpy庫中的函數(shù)。在接下來的內(nèi)容中簇爆,我們將簡要學習一些最常用的操作癞松。
首先,導入numpy庫(常常以np作為縮寫)

import numpy as np

Numpy庫有許多方便的函數(shù)來產(chǎn)生一組數(shù)字入蛆,例如响蓉,生成0到10之間的一串整數(shù)

np.arange(0, 10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

numpy.linspace函數(shù)能在兩個端點之間線性插入n個數(shù)

np.linspace(0, 10, 8)
array([ 0.        ,  1.42857143,  2.85714286,  4.28571429,  5.71428571,
        7.14285714,  8.57142857, 10.        ])

向量

向量可以用numpy.array來創(chuàng)建,如下向量v哨毁,
np.array([2, 3, 1])
array([2, 3, 1])

當兩個長度相同的向量相加時枫甲,對應元素相加,

a = np.array([2, 3, 1])
b = np.array([0, 2, -2])
c = a + b
print(c)
[ 2  5 -1]

向量中的元素能被一個數(shù)(標量)依次相乘扼褪,如下:

3 * np.array([2,3,1])
array([6, 9, 3])

向量點乘定義為兩個長度相同的向量對應元素乘積之和想幻。可以使用numpy.dot函數(shù)計算:

a = np.array([1,-2,2])
b = np.array([0,2,3])
c = np.dot(a, b)
print(c)
2

或者更簡短的方法:

c = a.dot(b)
print(c)
2

矩陣

矩陣是一組數(shù)字的矩形排列话浇,比如脏毯,下面是一個2x3的矩陣:

注意,我們經(jīng)常用行數(shù)x列數(shù)來表示矩陣的大小幔崖,所以食店,2x3表示矩陣有2行3列。
numpy能通過numpy.matrix函數(shù)把列表轉(zhuǎn)成矩陣岖瑰,比如:

np.matrix([[2,3,1],[0, 4,-2]])
matrix([[ 2,  3,  1],
        [ 0,  4, -2]])

實例化一個元素都是0的矩陣:

np.zeros((3, 3))
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])

實例化一個元素都是1的矩陣:

np.ones((2, 2))
array([[1., 1.],
       [1., 1.]])

在線性代數(shù)中叛买,一個矩陣除了對角線上的元素都是1以外,其余元素都是0蹋订,該矩陣稱為單位矩陣率挣,比如:

是一個3x3的單位矩陣,之所以叫做單位矩陣是因為一個矩陣乘以該矩陣露戒,結(jié)果不變椒功,就像乘了一個標量1捶箱。
實例化一個單位矩陣,可以使用numpy.eye方法动漾,比如:

np.eye(3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

注意丁屎,當一個矩陣和單位矩陣相乘后,結(jié)果還是原來那個矩陣旱眯,且與相乘的順序無關(guān)晨川。

M = np.matrix([[9,5,6],[-1,0,5],[-2,4,2]])
I = np.eye(3)
print("original matrix = \n", M)
M2 = I * M
print("I * M = \n", M2)
M3 = M * I
print("M * I = \n", M3)
original matrix = 
 [[ 9  5  6]
 [-1  0  5]
 [-2  4  2]]
I * M = 
 [[ 9.  5.  6.]
 [-1.  0.  5.]
 [-2.  4.  2.]]
M * I = 
 [[ 9.  5.  6.]
 [-1.  0.  5.]
 [-2.  4.  2.]]

實例化一個矩陣,且元素是隨機生成的(0和1之間)删豺,可以用numpy.random方法:

A = np.random.random((2, 3))
print(A)
[[0.13425988 0.99250082 0.52730459]
 [0.09945505 0.42777824 0.52474797]]

轉(zhuǎn)置是反轉(zhuǎn)矩陣的兩個軸共虑,所以矩陣i行j列的元素,轉(zhuǎn)置后就位于j行i列呀页。矩陣A的轉(zhuǎn)置表示為A^T

A_transpose = np.transpose(A)
print(A_transpose)
[[0.13425988 0.09945505]
 [0.99250082 0.42777824]
 [0.52730459 0.52474797]]

也可以用縮寫的方法.T:

A_transpose = A.T
print(A_transpose)
[[0.13425988 0.09945505]
 [0.99250082 0.42777824]
 [0.52730459 0.52474797]]

矩陣運算和性質(zhì)

跟向量一樣妈拌,矩陣也是對應元素相加,不過要求兩個矩陣大小相同蓬蝶,舉例來說:

a = np.matrix([[4, 3],[3,-1],[-2,1]])
b = np.matrix([[-2, 1],[5,3],[1,0]])
c = a + b
print(c)
[[ 2  4]
 [ 8  2]
 [-1  1]]

矩陣也可以跟向量一樣尘分,乘以一個標量,

a = np.matrix([[1,-2,0],[6,4,-2]])
-2 * a
matrix([[ -2,   4,   0],
        [-12,  -8,   4]])

兩矩陣相乘丸氛,就是將第一個矩陣的行與第二個矩陣的列進行點乘培愁,如下:

矩陣A和B可相乘,必須滿足A的列數(shù)與B的行數(shù)相同雪位,例如:

a = np.matrix([[1,-2,0],[6,4,-2]])
b = np.matrix([[4,-1],[0,-2],[1,3]])
c = a * b
print(c)
[[  4   3]
 [ 22 -20]]

與一般的乘法不同竭钝,兩矩陣的hadamard乘積是矩陣對應元素相乘,

使用numpy計算hadamard乘積的話雹洗,用numpy.array而不是numpy.matrix方法來實例化矩陣,這樣可以用numpy.multiply方法來實現(xiàn):

a = np.array([[3,1],[0,5]])
b = np.array([[-2,4],[1,-2]])
np.multiply(a,b)
array([[ -6,   4],
       [  0, -10]])

函數(shù)

函數(shù)是一個等式卧波,計算帶有一個或多個變量的表達式的值时肿,例如:

所以在x=2處,f(2)=11港粱,我們將經(jīng)常遇到函數(shù)螃成,一個神經(jīng)網(wǎng)絡就是一個很大的函數(shù)。
在機器學習中查坪,經(jīng)常會碰到變量和參數(shù)這兩個詞寸宏,變量是等式的一部分,是可變的偿曙,變量決定輸出氮凝,所以上面這個函數(shù)取決于變量x。上式的系數(shù)(3望忆,-5罩阵,9)有時候又叫做參數(shù)竿秆,因為他們決定函數(shù)的形狀,并且是固定的稿壁。

def f(x):
    return 3*(x**2)-5*x+9

f(2)
11

導數(shù)

函數(shù)f(x)的導數(shù)是指在給定點的斜率幽钢,表示為

多項式求導公式如下,
例如:
那么,
def f(x):
    return -2*(x**3)

def f_deriv(x):
    return -6*(x**2)

print(f(2))
print(f_deriv(2))
-16
-24

常數(shù)的導數(shù)為0傅是,為什么呢匪燕?令:

那么,

導數(shù)的性質(zhì)

導數(shù)有交換律喧笔,和的導數(shù)就是導數(shù)的和帽驯,例如:

類似的,常數(shù)可以提到導數(shù)外面溃斋,有如下性質(zhì):

鏈式法則

復合函數(shù)是多個函數(shù)的組合界拦,例如:

可以拆分成:
復合函數(shù)求導的鏈式法則如下:

所以,對上式f(x)求導的結(jié)果為:

學習神經(jīng)網(wǎng)絡時梗劫,鏈式法則十分重要享甸,因為由此可以計算網(wǎng)絡代價函數(shù)的導數(shù)。

def h(x):
    return 4*x-5

def g(x):
    return x**3

def f(x):
    return g(h(x))

def h_deriv(x):
    return 4

def g_deriv(x):
    return 3*(x**2)

def f_deriv(x):
    return g_deriv(h(x)) * h_deriv(x)

f(4)
f_deriv(2)
1331
108

多元函數(shù)

一個函數(shù)可以有一個或多個變量梳侨,例如:

使用累加運算符:
簡化上面式子更好的方法是將變量轉(zhuǎn)化為向量X蛉威,并在向量末尾添加元素1,如下:
系數(shù)向量為:

重構(gòu)上式成:
求多元函數(shù)的偏導數(shù)就是在把其余變量看作是常數(shù)的情況下走哺,對其中一個變量求導數(shù)蚯嫌。

梯度

函數(shù)的梯度是一個包含每個變量偏導數(shù)的向量,

后面當我們在了解神經(jīng)網(wǎng)絡是如何訓練時丙躏,會更深入了解梯度的作用择示。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市晒旅,隨后出現(xiàn)的幾起案子栅盲,更是在濱河造成了極大的恐慌,老刑警劉巖废恋,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谈秫,死亡現(xiàn)場離奇詭異,居然都是意外死亡鱼鼓,警方通過查閱死者的電腦和手機拟烫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迄本,“玉大人硕淑,你說我怎么就攤上這事。” “怎么了喜颁?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵稠氮,是天一觀的道長。 經(jīng)常有香客問我半开,道長隔披,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任寂拆,我火速辦了婚禮奢米,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纠永。我一直安慰自己鬓长,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布尝江。 她就那樣靜靜地躺著涉波,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炭序。 梳的紋絲不亂的頭發(fā)上啤覆,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音惭聂,去河邊找鬼窗声。 笑死,一個胖子當著我的面吹牛辜纲,可吹牛的內(nèi)容都是我干的笨觅。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼耕腾,長吁一口氣:“原來是場噩夢啊……” “哼见剩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扫俺,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤炮温,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后牵舵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡倦挂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年畸颅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片方援。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡没炒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出犯戏,到底是詐尸還是另有隱情送火,我是刑警寧澤拳话,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站种吸,受9級特大地震影響弃衍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坚俗,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一镜盯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猖败,春花似錦速缆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至幢尚,卻和暖如春破停,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侠草。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工辱挥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人边涕。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓晤碘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親功蜓。 傳聞我的和親對象是個殘疾皇子园爷,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353