【機(jī)器學(xué)習(xí)】入門(mén)筆記系列(13)| 基于內(nèi)容的推薦系統(tǒng)

一、基于內(nèi)容的推薦系統(tǒng)

推薦系統(tǒng)時(shí)當(dāng)下非常流行的機(jī)器學(xué)習(xí)應(yīng)用。

下面,講解「基于內(nèi)容的推薦系統(tǒng)」。

1.1 基于內(nèi)容的推薦算法思想

根據(jù)用戶(hù)過(guò)去喜歡的物品,為用戶(hù)推薦和他過(guò)去喜歡的物品相似的物品,而關(guān)鍵就在于這里的物品相似性的度量,這才是算法運(yùn)用過(guò)程中的核心。

舉個(gè)例子,在京東上購(gòu)物的小伙伴們應(yīng)該都知道,每當(dāng)你進(jìn)入任何一個(gè)物品頁(yè)面的時(shí)候都會(huì)有一個(gè)“猜你喜歡”的欄目,這時(shí)候他就會(huì)根據(jù)你經(jīng)常購(gòu)買(mǎi)的物品給你推薦相似的物品。

基于內(nèi)容的推薦算法一般包括以下三步:

  1. 物品表示:提取物品的特征 x 來(lái)表示物品;
  2. 特征學(xué)習(xí):利用一個(gè)用戶(hù)過(guò)去喜歡或者不喜歡的物品的特征數(shù)據(jù),來(lái)訓(xùn)練學(xué)習(xí)算法得到用戶(hù)的偏好特征 \theta;
  3. 生成推薦列表:通過(guò)比較上一步得到的用戶(hù)偏好與候選物品的特征,為此用戶(hù)推薦一組相關(guān)性最大的物品。

1.2 電影推薦系統(tǒng)的實(shí)現(xiàn)

首先定義一些表達(dá)式:

n_u = 用戶(hù)人數(shù)
n_m = 電影數(shù)量
r(i,j) = 1 當(dāng)用戶(hù) j 對(duì) 電影 i 進(jìn)行了評(píng)分
y^{(i,j)} = 用戶(hù) j 對(duì)電影 i 評(píng)分的分?jǐn)?shù)(if~r(i,j) = 0, y^{(i,j)}=undefined),其中用戶(hù)對(duì)電影的評(píng)分范圍是 0 星到 5 星

1.2.1 給定電影特征和評(píng)分,學(xué)習(xí)用戶(hù)偏好

電影推薦系統(tǒng)實(shí)例1

其中,上表中 ? 代表用戶(hù)對(duì)該電影沒(méi)有評(píng)分。表的左半邊是用戶(hù)對(duì)電影的評(píng)分,最右邊的兩列是電影的特征。

物品表示:假設(shè)從電影提取兩個(gè)特征 x_1,x_2 分別表示電影的愛(ài)情指數(shù)(即電影中愛(ài)情元素的占比)與動(dòng)作指數(shù)(即電影中動(dòng)作元素的占比),取值范圍均為 0 到 1 ,且 x_1 + x_2 = 1。

特征學(xué)習(xí):知道這些電影特征值 x_1,x_2 以及知道用戶(hù)對(duì)這些電影的評(píng)分后,可以選用學(xué)習(xí)算法對(duì)每個(gè)用戶(hù)建模來(lái)學(xué)習(xí)用戶(hù)偏好 \theta^{(j)}。即假設(shè)我們選用線(xiàn)性回歸模型,最終,對(duì)于每個(gè)用戶(hù) j,通過(guò)訓(xùn)練學(xué)習(xí)一個(gè)參數(shù)(這里我們可以稱(chēng)為用戶(hù)偏好) \theta^{(j)},這樣就可以用 x^{(i)}\theta^{(j)} 來(lái)預(yù)測(cè)用戶(hù) j 對(duì)電影 i 的評(píng)分。

特征學(xué)習(xí)-對(duì)每個(gè)用戶(hù)建立預(yù)測(cè)模型
線(xiàn)性回歸模型具體實(shí)現(xiàn)

其中,在構(gòu)建推薦系統(tǒng)時(shí),我們也不想只對(duì)某一個(gè)用戶(hù)學(xué)習(xí)出參數(shù)向量 \theta^{(j)},我們想對(duì)所有的用戶(hù)都學(xué)習(xí)出 \theta。因?yàn)槲矣?n_u 個(gè)用戶(hù),所以我希望學(xué)習(xí)出所有的參數(shù)。那么我要做的是將這個(gè)最優(yōu)化目標(biāo)另外再加上一個(gè)求和。所以與之前所學(xué)的線(xiàn)性回歸模型唯一不同的是現(xiàn)在不是只對(duì)一個(gè) θ^{(j)},現(xiàn)在我要對(duì)所有的用戶(hù)求這個(gè)目標(biāo)函數(shù)的和,然后對(duì)整個(gè)優(yōu)化目標(biāo)求最小值,最小化整個(gè)這個(gè)代價(jià)函數(shù) min_{\theta^{(1)},..,\theta^{(n_u)}} J(\theta^{(1)},...,\theta^{(n_u)})。

