轉載自(http://www.geek521.com/?p=1423)程序員
Mahout推薦算法分爲如下幾大類算法
GenericUserBasedRecommendersql
算法:數據庫
1.基於用戶的類似度apache
2.相近的用戶定義與數量ide
特色:idea
1.易於理解rest
2.用戶數較少時計算速度快htm
GenericItemBasedRecommender接口
算法:
1.基於item的類似度
特色:
1.item較少時就算速度更快
2.當item的外部概念易於理解和得到是很是有用
SlopeOneRecommender(itemBased)
算法:
1基於SlopeOne算法(打分差別規則)
特色
速度快
須要預先計算
當item數目十分少了也頗有效
須要限制diffs的存儲數目不然內存增加太快
SVDRecommender (item-based)
算法
基於支持向量機(item的特徵以向量表示,每一個維度的評價值)
特色
須要預計算
推薦效果佳
KnnItemBasedRecommender (item-based)
相似於GenericUserBasedRecommender 中基於類似用戶的實現(基於類似的item)
與GenericItemBasedRecommender 的主要區別是權重方式計算的不一樣(but, the weights are not the results of some similarity metric. Instead, the algorithm calculates the optimal set of weights to use between all pairs of items=>看的費勁)
TreeClusteringRecommender
算法
基於樹形聚類的推薦算法
特色
用戶數目少的時候很是合適
計算速度快
須要預先計算
基於模型的推薦算法、基於滿意度得推薦算法(未實現)
Mahout中的數據輸入
DataModel
如下包含
GenericDataModel
數據接口類 基於內存
內部使用FastByIDMap 保存PreferenceArray,在PreferenceArray內保存用戶->Item的評價值
GenericBooleanPrefDataModel.
基於內存的數據接口類
可是無用戶偏好值
使用FastByIDMap<FastIDSet>爲用戶或者Item保存相關的Item或者用戶。
FileDataModel
基於文件的數據接口內,內部使用GenericDataModel 保存實際的用戶評價數據
增長了壓縮文件(.zip .gz)等文件類型的支持
支持動態更新(更新文件文件名必須保存爲必定的格式 例如 foo.txt.gz 後續更新文件必須爲foo.1.txt.gz)
查瞭如下代碼 好像是自定義時間間隔後能夠更新,可是好像是所有更新(之後看代碼)
JDBCDataModel
基於數據庫的數據接口 目前已經實現MySQLJDBCDataModel(支持MySQL 5.x)可使用MysqlDataSource生成MySQLJDBCDataModel
注:0.7版本里面沒有找到MySQLJDBCDataModel類多了一個MySQLJDBCIDMigrator
不知道關係如何
PlusAnonymousUserDataModel.
用於匿名用戶推薦的數據類 將所有匿名用戶視爲一個用戶(內部包裝其餘的DataModel類型)
Mahout中的類似度計算
主要按照基於User,基於Item等
GenericItemSimilarity包含內部類 GenericItemSimilarity.ItemItemSimilarity
GenericUserSimilarity包含內部類 GenericUserSimilarity.UserUserSimilarity
之內存方式保存類似度計算結果 使用FastByIDMap<FastByIDMap<Double>>保存計算結果
以cache方式保存類似度計算結果防止每次請求是重複計算
內部使用 Cache<LongPair,Double> similarityCache保存類似度
與 GenericUserSimilarity用法和區別暫時看不懂
Mathout中實現的基於不一樣算法類似度度量的:
PearsonCorrelationSimilarity 皮爾遜距離
EuclideanDistanceSimilarity 歐幾里德距離
CosineMeasureSimilarity 餘弦距離(0.7變成了 UncenteredCosineSimilarity)
SpearmanCorrelationSimilarity 斯皮爾曼等級相關
TanimotoCoefficientSimilarity 谷本相關係數
LogLikelihoodSimilarity 通常好於TanimotoCoefficientSimilarity(不懂)
CityBlockSimilarity基於曼哈頓距離
類似度使用的典型用法
UserSimilarity similarity = new CachingUserSimilarity(
new SpearmanCorrelationSimilarity(model), model);
對缺失數據的處理
PreferenceInferrer 數據丟失或者數據太少時可能用到 具體實現有 AveragingPreferenceInferrer 以平均值填充缺失數據
通常來講PreferenceInferrer除了增長計算量對推薦結果無任何影響(缺失值根據已有數據得出)因此通常只用於研究領域。
聚類的類似度
ClusterSimilarity
聚類的類似度用於兩個不一樣的聚類之間的距離(相似座標系內的距離)
目前聚類之間的距離計算只包含如下兩個實現(暫時沒有更好的實現算法)
NearestNeighborClusterSimilarity 計算兩個聚類中全部項距離中的最小距離
FarthestNeighborClusterSimilarity 計算兩個聚類中全部項距離中的最大距離
作個小推廣:程序員常常久坐,頸椎毛病比較多,特別推薦ventry頸椎保健枕