該系列文章為,觀看“吳恩達(dá)機(jī)器學(xué)習(xí)”系列視頻的學(xué)習(xí)筆記。雖然每個視頻都很簡單,但不得不說每一句都非常的簡潔扼要,淺顯易懂。非常適合我這樣的小白入門。
本章含蓋
- 17.1 問題規(guī)劃
- 17.2 基于內(nèi)容的推薦算法
- 17.3 協(xié)同過濾
- 17.4 協(xié)同過濾算法
- 17.5 低軼矩陣分解
- 17.6 實(shí)施細(xì)節(jié):均值規(guī)范化
17.1 問題規(guī)劃
在接下來的視頻中,我想講一下推薦系統(tǒng)。我想講推薦系統(tǒng)有兩個原因:
第一、僅僅因?yàn)樗菣C(jī)器學(xué)習(xí)中的一個重要的應(yīng)用。在過去幾年,我偶爾訪問硅谷不同的技術(shù)公司,我常和工作在這兒致力于機(jī)器學(xué)習(xí)應(yīng)用的人們聊天,我常問他們,最重要的機(jī)器學(xué)習(xí)的應(yīng)用是什么,或者,你最想改進(jìn)的機(jī)器學(xué)習(xí)應(yīng)用有哪些。我最常聽到的答案是推薦系統(tǒng)?,F(xiàn)在,在硅谷有很多團(tuán)體試圖建立很好的推薦系統(tǒng)。因此,如果你考慮網(wǎng)站像亞馬遜,或網(wǎng)飛公司或易趣,或iTunes Genius,有很多的網(wǎng)站或系統(tǒng)試圖推薦新產(chǎn)品給用戶。如,亞馬遜推薦新書給你,網(wǎng)飛公司試圖推薦新電影給你,等等。這些推薦系統(tǒng),根據(jù)瀏覽你過去買過什么書,或過去評價(jià)過什么電影來判斷。這些系統(tǒng)會帶來很大一部分收入,比如像亞馬遜和網(wǎng)飛這樣的公司。因此,對推薦系統(tǒng)性能的改善,將對這些企業(yè)的有實(shí)質(zhì)性和直接的影響。
推薦系統(tǒng)是個有趣的問題,在學(xué)術(shù)機(jī)器學(xué)習(xí)中因此,我們可以去參加一個學(xué)術(shù)機(jī)器學(xué)習(xí)會議,推薦系統(tǒng)問題實(shí)際上受到很少的關(guān)注,或者,至少在學(xué)術(shù)界它占了很小的份額。但是,如果你看正在發(fā)生的事情,許多有能力構(gòu)建這些系統(tǒng)的科技企業(yè),他們似乎在很多企業(yè)中占據(jù)很高的優(yōu)先級。這是我為什么在這節(jié)課討論它的原因之一。
我想討論推薦系統(tǒng)地第二個原因是:這視頻的最后幾集我想討論機(jī)器學(xué)習(xí)中的一些大思想,并和大家分享。我們已經(jīng)在這門課中看到,特征對于機(jī)器學(xué)習(xí)來說,是非常重要的,你所選擇的特征,將對你學(xué)習(xí)算法的性能有很大的影響。因此,在機(jī)器學(xué)習(xí)中有一種大思想,對于一些問題,可能并不是所有的問題,而是一些問題,有一些算法可以自動地學(xué)習(xí)一系列適合的特征。所以,比起手動設(shè)計(jì)或編寫特征(這也是我們目前做得最多的事),這里有一些環(huán)境,能讓你開發(fā)某個算法,來學(xué)習(xí)使用哪些特征。而推薦系統(tǒng)就是那些環(huán)境中的一個例子,當(dāng)然還有很多其他的,但是通過推薦系統(tǒng),我們將領(lǐng)略一小部分,特征學(xué)習(xí)的思想,至少,你將能夠了解到這方面的一個例子,我認(rèn)為,機(jī)器學(xué)習(xí)中的大思想也是這樣。因此,讓我們開始討論推薦系統(tǒng)問題形式化。
我們從一個例子開始定義推薦系統(tǒng)的問題。
假使我們是一個電影供應(yīng)商,我們有 5 部電影和 4 個用戶,我們要求用戶為電影打分。


17.2 基于內(nèi)容的推薦算法
在一個基于內(nèi)容的推薦系統(tǒng)算法中,我們假設(shè)對于我們希望推薦的東西有一些數(shù)據(jù),這些數(shù)據(jù)是有關(guān)這些東西的特征。

