集合知プログラミング 2章 推薦を行う
協調フィルタリングの作り方。所謂レコメンドエンジンの作り方です。色々間違っている部分ありそうですが、自分の学習したことをつらつらと書いていきます。
1.嗜好の収集
利用者の行動を収集します。オンラインショッピングであれば、買った、閲覧した、買わなかった等です。例として映画の嗜好で作っています。縦軸がぽにょで、横軸がインディージョーンズです。それぞれ0〜10でポイントをつけて、0が好きではない、10が好きです。
hanako | 1 | 9 |
ichiro | 2 | 6 |
tom | 5 | 5 |
taro | 10 | 0 |
2.似ているユーザを探し出す
1のデータを元にユーザの類似性スコアを算出します。この方法は色々ありますが、ユークリッド距離、ピアソン相関、Jaccard係数、マンハッタン距離などがあるようです。
ユークリッド距離の場合
それぞれの軸上での差をとり、それぞれを乗じて足してた合計の平方根を使います。
ichiroは、(ぽにょ,インディー)=(2,6)。tomは、(ぽにょ,インディー)=(5,5)です。二人の距離は、以下のように求められます。値は0〜1の間をとり、1に近いほど嗜好が近いことを表します。
#ポニョ好き $x=(5-2)**2; #インディージョーンズ好き $y=(6-5)**2; #両者の距離 $s=1/(1+sqrt($x+$y)); print $s,"\n"; 0.240253073352042
ピアソン相関係数の場合
もう少し洗練された方法として、ピアソン相関係数を用いて計算することが出来ます。ピアソン相関係数のメリットは、評者の点数の付け方の傾向を吸収してくれます。たとえば、Aさんは、ぽにょをAさんの中での最高評価8を、インディーを最低評価2を付けました。Bさんは、ぽにょを最高の10でインディーを最低の0を付けました。ユークリッド距離では、両者の嗜好はズレていると出てきます。これに対してピアソン相関関数は直線の傾きで評価するため、ほぼ一致します。
計算の仕方は、両方の評者が得点を付けているアイテムを探しだします。そして、評者の評点の合計と、評点の平方の合計を算出します。そして評価をかけ合わせた値の合計を算出します。それを下記の数式に入れます。¥
※続きます