TrustRank in Java(using WebGraph)
TrustRank is a biased PageRank method, which starts from some good seeds to propagate trust. It is very easy to implement based on PageRank.
I implement it in Java using the WebGraph and LAW jar package, following is the code:
If you hava any question, please just put a review, or contact me by e-mail./*
* TrustRank implement*/package cn.edu.dlut.wisdom;
import it.unimi.dsi.law.rank.PageRank;
import it.unimi.dsi.law.rank.PageRankPowerMethod;
import it.unimi.dsi.law.rank.PageRank.IterationNumberStoppingCriterion;
import it.unimi.dsi.law.rank.PageRank.NormDeltaStoppingCriterion;
import it.unimi.dsi.webgraph.*;
import it.unimi.dsi.fastutil.doubles.*;
import it.unimi.dsi.fastutil.ints.IntSet;
/**
** @author You Wang*/public class TrustRank {/**
* Graph on which TR will run*/private ImmutableGraph g;
/**
* PageRank implementation*/private PageRankPowerMethod pr;
/**
* to be used as stopping criterion*/private double threshold = PageRank.DEFAULT_THRESHOLD;/**
* number of iteration*/private int numberOfIteration = PageRank.DEFAULT_MAX_ITER;private double alpha = PageRank.DEFAULT_ALPHA;/**
** @param g Graph on which TR will run*/public TrustRank(ImmutableGraph g) {
this.g = g;
pr = new PageRankPowerMethod(g);
}public void setThreshold(double t) {threshold = t;}public void setAlpha(double alpha) {this.alpha = alpha;
}public void setIteration(int n) {numberOfIteration = n;}public double[] getRank() {return pr.rank;
}/**
* set the biased good seeds* @param seeds*/public void setGoodSeeds(IntSet seeds) {int numNodes = g.numNodes();
double[] arr = new double[numNodes];int seedSize = seeds.size();
for (int i = 0; i < numNodes; i++)if (seeds.contains(i))
arr[i] = 1/seedSize;pr.start = DoubleArrayList.wrap(arr);}/**
* compute the TR scores* @throws Exception*/public void compute() throws Exception {pr.alpha = alpha;pr.stepUntil(PageRank.or(new NormDeltaStoppingCriterion(threshold),
new IterationNumberStoppingCriterion(numberOfIteration)));
}}
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名小橋流水(包含链接)。如您有任何疑问或者授权方面的协商,请给我发邮件。