- 作者: Toby Segaran,當山仁健,鴨澤眞夫
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/07/25
- メディア: 大型本
- 購入: 91人 クリック: 2,220回
- この商品を含むブログ (277件) を見る
Pythonのコードが載っているそうだけど、自分でやるならR言語で書き直すことになる。
ググってみるとすでに R で書こうとしている方(id:mrkn:20080725:collective_intelligence_in_gnu_r)や Perl で書いている方(id:ksmemo:20080804:p1)、Rubyで書いている方々(id:ma2:20071016:p1、id:mrkn:20080722)などが見つかった。どちらも類似性の高い評者を抽出するしくみの箇所らしい。
私がRで書くならこんな感じかな。
# データの用意 Lisa.Rose <- c(2.5, 3.5, 3.0, 3.5, 2.5, 3.0) Gene.Seymour <- c(3.0, 3.5, 1.5, 5.0, 3.5, 3.0) Michael.Phillips <- c(2.5, 3.0, NA, 3.5, NA, 4.0) Claudia.Puig <- c(NA, 3.5, 3.0, 4.0, 2.5, 4.5) Mick.LaSalle <- c(3.0, 4.0, 2.0, 3.0, 2.0, 3.0) Jack.Matthews <- c(3.0, 4.0, NA, 5.0, 3.5, 3.0) Toby <- c(NA, 4.5, NA, 4.0, 1.0, NA) critics <- cbind(Lisa.Rose, Gene.Seymour, Michael.Phillips, Claudia.Puig, Mick.LaSalle, Jack.Matthews, Toby) rownames(critics)<- c("Lady.in.the.Water", "Snakes.on.a.Plane", "Just.My.Luck", "Superman.Returns", "You.Me.and.Dupree", "The.Night.Listener") critics # 類似性スコアの算出 (critics.dist <- 1/(1+dist(t(critics))^2)) # 相関係数の算出 (critics.cor <- cor(critics, use="pairwise.complete.obs")) # 類似性スコアから"Toby"にマッチするもの上位三つ head(sort(as.matrix(critics.dist)[,"Toby"], decreasing=TRUE)[-ncol(critics)],3) # 相関係数から"Toby"にマッチするもの上位三つ head(sort(critics.cor[,"Toby"], decreasing=TRUE)[-1],3)
気が向いたらデータはcsvファイルから読み込んで、処理は一つの関数にまとめるようにしてみる。
それと、理屈でいえばピアソンの積率相関係数よりもスピアマンの順位相関係数のほうが適切なはずだからそれを試してみる。類似性スコアもユークリッドだけじゃなくてマンハッタン距離やキャンベラ距離、ミンコフスキー距離も試してみたい。