\sum_{i:r(i,j)=1} 是一個(gè)用戶(hù)對(duì)所有已評(píng)分電影;\sum_{j=1}^{n_u} 是遍歷所有用戶(hù)

生成推薦列表:得到了用戶(hù)偏好 \theta^{(j)},代入待選電影的特征值 x^{(i)},進(jìn)行預(yù)測(cè)并根據(jù)預(yù)測(cè)結(jié)果排序,將排名靠前的電影推薦給用戶(hù)。

這看上去就跟之前所學(xué)線(xiàn)性回歸模型在優(yōu)化目標(biāo)上有點(diǎn)區(qū)別之外,其余沒(méi)有特別大的區(qū)別。

1.2.2 給定用戶(hù)偏好和評(píng)分,學(xué)習(xí)電影的特征

假設(shè)已知條件調(diào)換,我們有某一個(gè)數(shù)據(jù)集,我們并不知道特征的值是多少。所以比如我們得到一些關(guān)于電影的數(shù)據(jù):不同用戶(hù)對(duì)電影的評(píng)分,但我們并不知道每部電影到底有多少浪漫的成分,也不知道到底有多少浪漫的成分,于是我把所有的問(wèn)題都打上問(wèn)號(hào),只知道用戶(hù)對(duì)這幾部電影的評(píng)分。沒(méi)有了電影的特征值是沒(méi)法進(jìn)行學(xué)習(xí)算法就沒(méi)法推薦。那么 「如何得到電影的特征值并構(gòu)建推薦系統(tǒng)」

電影推薦系統(tǒng)實(shí)例1

假設(shè)我們對(duì)每一位用戶(hù)進(jìn)行問(wèn)卷調(diào)查,而且每一位用戶(hù)都告訴我們,他們是否喜歡愛(ài)情電影以及他們是否喜歡動(dòng)作電影(比如現(xiàn)在很多網(wǎng)站都會(huì)讓用戶(hù)選擇喜愛(ài)偏好)。假如用戶(hù) 1 告訴我們她十分喜歡愛(ài)情電影,于是用戶(hù)1的偏好 \theta^{(1)}_1 對(duì)應(yīng)的值就是滿(mǎn)分即 5 分,而她非常不喜歡動(dòng)作電影,于是 \theta^{(1)}_2 就是0。通過(guò)這種方式能得到所有用戶(hù)的偏好 \theta

給定用戶(hù)偏好

然后通過(guò)四個(gè)用戶(hù)喜愛(ài)偏好和對(duì)第1部電影的評(píng)分,可以大概推斷出第 1 部電影的愛(ài)情元素占比較高,動(dòng)作元素占比很小,從而初始化電影 1 的特征值,以此類(lèi)推可對(duì)所有電影特征進(jìn)行初始化。

初始化電影的特征值

初始化完成后,通過(guò)梯度下降算法最小化代價(jià)函數(shù),預(yù)測(cè)電影本身指數(shù),整個(gè)過(guò)程如下:

給定用戶(hù)偏好和評(píng)分,學(xué)習(xí)電影的特征

跟給定電影的特征,預(yù)測(cè)用戶(hù)對(duì)電影評(píng)分的公式幾乎一樣,就是兩者的變量發(fā)生了對(duì)調(diào)而已。

1.2.1 和 1.2.2 公式對(duì)比

二、協(xié)同過(guò)濾(Collaborative Filtering)

假設(shè)只知道用戶(hù)對(duì)電影的評(píng)分的情況下,如何得到電影的合理特征值 x 以及用戶(hù)對(duì)電影類(lèi)型的偏好 \theta

一種構(gòu)建推薦系統(tǒng)的方法叫做協(xié)同過(guò)濾。

2.1 協(xié)同過(guò)濾算法思路

在知道用戶(hù)對(duì)電影的評(píng)分的情況下,如何得到電影的合理特征值 x 以及用戶(hù)對(duì)電影類(lèi)型的偏好 \theta。