在我們的例子中,我們可以假設(shè)每部電影都有兩個特征,如x_1代表電影的浪漫程度,x_2 代表電影的動作程度。
所以,如果我們有類似這樣的特征,那么每部電影就可以用一個特征向量來表示。同往常一樣,我們再加一個額外特征,稱為截距特征 x_0,它的值總是 1 。

n 表示 特征 數(shù)量,但是不包括 x_0。因此,本例中,n = 2.
下面我們要基于這些特征來構(gòu)建一個推薦系統(tǒng)算法。 假設(shè)我們采用線性回歸模型,我們可以針對每一個用戶都訓(xùn)練一個線性回歸模型,如θ^((1))是第一個用戶的模型的參數(shù)。 于是,我們有:
代價(jià)函數(shù)
針對用戶 j,該線性回歸模型的代價(jià)為預(yù)測誤差的平方和,加上正則化項(xiàng):
其中 i:r(i,j)=1表示我們只計(jì)算那些用戶 j 評過分的電影。在一般的線性回歸模型中,誤差項(xiàng)和正則項(xiàng)應(yīng)該都是乘以1/2m(這里,可以說是 m^(j) ),在這里我們將m去掉。并且我們不對方差項(xiàng)θ_0進(jìn)行正則化處理。

上面的代價(jià)函數(shù)只是針對一個用戶的,為了學(xué)習(xí)所有用戶,我們將所有用戶的代價(jià)函數(shù)求和:


??這就是如何最小化代價(jià)函數(shù)J,來學(xué)習(xí)所有的參數(shù)。用這些求導(dǎo)公式的時(shí)候,如果你想,你可以把它們代入到一個更高級的優(yōu)化算法中。比如,簇梯度或者LBFGS等等,并用它們來最小化代價(jià)函數(shù)J。
17.3 協(xié)同過濾
在之前的基于內(nèi)容的推薦系統(tǒng)中,對于每一部電影,我們都掌握了可用的特征,使用這些特征訓(xùn)練出了每一個用戶的參數(shù)。相反地,如果我們擁有用戶的參數(shù),我們可以學(xué)習(xí)得出電影的特征。

但是如果我們既沒有用戶的參數(shù),也沒有電影的特征,這兩種方法都不可行了。協(xié)同過濾算法可以同時(shí)學(xué)習(xí)這兩者。
我們所講算法有一個很有意思的特性,叫做“特征學(xué)習(xí)”。這種算法能夠自行學(xué)習(xí)所需要的特征。

注:θ_0 = 0。
有了,用戶對電影的評分,以及 θ^(j),理論上,我們就能得到電影的特征 x_1 和 x_2 的值。

總結(jié)一下,這一階段要做的就是選擇特征 x^(i),讓所有已經(jīng)評價(jià)過電影的用戶 j ,使得算法預(yù)測出的用戶對電影評分與用戶實(shí)際對該電影的評分的平方誤差最小。
學(xué)習(xí)所有電影的特征:
最終你將得到合適的,所有電影的特征。

給定 x ,你能估算出 θ;而,給你 θ 的話,你能估算出 x。這就有點(diǎn)類似“先有雞,還是先有蛋”的問題了。。
實(shí)際上,隨機(jī)的猜取一些 θ 值,在有了這些隨機(jī)初始化的 θ 值以后。你就能用這些 θ 值來學(xué)習(xí)出 x。然后,在有這些初始化的特征(x)之后,你就能運(yùn)用其得到更好的 參數(shù)θ值的估計(jì)。依次類型。。。我們將這個迭代過程不斷地重復(fù)執(zhí)行,我們能得到很好的 θ 和 x,并且效果確實(shí)很好。如果你重復(fù)這個過程,你的算法將會收斂到一組合理的電影特征以及一組合理的對不同用的參數(shù)θ的估計(jì)。
對于這個問題,該問題僅建立在每位用戶對數(shù)個電影進(jìn)行了評價(jià),并且每部電影都被數(shù)位用戶評價(jià)過的情況下。這樣你才能夠重復(fù)這個迭代過程,來估計(jì)出 θ 和 x。
這就是基本的“協(xié)同過濾”算法,這實(shí)際不是最后,我們將要使用的算法,下一個視頻我們將介紹如何改進(jìn)該算法,讓其在計(jì)算時(shí)更為高效。
“協(xié)同過濾”算法指的是,當(dāng)你執(zhí)行算法時(shí),要觀察大量的用戶,觀察這些用戶的實(shí)際行為,來協(xié)同的得到更佳的每個人對電影的評分值。
17.4 協(xié)同過濾算法
實(shí)際上存在一個更有效的算法,比 “迭代循環(huán)的一次計(jì)算出 θ 值后,在使用該 θ 值估計(jì)出新的 x,再使用該 x 估算出新的 θ 值。。。以此類推” 這樣的算法更有效。它能夠?qū)?x 和 θ 同時(shí)計(jì)算出來。我們所要做的就是將



