在現實中普遍使用的推薦系統通常都是基於協同過濾算法的,這類算法一般都須要計算用戶與用戶或者項目與項目之間的類似度,對於數據量以及數據類型不一樣的數據源,須要不一樣的類似度計算方法來提升推薦性能,在mahout提供了大量用於計算類似度的組件,這些組件分別實現了不一樣的類似度計算方法。下圖用於實現類似度計算的組件之間的關係: html
圖一、項目類似度計算組件 算法
圖二、用戶類似度計算組件 ide
下面就幾個重點類似度計算方法作介紹: 性能
類名:PearsonCorrelationSimilarity idea
原理:用來反映兩個變量線性相關程度的統計量 htm
範圍:[-1,1],絕對值越大,說明相關性越強,負相關對於推薦的意義小。 blog
說明:一、 不考慮重疊的數量;二、 若是隻有一項重疊,沒法計算類似性(計算過程被除數有n-1);三、 若是重疊的值都相等,也沒法計算類似性(標準差爲0,作除數)。 排序
該類似度並非最好的選擇,也不是最壞的選擇,只是由於其容易理解,在早期研究中常常被提起。使用Pearson線性相關係數必須假設數據是成對地從正態分佈中取得的,而且數據至少在邏輯範疇內必須是等間距的數據。Mahout中,爲皮爾森相關計算提供了一個擴展,經過增長一個枚舉類型(Weighting)的參數來使得重疊數也成爲計算類似度的影響因子。 ci
類名:EuclideanDistanceSimilarity get
原理:利用歐式距離d定義的類似度s,s=1 / (1+d)。
範圍:[0,1],值越大,說明d越小,也就是距離越近,則類似度越大。
說明:同皮爾森類似度同樣,該類似度也沒有考慮重疊數對結果的影響,一樣地,Mahout經過增長一個枚舉類型(Weighting)的參數來使得重疊數也成爲計算類似度的影響因子。
類名:PearsonCorrelationSimilarity和UncenteredCosineSimilarity
原理:多維空間兩點與所設定的點造成夾角的餘弦值。
範圍:[-1,1],值越大,說明夾角越大,兩點相距就越遠,類似度就越小。
說明:在數學表達中,若是對兩個項的屬性進行了數據中心化,計算出來的餘弦類似度和皮爾森類似度是同樣的,在mahout中,實現了數據中心化的過程,因此皮爾森類似度值也是數據中心化後的餘弦類似度。另外在新版本中,Mahout提供了UncenteredCosineSimilarity類做爲計算非中心化數據的餘弦類似度。
類名:SpearmanCorrelationSimilarity
原理:Spearman秩相關係數一般被認爲是排列後的變量之間的Pearson線性相關係數。
範圍:{-1.0,1.0},當一致時爲1.0,不一致時爲-1.0。
說明:計算很是慢,有大量排序。針對推薦系統中的數據集來說,用Spearman秩相關係數做爲類似度量是不合適的。
類名:CityBlockSimilarity
原理:曼哈頓距離的實現,同歐式距離類似,都是用於多維數據空間距離的測度
範圍:[0,1],同歐式距離一致,值越小,說明距離值越大,類似度越大。
說明:比歐式距離計算量少,性能相對高。
類名:TanimotoCoefficientSimilarity
原理:又名廣義Jaccard係數,是對Jaccard係數的擴展,等式爲
範圍:[0,1],徹底重疊時爲1,無重疊項時爲0,越接近1說明越類似。
說明:處理無打分的偏好數據。
類名:LogLikelihoodSimilarity
原理:重疊的個數,不重疊的個數,都沒有的個數
範圍:具體可去百度文庫中查找論文《Accurate Methods for the Statistics of Surprise and Coincidence》
說明:處理無打分的偏好數據,比Tanimoto係數的計算方法更爲智能。