Contenu connexe Similaire à Collaborativefilteringwith r (20) Plus de Teito Nakagawa (8) Collaborativefilteringwith r10. 協調フィルタリングを
実装しているライブラリ
ソフトウェア名 言語 URL
Apache Mahout Java http://mahout.apache.org 並列分散処理
Cofi Java http://www.nongnu.org/cofi/ オワタ
Crab Python https://github.com/murioca/cra
b
お手軽
Easyrec Java http://easyrec.org 登録必要
LensKit Java http://lenslit.grouplens.org/ 新しい
MyMediaLite C# http://mloss.org/software/view
/282/
シンプルらしい
SVDFeature C++ http://mloss.org/software/view
/333
特異値分解に特化
Vogoo PHP LIB PJP http://sourceforge.net/projects/
vogoo/
日本語情報多数
DB要
13. 1.1.ユーザ(アイテム)間
類似性の計算
Uu
viv
Uu
uiu
Ii
vivuiu
vu
rrrr
rrrr
w
2
,
2
,
,,
,
)()(
))((
1.ピアソン相関係数類似性
2.コサインベクトル類似性
Ii
iv
Ii
iu
Ii
iviu
vu
rr
rr
w
2
,
2
,
,,
,
)(
例:ユーザ間の類似性の計算
5312
44
423
124
55?4
vuw ,
1
アクティブ
ユーザ
Uu
Ii
予測に用いる、基礎データとして類似性を計測する
34. データの整形
as(Jester5k[1:10], "matrix")[1:2, 1:2]
# j1 j2
# u2841 7.91 9.17
# u15547 -3.20 -3.50
#二値データ化
as(binarize(Jester5k[1:10], minRating=-3.2), "matrix")[1:2, 1:2]
# j1 j2
# [1,] 1 1
# [2,] 1 0
as(binarize(Jester5k[1:10], minRating=-3.5), "matrix")[1:2, 1:2]
# j1 j2
# [1,] 1 1
# [2,] 1 1
#正規化を行う
as(normalize(Jester5k[1:10], method="center", row=TRUE), "matrix")[1:2, 1:2]
#j1 j2
#u2841 4.0548148 5.3148148
#u15547 -0.4180282 -0.7180282
ユーザ2841と15547のジョー
ク1,2に対する評価を確認
binarize
二値行列化
normalize
正規化
40. レコメンデーションの評価
#評価スキーマを作成する(K交差検証法を行う)
es<-evaluationScheme(Jester5k[1:1000], method="cross", k=4, goodRating=5)
results<-evaluate(es, method="POPULAR", n=c(1,3,5,10,15,20))
# POPULAR run
# 1 [0.03sec/0.59sec]
# 2 [0.04sec/0.61sec]
# 3 [0.03sec/0.59sec]
# 4 [0.03sec/0.56sec]
#混同行列の取得
getConfusionMatrix(results)[[1]]
# n TP FP FN TN PP recall precision FPR TPR
# 1 0.452 0.548 17.712 78.288 1 0.02488439 0.4520 0.006951139 0.02488439
# 3 1.200 1.800 16.964 77.036 3 0.06606474 0.4000 0.022832209 0.06606474
# 5 2.024 2.976 16.140 75.860 5 0.11142920 0.4048 0.037749252 0.11142920
# 10 3.868 6.132 14.296 72.704 10 0.21294869 0.3868 0.077781724 0.21294869
# 15 5.652 9.348 12.512 69.488 15 0.31116494 0.3768 0.118575270 0.31116494
# 20 7.204 12.796 10.960 66.040 20 0.39660868 0.3602 0.162311634 0.39660868
evaluationScheme
評価スキーマを作成
method
split データを分割
cross k交差検証法
bootstrap ブートストラップ
evaluate
評価の実行
getConfusion
Matrix
混同行列の
作成
41. レコメンデーションの評価
#評価スキーマを作成する(3つのアルゴリズムを比較する。)
es2<-evaluationScheme(Jester5k[1:1000], method="split", k=4, train=0.85, goodRating=5)
algorithms <- list(
"random items" = list(name="RANDOM", param=NULL),
"popular items" = list(name="POPULAR", param=NULL),
"user-based CF" = list(name="UBCF", param=list(method="Cosine",nn=50, minRating=5))
)
#結果を評価する。
results2<-evaluate(es2, algorithms, n=c(1:8))
# RANDOM run
# 1 [0sec/0.39sec]
# 2 [0sec/0.36sec]
# 3 [0sec/0.39sec]
# 4 [0.01sec/0.39sec] POPULAR run
# 1 [0.04sec/0.34sec]
# 2 [0.03sec/0.33sec]
# 3 [0.04sec/0.32sec]
# 4 [0.04sec/0.33sec] UBCF run
# 1 [0.01sec/5.59sec]
# 2 [0.01sec/5.43sec]
# 3 [0.02sec/5.42sec]
# 4 [0.03sec/5.43sec]
44. まとめ
カテゴリ 代表的な手法 長所 短所
メモリベース協調
フィルタリング
•類似ユーザベース協調フィルタリング
•Top-Nレコメンデーション
•実装が容易
•データの追加が簡単
•コンテンツの内容について
の考慮が不要
•共に評価されたアイテムの
スケーリングが容易
•人の評価への依存
•疎なデータでの性能悪さ
•新ユーザとアイテムをレコメ
ンデーションが不可能
•スケーラビリティ
モデルベース協
調フィルタリング
•ベイジアンネットワーク協調フィルタリング
•クラスタリング協調フィルタリング
•潜在意味協調フィルタリング
•粗因子分析
•次元削減を用いた協調フィルタリング
•疎なデータへの対応がよい
•予測性能の向上
•直感的な説明を与える
•モデルの構築が複雑
•予測性能とパフォーマンス
のトレードオフ
•次元削減により有益な情報
を失う
ハイブリッド協調
フィルタリング
•コンテントベース協調フィルタリング
•コンテントブーステッド協調フィルタリング
•メモリベースとモデルベースのハイブリッ
ド協調フィルタリング
•それぞれの協調フィルタリ
ングの問題を克服可能
•予測性能の古城
•データのスパース性や灰色
の羊に対応可能
•実装が複雑
•外部の情報が必要
45. 参考
• 協調フィルタリングのサーベイ論文
– A Survey of Collaborative Filtering Techniques
(Xiaoyuan Su and Taghi M. Khoshgoftaar,Advances in Artificial Intelligence
Volume 2009 (2009), Article ID 421425,)
• Recommenderlabの作者によるチュートリアル
http://cran.r-
project.org/web/packages/recommenderlab/vignettes/recommenderlab.pdf
Notes de l'éditeur あるCに関して