Mahout推薦算法基礎

轉載自(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>>保存計算結果

 

CachingItemSimilarity

CachingUserSimilarity

以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頸椎保健枕

相關文章
相關標籤/搜索