PageRankの計算
Posted feedbacks - R
殆どそのまんまです。
calcpr(matrix(c(0,1,1,1,1,0,1
,1,0,0,0,0,0,0
,1,1,0,0,0,0,0
,0,1,1,0,1,0,0
,1,0,1,1,0,1,0
,1,0,0,0,1,0,0
,0,0,0,0,1,0,0),7,7,byrow=1));
1 2 3 4 5 6 7 | calcpr=function(mat) {
nx <- t(x/ apply(mat, 1,sum));
ex <- eigen(nx);
eva<- abs(ex$value);
ev <- t(ex$vector)[eva== max(eva)];
abs(ev/sum(ev));
}
|
以下でよいと思います
1 2 3 4 5 | calcpr=function(mat) {
ev <- eigen(t(mat/ rowSums(mat)))$vector[,1]
abs(ev/sum(ev))
}
calcpr(mat)
|


ところてん
#3404()
Rating0/0=0.00
詳しい導出方法はGoogle の秘密 - PageRank 徹底解説の3章に載っていますが、 簡単に説明すると
という流れになります。
Pythonで表現すると下のようになります。 ?????の部分は空行を入れて10行でしたので 何百行ものコードになってしまった場合は きっとお題の趣旨から外れていると思います。 このお題の趣旨は「行列計算ライブラリを使って」PageRankを計算することなので、 自力で固有値の計算を実装することは求められていません。
data = { 1: [2, 3, 4, 5, 7], 2: [1], 3: [1, 2], 4: [2, 3, 5], 5: [1, 3, 4, 6], 6: [1, 5], 7: [5], } ????? print pagerank # [0.303514376997, 0.166134185304, 0.140575079872, # 0.105431309904, 0.178913738019, 0.0447284345048, # 0.0607028753994]このお題はところてんさんの「行列演算系のお題が欲しい」という要望を元に考えたものです。ありがとうございました。[ reply ]