推薦系統中的類似度度量

類似度計算是數據挖掘,推薦引擎中的最基本問題,例如在推薦系統(Recommender Systems,簡稱RSs)中計算帶推薦物品(Item)類似度,或是用戶(User)之間的類似度以期得到興趣口味(Taste)類似的用戶時,均須要使用到類似度計算技術。常用的類似度計算方式較多,且各有特色, 如下就列出經常使用的類似度計算方式,原理,以及其優缺點。java

類似度計算和距離計算是相似問題,以前粗略看了下Mahout(apache分佈式數據挖掘項目)中的實現對各計算方式進行分析。結合在實際項目中的應用,介紹幾類經常使用的距離計算公式。apache

Cosine

最常使用的類似度計算方法,並且整體效果較好,能夠說是簡單實用。數學描述以下:分佈式

cosine_define

其中 是X的模。ide

例如,在推薦引擎中,使用 r_ui表示User u對Item i的打分,則可使用u對各Item打的分數的向量做爲User u的興趣愛好,則User u和User v之間的cosine類似度計算方式爲:ui

cosine_define1

其中 I_ui 表示User u,v均投票了的item。idea

Cosine的幾何意義爲向量空間中,將待計算類似度的向量均歸一化爲長度爲1的向量, 全部被歸一化後的向量  ov的v點座標均落在以向量0爲球心,半徑爲1的球面上,使用二向量的夾角度量兩者類似度,夾角越小,類似程度越高。排序

在文本處理過程當中,cosine度量方式表現效果都會比較好。ci

Mahout中參見CosineDistanceMeasure.java字符串

Pearson Correlation

用於度量線性關係最經常使用的方法, 定義 爲協方差,σ爲標準差, 則Pearson相關係數爲:get

Pearson_num

例如,使用 表示User u對Item的打分,則User u,v之間的類似度計算方式爲:

Pearson_num_2

其中 表示User u,v均投票了的item,與COS的區別是考慮了投票的均值, 且分母考慮的是User u,v共同投票的Item。

不少時候,針對User的PC要比針對Item的PC效果較好,由於針對User的PC至關於對各個用戶的投票Scales作了一箇中心化,避免各用戶對相同Item投票時,由於投票習慣不同而致使的差別。例如:投票分值分[1,5]檔,有些人投4表示很是喜歡, 而有些人會投5表述相同的喜愛程度。

PC的缺點以下:

  1. 如任意User僅投票了一個元素, 則沒法使用該公式計算。
  2. 如任意User的每一個投票分值均同樣, 則沒法使用該公式計算。
  3. 計算時沒有考慮投票的總數量, 例如User u投票了200 Items,而v僅投票了2Items,則最後有可能仍是v與待比較User近似。

另外PC也常常用做序列趨勢的相近程度度量。在檢索,推薦系統中常常須要考慮檢索結果及推薦商品的季節因素,例如根據往年某一商品的季節特徵,預測相似產品的接下來的流行程度。 下圖分別爲檢索詞‘吳莫愁’,‘梁博’,‘滑雪’在過去3個月的搜索PV,使用PC度量,很容易獲得檢索詞‘吳莫愁’與‘梁博’的類似度遠遠大於‘梁博’與‘滑雪’的類似度。

tread_liangbo_wumochou

Mahout中參見PearsonCorrleationSimilarity.java

Spearman Rank Correlation(SRC)

Spearman Rank Correlation和Pearson Correlation很是相似, 只是SRC沒有考慮對User對某具體Item的投票,而是考慮Item 在User全部投票中的相對Ranking。其數學表示爲:

SRC

其中 k_ui表示User u對Item的投票值在User u全部投票中的Ranking。

SRC的優勢是可以避免每一個用戶因投票習慣不一致帶來的偏差, 缺點是計算開銷較大(每次計算都須要進行排序)

Mahout中參見SpearmanCorreleationSimilarity.java。計算複雜度較高。

Simple Matching Coefficient

imple Matching Coefficient

僅考慮數據爲二值的狀況(0,1)。 若是數據非二值, 則將數據轉化爲爲二值。定義M01爲u中屬性爲0,但v中屬性爲1的數量,M00表示u,v中屬性均爲0的數量,M10,M11同理。則SMC定義以下:

SMC

例如u=[1,1,0,0],v=[0,1,1,0],則SMC=2/4=0.5

Jaccard Coefficient

與SMC計算方式相似,但具體運算公式以下:

JC

即僅考慮兩個向量中,同一維度上值均爲1的數量。該類似度度量公式在文本匹配中也較爲經常使用, 好比在計算兩個短字串的類似度時,首先將字符串切詞,找到更細粒度的切詞結果term,以後以不一樣的term做爲不一樣維度的屬性,使用JC計算類似度。

Extented Jaccard(Tanimoto)

extend_JC

 

距離度量方式

該度量方式是最直觀的度量方式,通常使用曼哈頓,歐幾里得距離度量,而更爲廣義的是閔科夫斯基度量方式。以Euclidean Distance爲例:

歐幾里得距離計算公式

可簡單轉化爲類似度則表示爲:

歐氏距離轉類似度

相關文章
相關標籤/搜索