- 簽證留學(xué) |
- 筆譯 |
- 口譯
- 求職 |
- 日/韓語(yǔ) |
- 德語(yǔ)
近十年來(lái),推薦引擎對(duì)因特網(wǎng)用戶而言已經(jīng)不是什么新鮮事物了。Amazon會(huì)根據(jù)顧客的購(gòu)買(mǎi)歷史向他們推薦物品,Netflix會(huì)向其用戶推薦電影,新聞網(wǎng)站會(huì)對(duì)用戶推薦新聞報(bào)道,這樣的例子還有很多很多。當(dāng)然,有很多方法可以實(shí)現(xiàn)推薦功能,這里我們只使用一種稱為協(xié)同過(guò)濾(collaborative filtering)的方法。協(xié)同過(guò)濾是通過(guò)將用戶和其他用戶的數(shù)據(jù)進(jìn)行對(duì)比來(lái)實(shí)現(xiàn)推薦的。
這里的數(shù)據(jù)是從概念上組織成了類似圖1所給出的矩陣形式。當(dāng)數(shù)據(jù)采用這種方式進(jìn)行組織時(shí),我們就可以比較用戶或物品之間的相似度了。這兩種做法都會(huì)使用我們很快就介紹到的相似度的概念。當(dāng)知道了兩個(gè)用戶或兩個(gè)物品之間的相似度,我們就可以利用已有的數(shù)據(jù)來(lái)預(yù)測(cè)未知的用戶喜好。例如,我們?cè)噲D對(duì)某個(gè)用戶喜歡的電影進(jìn)行預(yù)測(cè),推薦引擎會(huì)發(fā)現(xiàn)有一部電影該用戶還沒(méi)看過(guò)。然后,它就會(huì)計(jì)算該電影和用戶看過(guò)的電影之間的相似度,如果其相似度很高,推薦算法就會(huì)認(rèn)為用戶喜歡這部電影。
在上述場(chǎng)景下,唯一所需要的數(shù)學(xué)方法就是相似度的計(jì)算,這并不是很難。接下來(lái),我們首先討論物品之間的相似度計(jì)算,然后討論在基于物品和基于用戶的相似度計(jì)算之間的折中。最后,我們介紹推薦引擎成功的度量方法。
1. 相似度計(jì)算
我們希望擁有一些物品之間相似度的定量方法。那么如何找出這些方法呢?倘若我們面對(duì)的是食品銷售網(wǎng)站,該如何處理?或許可以根據(jù)食品的配料、熱量、某個(gè)烹調(diào)類型的定義或者其他類似的信息進(jìn)行相似度的計(jì)算?,F(xiàn)在,假設(shè)該網(wǎng)站想把業(yè)務(wù)拓展到餐具行業(yè),那么會(huì)用熱量來(lái)描述一個(gè)叉子嗎?問(wèn)題的關(guān)鍵就在于用于描述食品的屬性和描述餐具的屬性有所不同。倘若我們使用另外一種比較物品的方法會(huì)怎樣呢?我們不利用專家所給出的重要屬性來(lái)描述物品從而計(jì)算它們之間的相似度,而是利用用戶對(duì)它們的意見(jiàn)來(lái)計(jì)算相似度。這就是協(xié)同過(guò)濾中所使用的方法。
它并不關(guān)心物品的描述屬性,而是嚴(yán)格地按照許多用戶的觀點(diǎn)來(lái)計(jì)算相似度。圖2 給出了由一些用戶及其對(duì)前面給出的部分菜肴的評(píng)級(jí)信息所組成的矩陣。
圖2 用于展示相似度計(jì)算的簡(jiǎn)單矩陣
我們計(jì)算一下手撕豬肉和烤牛肉之間的相似度。一開(kāi)始我們使用歐氏距離來(lái)計(jì)算。手撕豬肉和烤牛肉的歐氏距離為:
而手撕豬肉和鰻魚(yú)飯的歐氏距離為:
在該數(shù)據(jù)中,由于手撕豬肉和烤牛肉的距離小于手撕豬肉和鰻魚(yú)飯的距離,因此手撕豬肉與烤牛肉比與鰻魚(yú)飯更為相似。我們希望,相似度值在0到1之間變化,并且物品對(duì)越相似,它們的相似度值也就越大。我們可以用“相似度=1/(1+距離)”這樣的算式來(lái)計(jì)算相似度。當(dāng)距離為0時(shí),相似度為1.0。如果距離真的非常大時(shí),相似度也就趨近于0。
第二種計(jì)算距離的方法是皮爾遜相關(guān)系數(shù)(Pearson correlation)。度量回歸方程的精度時(shí)會(huì)用到過(guò)這個(gè)量,它度量的是兩個(gè)向量之間的相似度。該方法相對(duì)于歐氏距離的一個(gè)優(yōu)勢(shì)在于,它對(duì)用戶評(píng)級(jí)的量級(jí)并不敏感。比如某個(gè)狂躁者對(duì)所有物品的評(píng)分都是5分,而另一個(gè)憂郁者對(duì)所有物品的評(píng)分都是1分,皮爾遜相關(guān)系數(shù)會(huì)認(rèn)為這兩個(gè)向量是相等的。在NumPy中,皮爾遜相關(guān)系數(shù)的計(jì)算是由函數(shù)corrcoef()進(jìn)行的,后面我們很快就會(huì)用到它了。皮爾遜相關(guān)系數(shù)的取值范圍從-1到+1,我們通過(guò)0.5+0.5*corrcoef()這個(gè)函數(shù)計(jì)算,并且把其取值范圍歸一化到0到1之間。