問(wèn)題規(guī)劃

假設(shè)已有的數(shù)據(jù)如上所示,洋紅色線內(nèi)的數(shù)據(jù)表示缺失數(shù)據(jù),那么我們?nèi)绾胃鶕?jù)已有的評(píng)分?jǐn)?shù)據(jù)來(lái)預(yù)測(cè)這些缺失的數(shù)據(jù)呢?
基于特征的推薦算法

已知數(shù)據(jù)如上,有四個(gè)人對(duì)于不同電影的評(píng)分,我們還有分別表示電影包含浪漫成分和動(dòng)作片成分的多少。那么每一個(gè)電影都可以用一個(gè)向量來(lái)表示,如第一個(gè)電影可以表示為
,其中第一個(gè)元素為常數(shù)。那么對(duì)于每一個(gè)用戶j,我們可以用一個(gè)學(xué)習(xí)算法學(xué)習(xí)參數(shù)
,然后根據(jù)公式
預(yù)測(cè)用戶j對(duì)電影i的評(píng)分。現(xiàn)在問(wèn)題就變?yōu)槿绾螌W(xué)習(xí)到用戶的參數(shù)向量
。

問(wèn)題的正規(guī)表示方式如上所示,我們可以建立一個(gè)類似于線性回歸的模型進(jìn)行用戶參數(shù)向量的預(yù)測(cè),表示用戶的參數(shù)向量,
表示電影的特征向量,現(xiàn)在已經(jīng)有了該用戶的歷史評(píng)價(jià)數(shù)據(jù),那么可以通過(guò)最小化上式計(jì)算用戶的參數(shù)向量,即使得參數(shù)與特征的乘積作為電影預(yù)測(cè)的評(píng)分減去用戶對(duì)電影實(shí)際的評(píng)分,當(dāng)兩者最接近的時(shí)候求得的用戶參數(shù)向量就是我們要求的向量。同時(shí)可以加入正則項(xiàng)進(jìn)行調(diào)整。

我們可以通過(guò)最小化方差得到某一個(gè)用戶的參數(shù)向量,也可以最小化所有用戶的和來(lái)得到所有用戶的參數(shù)向量。

同樣可以利用梯度下降法求最優(yōu)參數(shù)。
以上是基于內(nèi)容的推薦算法,即已經(jīng)有了表示電影特征的向量,但是在實(shí)際中可能沒(méi)有這些信息,那么要如何進(jìn)行推薦呢?
協(xié)同過(guò)濾
之前的數(shù)據(jù)已經(jīng)有信息表明,該電影包含浪漫成分,包含多少動(dòng)作片成本,但是在實(shí)際中我們不可能花錢(qián)讓每一個(gè)人看完這部電影然后給出這些信息,而且有時(shí)候你可能需要的不止這兩個(gè)特征。

假設(shè)我們現(xiàn)在已經(jīng)有了每個(gè)用的參數(shù)向量和每個(gè)用戶對(duì)電影的評(píng)分,要求得電影的特征向量,如對(duì)于用戶一來(lái)說(shuō),根據(jù)他的參數(shù)向量可知他比較喜歡浪漫電影,而他對(duì)電影一的評(píng)分為5分,那么我們可以推斷電影一包含1的浪漫成分,包含0的動(dòng)作成分,那么就可以得到電影一的特征向量為[1,1,0]。這一思想的正規(guī)表示如下:

再給定用戶參數(shù)和評(píng)分的情況下,學(xué)習(xí)電影特征,通過(guò)最小化第一個(gè)式子,每一個(gè)用戶的參數(shù)向量與電影特征的內(nèi)積表示某個(gè)用戶對(duì)該電影的預(yù)測(cè)評(píng)分,而我們還有每個(gè)人對(duì)該電影的實(shí)際評(píng)分,使兩者平方和最小,則可以求得某一個(gè)電影的特征向量。正則化約束了特征值的大小。要求得所有電影的特征向量,則要使所有人對(duì)所有電影的預(yù)測(cè)評(píng)分與實(shí)際評(píng)分誤差平方和最小。