基本的協(xié)同過(guò)濾算法:隨機(jī)初始化 \theta 的值,基于你一開(kāi)始隨機(jī)猜測(cè)出的 \theta 的值,運(yùn)用 1.2.2 方法,可以學(xué)習(xí)到不同電影的特征 x,然后用學(xué)習(xí)到的電影的特征 x1.2.1 方法,可以得到對(duì)參數(shù) \theta 的更好估計(jì),又用這個(gè)更好的 \theta1.2.2 方法,得到更好的電影的特征 x 。然后我們可以繼續(xù)迭代,不停重復(fù)優(yōu)化 \theta \rightarrow x \rightarrow \theta \rightarrow ... 。如果你這樣做的話(huà),你的算法將會(huì)收斂到一組合理的電影的特征 x 以及一組不同用戶(hù)合理偏好參數(shù) \theta 的估計(jì)。

Guess~\theta \Rightarrow x \Rightarrow \theta \Rightarrow x \Rightarrow \theta \Rightarrow ... (至收斂)

2.2 協(xié)同過(guò)濾算法實(shí)現(xiàn)

上面講解了算法的思路就是不停地重復(fù)這些計(jì)算,先隨機(jī)地初始化這些參數(shù) \theta,然后運(yùn)用 \theta 初始化 x;然后優(yōu)化 x,優(yōu)化 \theta,優(yōu)化 x,優(yōu)化 \theta ...

但實(shí)際上呢,存在一個(gè)更有效率的算法讓我們不再需要再這樣不停地依次計(jì)算 x,\theta,而是能夠?qū)?x,\theta 同時(shí)計(jì)算出來(lái)。

首先,將 1.2.1 和 1.2.2 的優(yōu)化目標(biāo)合并。

合并優(yōu)化目標(biāo)

其中,紅框標(biāo)注出來(lái)的求和公式都是一樣的,就是表達(dá)不同而已。

Tips:用這種方法,我們可以不需要 x_0 = 1 這個(gè)前提,也就是 x^{(i)} \in \mathbb{R}^{n},\theta^{(j)} \in \mathbb{R}^{n}

協(xié)同過(guò)濾算法完整的過(guò)程

PS:第二步中,先計(jì)算完全部特征 x,再計(jì)算全部參數(shù) \theta

2.3 協(xié)同過(guò)濾算法向量化實(shí)現(xiàn)

協(xié)同過(guò)濾算法向量化實(shí)現(xiàn)

Y = Y + \mu

2.4 電影之間的相似度衡量

兩個(gè)電影的特征值之差 ||x^{(i)} - x^{(j)}|| 可以衡量?jī)蓚€(gè)電影之間的相似程度。

2.5 算法實(shí)現(xiàn)細(xì)節(jié):均值歸一化

對(duì)于從未對(duì)電影評(píng)分的用戶(hù),使用協(xié)同過(guò)濾算法會(huì)得到他的偏好全0 并且他對(duì)所有的電影評(píng)分都是 0,這樣我們無(wú)法推薦他任何電影

對(duì)于從未對(duì)電影評(píng)分的用戶(hù)

這個(gè)問(wèn)題需要使用均值歸一化解決

電影評(píng)分矩陣 Y

使用均值歸一化的協(xié)同過(guò)濾算法

對(duì)未知的用戶(hù),讓他對(duì)電影的評(píng)分等于電影的平均分,即上例中

y(i,5) = [2.5,2.5,2,2.25,2.25]^T

換句話(huà)說(shuō),使用均值歸一化的協(xié)同過(guò)濾算法,對(duì)于未知的用戶(hù),我們推薦平均評(píng)分較高的電影給他。

We talked about mean normalization. However, unlike some other applications of feature scaling, we did not scale the movie ratings by dividing by the range (max – min value). This is because:
All the movie ratings are already comparable (e.g., 0 to 5 stars), so they are already on similar scales.

總結(jié)

基于內(nèi)容的推薦算法一般包括以下三步:

  1. 物品表示:提取物品的特征 x 來(lái)表示物品;
  2. 特征學(xué)習(xí):利用一個(gè)用戶(hù)過(guò)去喜歡或者不喜歡的物品的特征數(shù)據(jù),來(lái)訓(xùn)練學(xué)習(xí)算法得到用戶(hù)的偏好特征 \theta;
  3. 生成推薦列表:通過(guò)比較上一步得到的用戶(hù)偏好與候選物品的特征,為此用戶(hù)推薦一組相關(guān)性最大的物品。
協(xié)同過(guò)濾算法學(xué)習(xí)特征 $x$ 和用戶(hù)偏好 $\Theta$

參考文獻(xiàn)

  1. 吳恩達(dá)機(jī)器學(xué)習(xí) week9
  2. 【推薦系統(tǒng)】詳解基于內(nèi)容的推薦算法
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容