}
});
}
};
SequenceSet minusInit = sOrigMinus.new SequenceSet();minusInit.setIdentity();minusInit.cross(minusTrainingSet);
int totalLenOrig = 0, origNumber=0;
for(List<String> seq:minusTrainingSet)
{
assert seq.size() > 1;
assert graph.getVertex(seq) == null;// the seq is negative indeed
assert graph.getVertex(seq.subList(0, seq.size()-1)) != null;// the -1 prefix is positive
assert sOrigMinus.containsSequence(seq);// make sure PTA construction did not fumble.
assert graph.paths.tracePath(seq) == seq.size()-1;// and another check that a -1 prefix is ok
totalLenOrig+=seq.size();origNumber++;
}
assert sOrigMinus.getData().size() == 0;// all negatives
/* Builds the new set. */
PTASequenceEngine sNewMinus = rpg.getAllSequences(percent/10-1);
int totalLenNew = 0, newNumber = 0;
for(List<String> seq:sNewMinus.getData(PTASequenceEngine.truePred))
{
assert seq.size() > 1;
assert graph.getVertex(seq) == null;
assert graph.getVertex(seq.subList(0, seq.size()-1)) != null;
assert graph.paths.tracePath(seq) == seq.size()-1;
totalLenNew+=seq.size();newNumber++;
}
// 22,23
String comparison = "Orig ave len: "+FS+((double)totalLenOrig)/origNumber+FS+
// 24,25
" new ave len: "+FS+((double)totalLenNew)/newNumber+FS+
// 26,27
" fudge status: "+FS+rpg.getFudgeDetails();
//int numberOfMinusSequences = minusTrainingSet.size();
assert sNewMinus.getData().size() == 0;// all negatives
if (config.getLearnerToUse() == LEARNER.LEARNER_BLUEFRINGE_DEC2007)
sMinus = sOrigMinus;
else
sMinus = sNewMinus;
RPNIBlueFringeLearner l = null;
if (config.getLearnerToUse() == LEARNER.LEARNER_BLUEAMBER_MAY2008)
{
l = new RPNIBlueAmberFringeLearner(null,config)
{
@Override
protected Pair<Integer,String> checkWithEndUser(
@SuppressWarnings("unused") LearnerGraph model,
List<String> question,
@SuppressWarnings("unused") final Object [] moreOptions)
{
questionNumber.addAndGet(1);
return new Pair<Integer,String>(graph.paths.tracePath(question),null);
}
};
}
else
{
l = new RPNIBlueFringeLearnerTestComponentOpt(null,config)
{
@Override
protected Pair<Integer,String> checkWithEndUser(
@SuppressWarnings("unused") LearnerGraph model,
List<String> question,
@SuppressWarnings("unused") final Object [] moreOptions)
{
questionNumber.addAndGet(1);
return new Pair<Integer,String>(graph.paths.tracePath(question),null);
}
};
}
RecordProgressDecorator recorder = null;
try {
recorder = new RecordProgressDecorator(l.getLearner(),new java.io.FileOutputStream(getFileName(FileType.LOG)),1,config,true);
} catch (IOException e) {
statechum.Helper.throwUnchecked("could not open log file for writing", e);
}
Collection<List<String>> graphTestSet = graph.wmethod.getFullTestSet(1);
recorder.writeLearnerEvaluationData(new ProgressDecorator.LearnerEvaluationConfiguration(graph,graphTestSet,config,null));
l.getLearner().setTopLevelListener(recorder);
learnt = learn(recorder,sMinus);
//learned = new LearnerGraph(config);
PTASequenceEngine testSetEngine = new PTA_FSMStructure(graph);
SequenceSet ptaTestSet = testSetEngine.new SequenceSet();ptaTestSet.setIdentity();
ptaTestSet.cross(graphTestSet);
PTA_computePrecisionRecall precRec = new PTA_computePrecisionRecall(learnt);
PosNegPrecisionRecall ptaPR = precRec.crossWith(sMinus);
PosNegPrecisionRecall prNeg = precRec.crossWith(testSetEngine);