Home‎ > ‎Etc‎ > ‎

集合知プログラミング

集合知プログラミング
Toby Segaran
オライリージャパン
売り上げランキング: 447


080802_23_44
サンプルが Python というのはちとつらいが、非常に興味深い書籍だったりする。
統計とかについて、一から勉強するのも何だと思うのだけど、
アルゴリズムを含め、データの分析・解析・予測 といったことは
今の仕事にとっても、非常に重要なことだったりするので。

ざっと流し読んだけど、多分実際に触りながらじゃないと、身につかない気がするので、
サンプルやりながら再読する予定。

目次は、こっちでも見てくれ。
http://www.oreilly.co.jp/books/9784873113647/toc.html

2章
協調フィルタリング (レコメンドアルゴリズム) に含まれる手法のいくつかの紹介。
まずは、ユークリッド距離 が出てくる。

最初は、人と人の類似評価
つまり、Aという人が買った商品と評価のリストとBという人が買った商品と評価のリストをつきあわせて
AとBの類似性を ユークリッド距離で表現するというお話。

ちょっと、この説明で疑問に思ったこと。
リスト内の複数の項目が一致する場合、一致する項目が多ければ多いほど、
類似度が低くなってしまうのね。疎なデータには使いにくいのではないだろうか?

次は、同じデータに対して、ピアソン相関 を用いる。
こちらは、正規化されていないデータに用いる場合、ユークリッド距離よりも有利らしい。
一方が他方に比べて、緩い点数をつける傾向がある場合などでも調整してくれる感じ。
オークションの評価は5をつけるのが基本みたいになっているし、一方おいらは、自分の書評で5段階の5をつけることは
ほとんどなかったりする。まぁ、そのあたりが共通認識されるようなものであればいいけど、モノによっては、人によって解釈や使い方まちまちというのも多い気がするしね。

他にも類似性評価のための指標として、
Jaccard係数、マンハッタン距離 といったものがある。

http://en.wikipedia.org/wiki/Metric_(mathematics)#Example
ここ、読めらしい。

で、ここまでは、人と人の類似評価だったわけだけど、目的は商品のリコメンドであったりする。
いままでのところで、人の評価の類似度に関する順位付けはできるので、
その順位付けを評価に対する重みとして使ってアイテムのスコアに換算するというお話。

人にひもづく商品のリストがあるならば、これは簡単に商品にひも尽く人のリストに変換できる。
で、商品について先ほどまで行った評価を行えば、商品同士の類似度の算出が可能になると言うわけ。

類似性×評価 の平均をとるということになる。
ここまでで、最初の原理の部分はおしまい。

さて、最後の商品同士の類似度集計を、すべての商品についてあらかじめ行っておくことで、
商品ベースのリコメンドが簡単に行えるようになる。
この利点は、ユーザの数が増加すると顕著で、計算に必要な時間がほとんどかからないこと。
逆にデメリットしては、商品ベースのデータセットを時々メンテナンスする必要があることくらい。

宿題
Tanimoto係数
http://cheminformatics.seesaa.net/article/23020232.html
http://www.sccj.net/publications/JCCJ/v2n4/a11/textj.html
http://ibisforest.org/index.php?%E4%BA%8C%E5%80%A4%E5%A4%89%E6%95%B0
Jaccard係数 の生・化学分野での呼び方?同名の別定義のモノもあるみたい。














Comments