svmParms.setWeights(EvaluationUtils.computeWeights(target));
//---------
//---------
// Results Table
ResultsTable resTable = new ResultsTable();
resTable.setDigits(3);
//---------
//-------
//Data graph, with the label information
List<Statement> allStmts3 = GraphUtils.getStatements4Depth(dataset, instances, 4, false);
List<Statement> allStmts4;
if (fullGraph) {
allStmts4 = dataset.getStatements(null, null, null, false);
} else {
allStmts4 = GraphUtils.getStatements4Depth(dataset, instances, 5, false);
}
allStmts3.removeAll(blackList);
allStmts4.removeAll(blackList);
DTGraph<String,String> graph3 = org.nodes.data.RDF.createDirectedGraph(allStmts3, null, null); //used to generate instances
DTGraph<String,String> graph4 = org.nodes.data.RDF.createDirectedGraph(allStmts4, null, null); //Used to find hubs
System.out.println("Total nodes d3: " + graph3.nodes().size() + ", total nodes d4: " + graph4.nodes().size());
List<DTNode<String,String>> instanceNodes3 = new ArrayList<DTNode<String,String>>();
List<DTNode<String,String>> instanceNodes4 = new ArrayList<DTNode<String,String>>();
for (Resource i : instances) {
instanceNodes3.add(graph3.node(i.toString()));
instanceNodes4.add(graph4.node(i.toString()));
}
//--------
//--------
// Get the different hub lists
int maxHubs = 1000;
// RDF.Type hubs
List<DTNode<String,String>> RDFTypeHubs = GraphUtils.getTypeHubs(graph4);
// Regular Degree
Comparator<Node<String>> compRegDeg = new DegreeComparator<String>();
MaxObserver<Node<String>> obsRegDeg = new MaxObserver<Node<String>>(maxHubs + instances.size(), compRegDeg);
obsRegDeg.observe(graph4.nodes());
List<DTNode<String,String>> regDegreeHubs = new ArrayList<DTNode<String,String>>();
for (Node<String> n : obsRegDeg.elements()) {
regDegreeHubs.add((DTNode<String,String>) n);
}
// Signature Degree
Comparator<DTNode<String,String>> compSigDeg = new SlashBurn.SignatureComparator<String,String>();
MaxObserver<DTNode<String,String>> obsSigDeg = new MaxObserver<DTNode<String,String>>(maxHubs + instances.size(), compSigDeg);
obsSigDeg.observe(graph4.nodes());
List<DTNode<String,String>> sigDegreeHubs = new ArrayList<DTNode<String,String>>(obsSigDeg.elements());
// Informed Degree
List<Integer> classes = new ArrayList<Integer>();
for (double d : target) {
classes.add((int) d);
}
Classified<DTNode<String, String>> classified = Classification.combine(instanceNodes4, classes);
InformedAvoidance ia = new InformedAvoidance(graph4, classified, 4);
Comparator<DTNode<String, String>> compUnInformed = ia.uninformedComparator(4);
MaxObserver<DTNode<String,String>> obsUnInformed = new MaxObserver<DTNode<String,String>>(maxHubs + instances.size(), compUnInformed);
obsUnInformed.observe(graph4.nodes());
List<DTNode<String,String>> unInformedDegreeHubs = new ArrayList<DTNode<String,String>>(obsUnInformed.elements());
Iterator<DTNode<String, String>> ite = unInformedDegreeHubs.iterator();
while(ite.hasNext())
if(! ia.viableHub(ite.next(), 4, 4))
ite.remove();
Comparator<DTNode<String, String>> compInformed = ia.informedComparator(4);
MaxObserver<DTNode<String,String>> obsInformed = new MaxObserver<DTNode<String,String>>(maxHubs + instances.size(), compInformed);
obsInformed.observe(graph4.nodes());
List<DTNode<String,String>> informedDegreeHubs = new ArrayList<DTNode<String,String>>(obsInformed.elements());
ite = informedDegreeHubs.iterator();
while(ite.hasNext())
if(! ia.viableHub(ite.next(), 4, 4))
ite.remove();
// Remove hubs from list that are root nodes
List<DTNode<String,String>> rn = new ArrayList<DTNode<String,String>>();
Set<String> is = new HashSet<String>();
for (Resource r : instances) {
is.add(r.toString());
}
for (DTNode<String,String> n : graph4.nodes()) {
if (is.contains(n.label())) {
rn.add(n);
}
}
RDFTypeHubs.removeAll(rn);
regDegreeHubs.removeAll(rn);
sigDegreeHubs.removeAll(rn);
unInformedDegreeHubs.removeAll(rn);
informedDegreeHubs.removeAll(rn);
List<List<DTNode<String,String>>> hubLists = new ArrayList<List<DTNode<String,String>>>();
hubLists.add(RDFTypeHubs);
hubLists.add(regDegreeHubs);
hubLists.add(sigDegreeHubs);
//hubLists.add(unInformedDegreeHubs);
//hubLists.add(informedDegreeHubs);
boolean forward = true;
int it = 6;
int depth = 3;
int[] hubThs = {0,1,2,3,4,5,10,20,30,40,50,100};
//int[] hubThs = {};
MoleculeGraphExperiment<DTGraph<String,String>> exp;
/*
int[] iterations = {0,1,2,3,4,5,6};
for (int i : iterations) {
resTable.newRow("Baseline: " + i);
List<DTNode<String,String>> newIN = new ArrayList<DTNode<String,String>>(instanceNodes3);
exp = new MoleculeGraphExperiment<DTGraph<String,String>>(new WLSubTreeKernel(i, true, forward),
seeds, svmParms, GraphUtils.getSubGraphs(graph3, newIN, depth), target, evalFuncs);
System.out.println("running baseline, it: " + i);
exp.run();
for (Result res : exp.getResults()) {
resTable.addResult(res);
}
}
System.out.println(resTable);
*/
for (int th : hubThs) {
resTable.newRow("Hub Threshold: " + th);
for (List<DTNode<String,String>> hubList : hubLists) {
List<List<DTNode<String,String>>> newIN = new ArrayList<List<DTNode<String,String>>>();
List<DTGraph<String,String>> newGs = GraphUtils.simplifyGraph3Way(graph3, GraphUtils.createHubMap(hubList, th), instanceNodes3, newIN);
///*
//List<DTNode<String,String>> newIN = new ArrayList<DTNode<String,String>>(instanceNodes3);
//DTGraph<String,String> newG = GraphUtils.simplifyGraph(graph3, GraphUtils.createHubMap(hubList, th), newIN, false, true);
//System.out.println("New #links: "+ newG.numLinks() + ", old #links: " + graph3.numLinks());
exp = new MoleculeGraphExperiment<DTGraph<String,String>>(new WLSubTreeKernel(it, true, forward),
seeds, svmParms, GraphUtils.getSubGraphs(newGs.get(0), newIN.get(0), depth), target, evalFuncs);
System.out.println("running, remove hubs, th: " + th);
exp.run();
for (Result res : exp.getResults()) {
resTable.addResult(res);
}
//newIN = new ArrayList<DTNode<String,String>>(instanceNodes3);
//newG = GraphUtils.simplifyGraph(graph3, GraphUtils.createHubMap(hubList, th), newIN, true, false);
//System.out.println("New #links: "+ newG.numLinks() + ", old #links: " + graph3.numLinks());
exp = new MoleculeGraphExperiment<DTGraph<String,String>>(new WLSubTreeKernel(it, true, forward),
seeds, svmParms, GraphUtils.getSubGraphs(newGs.get(1), newIN.get(1), depth), target, evalFuncs);
System.out.println("running, relabel hubs, th: " + th);
exp.run();
for (Result res : exp.getResults()) {
resTable.addResult(res);
}
//newIN = new ArrayList<DTNode<String,String>>(instanceNodes3);
//newG = GraphUtils.simplifyGraph(graph3, GraphUtils.createHubMap(hubList, th), newIN, true, true);
//System.out.println("New #links: "+ newG.numLinks() + ", old #links: " + graph3.numLinks());
exp = new MoleculeGraphExperiment<DTGraph<String,String>>(new WLSubTreeKernel(it, true, forward),
seeds, svmParms, GraphUtils.getSubGraphs(newGs.get(2), newIN.get(2), depth), target, evalFuncs);
System.out.println("running, relabel+remove hubs, th: " + th);
exp.run();
for (Result res : exp.getResults()) {
resTable.addResult(res);
}
//*/
}
System.out.println(resTable);
}
resTable.addCompResults(resTable.getBestResults());
System.out.println(resTable);
System.out.println(resTable.allScoresToString());
saveResults(resTable.toString(), "results_simp_" + System.currentTimeMillis() + ".txt");
saveResults(resTable.allScoresToString(), "results_full_simp_" + System.currentTimeMillis() + ".txt");
/*
* INSTANCE EXTRACTION!!!!! ah yeah ;)
*
*/
// Discover average size
List<DTGraph<String,String>> sg = GraphUtils.getSubGraphs(graph3, new ArrayList<DTNode<String,String>>(instanceNodes3), 3);
double avg = 0;
for (DTGraph<String,String> sgp : sg) {
avg += sgp.size();
}
avg /= sg.size();
System.out.println("Average Number of nodes: " + avg);
// Results Table
ResultsTable resTable2 = new ResultsTable();
resTable2.setDigits(3);
double[] fracs = {0.25, 0.5, 0.75, 1.0, 1.5, 2.0};
for (double frac : fracs) {
resTable2.newRow("Fraction: " + frac);
List<DTGraph<String,String>> ihDepth = InstanceHelper.getInstances(graph4, instanceNodes4, target, InstanceHelper.Method.DEPTH, (int) Math.round(frac*avg), 4, true);
exp = new MoleculeGraphExperiment<DTGraph<String,String>>(new WLSubTreeKernel(it, true, forward), seeds, svmParms, ihDepth, target, evalFuncs);
System.out.println("running, Depth: " + frac);
exp.run();
for (Result res : exp.getResults()) {
resTable2.addResult(res);
}
List<DTGraph<String,String>> ihUnInformed = InstanceHelper.getInstances(graph4, instanceNodes4, target, InstanceHelper.Method.UNINFORMED, (int) Math.round(frac*avg), 4, true);
exp = new MoleculeGraphExperiment<DTGraph<String,String>>(new WLSubTreeKernel(it, true, forward), seeds, svmParms, ihUnInformed, target, evalFuncs);
System.out.println("running, UnInformed: " + frac);
exp.run();
for (Result res : exp.getResults()) {
resTable2.addResult(res);
}
List<DTGraph<String,String>> ihInformed = InstanceHelper.getInstances(graph4, instanceNodes4, target, InstanceHelper.Method.INFORMED, (int) Math.round(frac*avg), 4, true);
exp = new MoleculeGraphExperiment<DTGraph<String,String>>(new WLSubTreeKernel(it, true, forward), seeds, svmParms, ihInformed, target, evalFuncs);
System.out.println("running, Informed: " + frac);
exp.run();
for (Result res : exp.getResults()) {
resTable2.addResult(res);
}
System.out.println(resTable2);
}
resTable2.addCompResults(resTable2.getBestResults());
System.out.println(resTable2);
System.out.println(resTable2.allScoresToString());
saveResults(resTable2.toString(), "results_ie_" + System.currentTimeMillis() + ".txt");
saveResults(resTable2.allScoresToString(), "results_full_ie_" + System.currentTimeMillis() + ".txt");
}