diff options
Diffstat (limited to 'src/Chapter4/util/EigenVectorScorer.java')
-rw-r--r-- | src/Chapter4/util/EigenVectorScorer.java | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/src/Chapter4/util/EigenVectorScorer.java b/src/Chapter4/util/EigenVectorScorer.java deleted file mode 100644 index da0c1a8..0000000 --- a/src/Chapter4/util/EigenVectorScorer.java +++ /dev/null @@ -1,64 +0,0 @@ -package Chapter4.util; - -import GraphElements.RetweetEdge; -import GraphElements.UserNode; -import cern.colt.matrix.DoubleMatrix2D; -import cern.colt.matrix.impl.SparseDoubleMatrix2D; -import cern.colt.matrix.linalg.EigenvalueDecomposition; -import edu.uci.ics.jung.algorithms.scoring.VertexScorer; -import edu.uci.ics.jung.graph.Hypergraph; - -/** - * This is a Jung Node Scorer that computes the Eigenvector Centrality for each node. - */ -public class EigenVectorScorer implements VertexScorer<UserNode, Double> { - - private UserNode[] users; - private DoubleMatrix2D eigenVectors; - private int dominantEigenvectorIdx; - - public EigenVectorScorer(Hypergraph<UserNode, RetweetEdge> graph){ - users = new UserNode[graph.getVertexCount()]; - graph.getVertices().toArray(users); - - /* Step 1: Create the adjacency matrix. - * - * An adjacency matrix is a matrix with N users and N columns, - * where N is the number of nodes in the network. - * An entry in the matrix is 1 when node i connects to node j, - * and 0 otherwise. - */ - SparseDoubleMatrix2D matrix = new SparseDoubleMatrix2D(users.length, users.length); - for(int i = 0; i < users.length; i++){ - for(int j = 0; j < users.length; j++){ - matrix.setQuick(i, j, graph.containsEdge(new RetweetEdge(users[i], users[j])) ? 1 : 0); - } - } - - /* Step 2: Find the principle eigenvector. - * For more information on eigen-decomposition please see - * http://mathworld.wolfram.com/EigenDecomposition.html - */ - EigenvalueDecomposition eig = new EigenvalueDecomposition(matrix); - DoubleMatrix2D eigenVals = eig.getD(); - eigenVectors = eig.getV(); - - dominantEigenvectorIdx = 0; - for(int i = 1; i < eigenVals.columns(); i++){ - if(eigenVals.getQuick(dominantEigenvectorIdx, dominantEigenvectorIdx) < - eigenVals.getQuick(i, i)){ - dominantEigenvectorIdx = i; - } - } - } - - public Double getVertexScore(UserNode arg0) { - for(int i = 0; i < users.length; i++){ - if(users[i].equals(arg0)){ - return Math.abs(eigenVectors.getQuick(i, dominantEigenvectorIdx)); - } - } - return null; - } - -} |