算法代码中的循环矩阵在哪体现_「Machine Learning 学习小结」| 向量在梯度下降算法当中的应用...
寫在前面:
在之前的文章當(dāng)中提到過,學(xué)習(xí)梯度下降算法,可能需要一點(diǎn)點(diǎn)線性代數(shù)的知識(shí)。在本篇文章當(dāng)中,我們的討論就涉及到了向量。
筆者也曾提到,不妨把向量看成對(duì)數(shù)據(jù)進(jìn)行批量操作的一種工具,這樣可能對(duì)我們理解接下來的知識(shí)有一些幫助。
推薦閱讀:吳恩達(dá)機(jī)器學(xué)習(xí):
第五章:正規(guī)方程
第六章:矢量
Outline:
- 矢量
- 正規(guī)方程
一.矢量
在我們將向量應(yīng)用到我們的梯度算法之前我們進(jìn)行一個(gè)簡(jiǎn)單的回顧。
這是我們的多元函數(shù)梯度下降算法。
我們來看一下預(yù)測(cè)函數(shù)的計(jì)算在MATLAB/C++中的代碼實(shí)現(xiàn)(吳恩達(dá)老師的課程中對(duì)Octave/MATLAB的簡(jiǎn)單應(yīng)用進(jìn)行了講解,筆者認(rèn)為大家可以系統(tǒng)的學(xué)習(xí)Python和MATLAB,這有助于我們接下來的算法實(shí)現(xiàn))
C++實(shí)現(xiàn):左側(cè)是未向量化;右側(cè)是向量化MATLAB:未向量化實(shí)現(xiàn)MATLAB:向量化實(shí)現(xiàn)通過上述代碼的實(shí)現(xiàn),我們可以看出:相對(duì)于未向量化的循環(huán)結(jié)構(gòu),我們向量化之后對(duì)數(shù)據(jù)進(jìn)行批量操作,兩個(gè)矩陣的一次乘法運(yùn)算就可以得到我們的預(yù)測(cè)值,提高了我們的算法效率。
下面我們展示對(duì)梯度下降算法進(jìn)行矢量化后的結(jié)果(這也是一個(gè)難點(diǎn))
算法的表達(dá)上述表達(dá)式中θ是一個(gè)列向量,δ也是一個(gè)列向量,我們來看看他們具體是什么。
θ:是一個(gè)n+1維向量,分量是θ_0到θ_n
δ:
讀者可以耐下性子自己動(dòng)筆計(jì)算驗(yàn)證,向量化后的算法跟未向量化的算法是完全等價(jià)的,在這里我們對(duì)數(shù)據(jù)進(jìn)行了批量計(jì)算,提高了我們的算法效率。也許對(duì)于剛剛接觸線性代數(shù)的朋友來數(shù),這是難以理解的,但是不要心急,上述計(jì)算所具備的知識(shí)就是基本的向量加減運(yùn)算,向量的乘法運(yùn)算,耐心計(jì)算,搞明白上述算法的內(nèi)涵。
總結(jié)一下,我們得到了向量化的梯度下降算法:
二.正規(guī)方程組
我們來回顧一下我們求解多元函數(shù)代價(jià)函數(shù)極小值點(diǎn)的數(shù)學(xué)原理是什么:各個(gè)一階偏導(dǎo)數(shù)為零。
除了這樣做,我們還有什么辦法?
我們來看看正規(guī)方程組法求解極小值點(diǎn)。
圖片源自:黃海廣|機(jī)器學(xué)習(xí)實(shí)際上,當(dāng)特征變量的數(shù)目并不大(小于一萬)的時(shí)候,我們通常采用正規(guī)方程組的方法,而不是梯度下降算法。
熟悉線性代數(shù)的朋友可能知道,有時(shí)候可能會(huì)存在矩陣不可逆的情況,我們將這樣的矩陣稱之為奇異矩陣;但是我們的pinv函數(shù),是一個(gè)求偽逆函數(shù),這意味著即使我們的矩陣不可逆,我們的算法仍然可以正常運(yùn)行。
我們給出正規(guī)方程組算法的證明(看懂它需要了解矩陣求導(dǎo)法則)
圖片源自:黃海廣|機(jī)器學(xué)習(xí)個(gè)人筆記圖片源自:黃海廣|機(jī)器學(xué)習(xí)個(gè)人筆記到這篇文章結(jié)束為止,我們要對(duì)線性回歸預(yù)測(cè)說一聲暫時(shí)的告別,希望大家可以結(jié)合視頻學(xué)習(xí),自己敲敲代碼,實(shí)現(xiàn)自己的算法。多練習(xí),多實(shí)踐。
第一次截稿日期:2019/5/4
總結(jié)
以上是生活随笔為你收集整理的算法代码中的循环矩阵在哪体现_「Machine Learning 学习小结」| 向量在梯度下降算法当中的应用...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java tostring格式化日期_j
- 下一篇: python包含多个元组的元组_如何在p