現(xiàn)在我們已經(jīng)知道如果根據(jù)評(píng)分和電影特征求得用戶參數(shù)向量,也知道如何根據(jù)用戶的參數(shù)向量和評(píng)分來(lái)預(yù)測(cè)電影的特征向量。將兩者結(jié)合起來(lái)就是協(xié)同過(guò)濾的基本思想:首先初始化用戶的參數(shù),然后根據(jù)參數(shù)和評(píng)分計(jì)算電影的特征,得到特征以后在進(jìn)行用戶參數(shù)向量的預(yù)測(cè),如此迭代下去,直至收斂。之所以稱之為協(xié)同過(guò)濾,是因?yàn)檫@一系統(tǒng)結(jié)合了每一個(gè)用戶的行為,協(xié)同所有的用戶信息在一起,每個(gè)用戶都在幫助系統(tǒng)進(jìn)行更好的學(xué)習(xí)。
這一過(guò)程必須在每個(gè)用戶都對(duì)多個(gè)電影進(jìn)行評(píng)分,而且每個(gè)電影都被多個(gè)用戶評(píng)分的情況下才能有效。
協(xié)同過(guò)濾算法

將用戶參數(shù)求解和電影特征向量求解結(jié)合起來(lái)進(jìn)行最優(yōu)化,可以避免反復(fù)迭代從而達(dá)到最優(yōu),具體的優(yōu)化模型如上所示,將兩個(gè)最優(yōu)化目標(biāo)結(jié)合在一起,此時(shí)特征向量和用戶參數(shù)向量的維度都是n維,因?yàn)橄到y(tǒng)會(huì)自動(dòng)學(xué)習(xí)特征,就不用人為設(shè)置硬特征了。

首先將用戶參數(shù)向量和電影特征向量初始化為較小的值,然后最小化包含的損失函數(shù)
,利用梯度下降法能求得每一個(gè)用戶的參數(shù)向量
和每個(gè)電影的特征向量
。最后,給定一個(gè)用戶即其參數(shù)向量和電影的特征向量,就能進(jìn)行評(píng)分預(yù)測(cè)了。
矢量化:低軼矩陣分解
協(xié)同過(guò)濾算法還能實(shí)現(xiàn)其他功能,比如,給定特定的商品,你可以找到與之相關(guān)的其他商品。比如用戶一直在尋找某個(gè)產(chǎn)品,那么有沒(méi)有一些相關(guān)的產(chǎn)品可以推薦給用戶?

每個(gè)用戶對(duì)每個(gè)電影的評(píng)分可以表示為一個(gè)矩陣y。

所有電影的特征向量可以表示為一個(gè)矩陣X,所有用戶的參數(shù)向量同樣可以表示為一個(gè)矩陣,這樣Y就可以用這兩個(gè)矩陣的乘積表示。這一過(guò)程稱為低軼矩陣分解

那么我們?nèi)绾伟l(fā)現(xiàn)并推薦相關(guān)電影呢?根據(jù)協(xié)同過(guò)濾算法,我們已經(jīng)學(xué)習(xí)到了不同電影的特征向量,這些特征有時(shí)是難以可視化和難以理解的,但是他們確實(shí)是有意義的,能捕捉不同電影的特征。通過(guò)計(jì)算兩個(gè)電影特征向量之間的模,即距離,我們可以找到和這個(gè)電影最相似的電影,如果我們要找到5個(gè)與某一電影最相近的電影,那么只要找到和該電影特征向量距離最小的前五個(gè)即可。
實(shí)施細(xì)節(jié):均值規(guī)范化

如果對(duì)于某一個(gè)用戶,如這里的Eve,沒(méi)有她的評(píng)分?jǐn)?shù)據(jù),如果對(duì)數(shù)據(jù)進(jìn)行協(xié)同過(guò)濾,求出的她的參數(shù)向量肯定是零向量,因?yàn)樵谶M(jìn)行最小化的時(shí)候,損失函數(shù)簡(jiǎn)化為求正則項(xiàng)的最小化,則求出的參數(shù)一定是零。此時(shí)預(yù)測(cè)該用戶對(duì)電影的評(píng)分,得到的結(jié)果肯定也是0,這是無(wú)意義的。

為了使用戶的預(yù)測(cè)評(píng)分有意義,采用均值歸一化,首先求出每個(gè)電影的評(píng)分的均值,然后將每個(gè)人對(duì)該電影的評(píng)分減去均值,這樣就實(shí)現(xiàn)了均值歸一化,如上圖所示。然后根據(jù)最優(yōu)化求出用戶參數(shù)和電影特征向量之后,在進(jìn)行預(yù)測(cè)的時(shí)候,在每個(gè)電影的預(yù)測(cè)評(píng)分上加上該電影評(píng)分均值從而得到最終結(jié)果。