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