FastVector o = null;
if (selectedName != null) {
o = (FastVector)m_History.getNamedObject(selectedName);
}
VisualizePanel temp_vp = null;
String temp_grph = null;
FastVector temp_preds = null;
Attribute temp_classAtt = null;
Classifier temp_classifier = null;
Instances temp_trainHeader = null;
if (o != null) {
for (int i = 0; i < o.size(); i++) {
Object temp = o.elementAt(i);
if (temp instanceof Classifier) {
temp_classifier = (Classifier)temp;
} else if (temp instanceof Instances) { // training header
temp_trainHeader = (Instances)temp;
} else if (temp instanceof VisualizePanel) { // normal errors
temp_vp = (VisualizePanel)temp;
} else if (temp instanceof String) { // graphable output
temp_grph = (String)temp;
} else if (temp instanceof FastVector) { // predictions
temp_preds = (FastVector)temp;
} else if (temp instanceof Attribute) { // class attribute
temp_classAtt = (Attribute)temp;
}
}
}
final VisualizePanel vp = temp_vp;
final String grph = temp_grph;
final FastVector preds = temp_preds;
final Attribute classAtt = temp_classAtt;
final Classifier classifier = temp_classifier;
final Instances trainHeader = temp_trainHeader;
JMenuItem saveModel = new JMenuItem("Save model");
if (classifier != null) {
saveModel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
saveClassifier(selectedName, classifier, trainHeader);
}
});
} else {
saveModel.setEnabled(false);
}
resultListMenu.add(saveModel);
JMenuItem reEvaluate =
new JMenuItem("Re-evaluate model on current test set");
if (classifier != null && m_TestLoader != null) {
reEvaluate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
reevaluateModel(selectedName, classifier, trainHeader);
}
});
} else {
reEvaluate.setEnabled(false);
}
resultListMenu.add(reEvaluate);
resultListMenu.addSeparator();
JMenuItem visErrors = new JMenuItem("Visualize classifier errors");
if (vp != null) {
visErrors.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
visualizeClassifierErrors(vp);
}
});
} else {
visErrors.setEnabled(false);
}
resultListMenu.add(visErrors);
JMenuItem visGrph = new JMenuItem("Visualize tree");
if (grph != null) {
if(((Drawable)temp_classifier).graphType()==Drawable.TREE) {
visGrph.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String title;
if (vp != null) title = vp.getName();
else title = selectedName;
visualizeTree(grph, title);
}
});
}
else if(((Drawable)temp_classifier).graphType()==Drawable.BayesNet) {
visGrph.setText("Visualize graph");
visGrph.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Thread th = new Thread() {
public void run() {
visualizeBayesNet(grph, selectedName);
}
};
th.start();
}
});
}
else
visGrph.setEnabled(false);
} else {
visGrph.setEnabled(false);
}
resultListMenu.add(visGrph);
JMenuItem visMargin = new JMenuItem("Visualize margin curve");
if (preds != null) {
visMargin.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
MarginCurve tc = new MarginCurve();
Instances result = tc.getCurve(preds);
VisualizePanel vmc = new VisualizePanel();
vmc.setName(result.relationName());
vmc.setLog(m_Log);
PlotData2D tempd = new PlotData2D(result);
tempd.setPlotName(result.relationName());
tempd.addInstanceNumberAttribute();
vmc.addPlot(tempd);
visualizeClassifierErrors(vmc);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
} else {
visMargin.setEnabled(false);
}
resultListMenu.add(visMargin);
JMenu visThreshold = new JMenu("Visualize threshold curve");
if (preds != null && classAtt != null) {
for (int i = 0; i < classAtt.numValues(); i++) {
JMenuItem clv = new JMenuItem(classAtt.value(i));
final int classValue = i;
clv.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
ThresholdCurve tc = new ThresholdCurve();
Instances result = tc.getCurve(preds, classValue);
//VisualizePanel vmc = new VisualizePanel();
ThresholdVisualizePanel vmc = new ThresholdVisualizePanel();
vmc.setROCString("(Area under ROC = " +
Utils.doubleToString(ThresholdCurve.getROCArea(result), 4) + ")");
vmc.setLog(m_Log);
vmc.setName(result.relationName()+". (Class value "+
classAtt.value(classValue)+")");
PlotData2D tempd = new PlotData2D(result);
tempd.setPlotName(result.relationName());
tempd.addInstanceNumberAttribute();
vmc.addPlot(tempd);
visualizeClassifierErrors(vmc);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
visThreshold.add(clv);
}
} else {
visThreshold.setEnabled(false);
}
resultListMenu.add(visThreshold);
JMenu visCost = new JMenu("Visualize cost curve");
if (preds != null && classAtt != null) {
for (int i = 0; i < classAtt.numValues(); i++) {
JMenuItem clv = new JMenuItem(classAtt.value(i));
final int classValue = i;
clv.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
CostCurve cc = new CostCurve();
Instances result = cc.getCurve(preds, classValue);
VisualizePanel vmc = new VisualizePanel();
vmc.setLog(m_Log);
vmc.setName(result.relationName()+". (Class value "+
classAtt.value(classValue)+")");
PlotData2D tempd = new PlotData2D(result);
tempd.m_displayAllPoints = true;
tempd.setPlotName(result.relationName());
boolean [] connectPoints =
new boolean [result.numInstances()];
for (int jj = 1; jj < connectPoints.length; jj+=2) {
connectPoints[jj] = true;
}
tempd.setConnectPoints(connectPoints);
// tempd.addInstanceNumberAttribute();
vmc.addPlot(tempd);
visualizeClassifierErrors(vmc);
} catch (Exception ex) {
ex.printStackTrace();
}
}