基於用戶的推薦和基於物品的推薦java
兩種算法,均依賴於兩個事物(用戶或物品)之間的類似性度量(等同性定義),類似性度量的方法:PearsonCorrealation皮爾遜相關係數,對數似然值Loglikelihood,斯皮爾曼相關係數SpearmanCorrelation,谷本系數TanimotoCoefficient等。算法
推薦算法:Slope-one,基於SVD和基於聚類的推薦算法。rest
基於用戶的推薦:blog
代碼示例:ci
public static void main(String[] args) throws Exception { //裝載數據文件,實現存儲,併爲計算提供所需的全部偏好,用戶和物品數據 DataModel model = new FileDataModel(new File("data/intro.csv")); //用戶類似度,給出兩個用戶的類似度,有多種度量方式,封裝了用戶間類似性的概念 UserSimilarity similarity = new PearsonCorrelationSimilarity(model); //用戶鄰居,與給定用戶最類似的一組用戶,封裝了最類似用戶組的概念 UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model); //推薦引擎,合併這些組件,實現推薦 Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); //爲用戶1推薦一件物品1,1 List<RecommendedItem> recommendedItems = recommender.recommend(1, 1); //輸出 for (RecommendedItem item : recommendedItems) { System.out.println(item); } }
引入新的類似性度量,結果就會發生顯著的變化。mahout推薦是由 多個組件搭配而成,而非單一的推薦引擎,其餘各個組件的組合能夠定製,從而針對特定應用提供理想的推薦。it
一、數據模型,有datamodel實現io
2.用戶間的類似性度量,由usersimilarity實行class
3.用戶鄰域的定義,有userneighborhood實現sed
4.推薦引擎,由一個recommender實現(此處爲GenericUserBasedRecommender)List