實(shí)際上:

是相同的。雖然,可能它們兩個求和看起來有點(diǎn)不同。但讓我們來看看它們到底在做什么。
第一個求和運(yùn)算是,所有用戶 j 的總和 所有被用戶評分過的電影總和。這其實(shí)是將,所有 (i,j) 對全加起來。每一項(xiàng)對應(yīng)被某一用戶評分過的某一電影。
而第二個求和運(yùn)算,進(jìn)行相反的運(yùn)行。它表示對每部電影 i,將所有對它評分過的用戶 j 求和。
這兩個運(yùn)算符都是對所有 (i,j) = 1 的 (i,j) 對求和。就是對所有有評分的 用戶-電影 對進(jìn)行求和。





時(shí),我們不再遵循 x_0 = 1 這慣例。而是,我們將 x 特征向量定義為一個 n 為向量(之前,我們不需要學(xué)習(xí) x 特征向量時(shí),它是一個 n+1 維向量),同樣,因?yàn)閰?shù) θ 具有相同的維度,所以 θ 也是 n 維的,因?yàn)?,如果沒有 x_0 的話,那么 θ_0 也不再需要。
我們放棄這個慣例(x_0 = 1)的理由是,我們現(xiàn)在是在學(xué)習(xí)所有的特征,我們沒有必要將一個特征值硬編碼為 1。因?yàn)?,如果算法真的需要,一個特征永遠(yuǎn)為1,它可以選擇靠自己去獲得 1 這個數(shù)值。

- 首先,我們將會把 x 和 θ 初始化為小的隨機(jī)值。這一點(diǎn),有點(diǎn)像神經(jīng)網(wǎng)絡(luò)訓(xùn)練。
-
接下來,我們要用梯度下降或者其他的高級優(yōu)化算法把這個代價(jià)函數(shù)最小化。如果你求導(dǎo)的話,你會發(fā)現(xiàn)梯度下降法寫出來的更新式是這樣的:
- 最后,給你一個用戶。如果這個用戶具有一些參數(shù) θ,以及給你一部電影,學(xué)習(xí)得到的特征 x。我們可以預(yù)測該用戶給電影 j 的評分(該用戶還未對電影 j 進(jìn)行過評分)
“協(xié)同過濾”算法可以同時(shí)學(xué)習(xí)幾乎所有電影的特征 x 和所有用戶參數(shù) θ。能對不同用戶會如何對他們尚未評分的電影做出評價(jià)給出相當(dāng)精準(zhǔn)的預(yù)測。
通過這個學(xué)習(xí)過程獲得的特征矩陣包含了有關(guān)電影的重要數(shù)據(jù),這些數(shù)據(jù)不總是人能讀懂的,但是我們可以用這些數(shù)據(jù)作為給用戶推薦電影的依據(jù)。
例如,如果一位用戶正在觀看電影 x(i),我們可以尋找另一部電影x(j),依據(jù)兩部電影的特征向量之間的距離 ∥x(i)-x(j) ∥ 的大小。
17.5 低軼矩陣分解
在上幾節(jié)視頻中,我們談到了協(xié)同過濾算法,本節(jié)視頻中我將會講到有關(guān)該算法的向量化實(shí)現(xiàn),以及說說有關(guān)該算法你可以做的其他事情。
舉例子:
1.當(dāng)給出一件產(chǎn)品時(shí),你能否找到與之相關(guān)的其它產(chǎn)品。
2.一位用戶最近看上一件產(chǎn)品,有沒有其它相關(guān)的產(chǎn)品,你可以推薦給他。
我將要做的是:實(shí)現(xiàn)一種選擇的方法,寫出協(xié)同過濾算法的預(yù)測情況。
我們有關(guān)于五部電影的數(shù)據(jù)集,我將要做的是,將這些用戶的電影評分,進(jìn)行分組并存到一個矩陣中。











