protected void cleanUpEdges(double significanceThreshold, double correlationThreshold) { for (int x = 0; x < graph.getNumberOfInitialNodes(); x++) { for (int y = 0; y < graph.getNumberOfInitialNodes(); y++) { if (graph.getNodeMappedTo(x) == null || graph.getNodeMappedTo(y) == null || (graph.getBinarySignificance(x, y) < significanceThreshold && graph.getBinaryCorrelation(x, y) < correlationThreshold)) { graph.setBinarySignificance(x, y, 0.0); graph.setBinaryCorrelation(x, y, 0.0); } } } }
protected boolean shouldMergeWith(Node node, ClusterNode cluster) { if (cluster.getPrimitives().size() == 0) { return true; // always add first node } if (cluster.isDirectlyConnectedTo(node) == true && cluster.contains(node) == false) { double ownSignificance = 0.0; double otherSignificance = 0.0; double ownCorrelation = 0.0; double otherCorrelation = 0.0; // aggregate correlation and significance of edges between the node // in // question and connected nodes, separately for edges to/from // cluster and // to/from other nodes. for (int i = 0; i < graph.getNumberOfInitialNodes(); i++) { if (i == node.getIndex()) { continue; // ignore self-references } if (cluster.contains(graph.getPrimitiveNode(i))) { ownSignificance += graph.getBinarySignificance(node.getIndex(), i); ownSignificance += graph.getBinarySignificance(i, node.getIndex()); ownCorrelation += graph.getBinaryCorrelation(node.getIndex(), i); ownCorrelation += graph.getBinaryCorrelation(i, node.getIndex()); } else { otherSignificance += graph.getBinarySignificance(node.getIndex(), i); otherSignificance += graph.getBinarySignificance(i, node.getIndex()); otherCorrelation += graph.getBinaryCorrelation(node.getIndex(), i); otherCorrelation += graph.getBinaryCorrelation(i, node.getIndex()); } } // make a decision return (ownCorrelation > otherCorrelation || ownSignificance > otherSignificance); } else { // no connection - no merge. return false; } }