145 Mahout協同過濾算法

Mahout使用了Taste來提高協同過濾算法的實現,它是一個基於Java實現的可擴展的,高效的推薦引擎。Taste既實現了最基本的基於用戶的和基於內容的推薦算法,同時也提供了擴展接口,使用戶可以方便的定義和實現自己的推薦算法。同時,Taste不僅僅只適用於Java應用程序,它可以作爲內部服務器的一個組件以HTTP和Web Service的形式向外界提供推薦的邏輯。Taste的設計使它能滿足企業對推薦引擎在性能、靈活性和可擴展性等方面的要求。

Taste主要包括以下幾個接口:

  • DataModel 是用戶喜好信息的抽象接口,它的具體實現支持從任意類型的數據源抽取用戶喜好信息。Taste 默認提供 JDBCDataModel 和 FileDataModel,分別支持從數據庫和文件中讀取用戶的喜好信息。
  • UserSimilarity 和 ItemSimilarity 。UserSimilarity 用於定義兩個用戶間的相似度,它是基於協同過濾的推薦引擎的核心部分,可以用來計算用戶的“鄰居”,這裏我們將與當前用戶口味相似的用戶稱爲他的鄰居。ItemSimilarity 類似的,計算Item之間的相似度。
  • UserNeighborhood 用於基於用戶相似度的推薦方法中,推薦的內容是基於找到與當前用戶喜好相似的鄰居用戶的方式產生的。UserNeighborhood 定義了確定鄰居用戶的方法,具體實現一般是基於 UserSimilarity 計算得到的。
  • Recommender 是推薦引擎的抽象接口,Taste 中的核心組件。程序中,爲它提供一個 DataModel,它可以計算出對不同用戶的推薦內容。實際應用中,主要使用它的實現類 GenericUserBasedRecommender 或者 GenericItemBasedRecommender,分別實現基於用戶相似度的推薦引擎或者基於內容的推薦引擎。
  • RecommenderEvaluator :評分器。
  • RecommenderIRStatsEvaluator :蒐集推薦性能相關的指標,包括準確率、召回率等等。

1、DataModel

org.apache.mahout.cf.taste.impl.model.GenericDataModel
org.apache.mahout.cf.taste.impl.model.GenericBooleanPrefDataModel
org.apache.mahout.cf.taste.impl.model.PlusAnonymousUserDataModel
org.apache.mahout.cf.taste.impl.model.file.FileDataModel
org.apache.mahout.cf.taste.impl.model.hbase.HBaseDataModel
org.apache.mahout.cf.taste.impl.model.cassandra.CassandraDataModel
org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel
org.apache.mahout.cf.taste.impl.model.jdbc.SQL92JDBCDataModel
org.apache.mahout.cf.taste.impl.model.jdbc.MySQLJDBCDataModel
org.apache.mahout.cf.taste.impl.model.jdbc.PostgreSQLJDBCDataModel
org.apache.mahout.cf.taste.impl.model.jdbc.GenericJDBCDataModel
org.apache.mahout.cf.taste.impl.model.jdbc.SQL92BooleanPrefJDBCDataModel
org.apache.mahout.cf.taste.impl.model.jdbc.MySQLBooleanPrefJDBCDataModel
org.apache.mahout.cf.taste.impl.model.jdbc.PostgreBooleanPrefSQLJDBCDataModel
org.apache.mahout.cf.taste.impl.model.jdbc.ReloadFromJDBCDataModel

從類名上就可以大概猜出來每個DataModel的用途,奇怪的是竟然沒有HDFS的DataModel,有人實現了一個,請參考 MAHOUT-1579

2、相似度

UserSimilarity 和 ItemSimilarity 相似度實現有以下幾種:

  • CityBlockSimilarity :基於Manhattan距離相似度
  • EuclideanDistanceSimilarity :基於歐幾里德距離計算相似度
  • LogLikelihoodSimilarity :基於對數似然比的相似度
  • PearsonCorrelationSimilarity :基於皮爾遜相關係數計算相似度
  • SpearmanCorrelationSimilarity :基於皮爾斯曼相關係數相似度
  • TanimotoCoefficientSimilarity :基於谷本系數計算相似度
  • UncenteredCosineSimilarity :計算 Cosine 相似度

3、最近鄰域

UserNeighborhood 主要實現有兩種:

  • NearestNUserNeighborhood:對每個用戶取固定數量N個最近鄰居
  • ThresholdUserNeighborhood:對每個用戶基於一定的限制,取落在相似度限制以內的所有用戶爲鄰居

4、推薦引擎

Recommender分爲以下幾種實現:

  • GenericUserBasedRecommender:基於用戶的推薦引擎
  • GenericBooleanPrefUserBasedRecommender:基於用戶的無偏好值推薦引擎
  • GenericItemBasedRecommender:基於物品的推薦引擎
  • GenericBooleanPrefItemBasedRecommender:基於物品的無偏好值推薦引擎

5、推薦系統評測

RecommenderEvaluator有以下幾種實現:

  • AverageAbsoluteDifferenceRecommenderEvaluator :計算平均差值
  • RMSRecommenderEvaluator :計算均方根差
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章