} else {
visMargin.setEnabled(false);
}
resultListMenu.add(visMargin);
JMenu visThreshold = new JMenu("Visualize threshold curve");
if ((preds != null) && (classAtt != null) && (classAtt.isNominal())) {
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();
// specify which points are connected
boolean[] cp = new boolean[result.numInstances()];
for (int n = 1; n < cp.length; n++)
cp[n] = true;
tempd.setConnectPoints(cp);
// add plot
vmc.addPlot(tempd);
visualizeClassifierErrors(vmc);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
visThreshold.add(clv);
}
} else {
visThreshold.setEnabled(false);
}
resultListMenu.add(visThreshold);
JMenu visCostBenefit = new JMenu("Cost/Benefit analysis");
if ((preds != null) && (classAtt != null) && (classAtt.isNominal())) {
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);
// Create a dummy class attribute with the chosen
// class value as index 0 (if necessary).
Attribute classAttToUse = classAtt;
if (classValue != 0) {
FastVector newNames = new FastVector();
newNames.addElement(classAtt.value(classValue));
for (int k = 0; k < classAtt.numValues(); k++) {
if (k != classValue) {
newNames.addElement(classAtt.value(k));
}
}
classAttToUse = new Attribute(classAtt.name(), newNames);
}
CostBenefitAnalysis cbAnalysis = new CostBenefitAnalysis();
PlotData2D tempd = new PlotData2D(result);
tempd.setPlotName(result.relationName());
tempd.m_alwaysDisplayPointsOfThisSize = 10;
// specify which points are connected
boolean[] cp = new boolean[result.numInstances()];
for (int n = 1; n < cp.length; n++)
cp[n] = true;
tempd.setConnectPoints(cp);
String windowTitle = "";
if (classifier != null) {
String cname = classifier.getClass().getName();
if (cname.startsWith("weka.classifiers.")) {
windowTitle = "" + cname.substring("weka.classifiers.".length()) + " ";
}
}
windowTitle += " (class = " + classAttToUse.value(0) + ")";
// add plot
cbAnalysis.setCurveData(tempd, classAttToUse);
visualizeCostBenefitAnalysis(cbAnalysis, windowTitle);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
visCostBenefit.add(clv);
}
} else {
visCostBenefit.setEnabled(false);
}
resultListMenu.add(visCostBenefit);
JMenu visCost = new JMenu("Visualize cost curve");
if ((preds != null) && (classAtt != null) && (classAtt.isNominal())) {
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();
}
}
});
visCost.add(clv);
}
} else {
visCost.setEnabled(false);
}
resultListMenu.add(visCost);
// visualization plugins
JMenu visPlugins = new JMenu("Plugins");
boolean availablePlugins = false;
// predictions
Vector pluginsVector = GenericObjectEditor.getClassnames(VisualizePlugin.class.getName());
for (int i = 0; i < pluginsVector.size(); i++) {
String className = (String) (pluginsVector.elementAt(i));
try {
VisualizePlugin plugin = (VisualizePlugin) Class.forName(className).newInstance();
if (plugin == null)
continue;
availablePlugins = true;
JMenuItem pluginMenuItem = plugin.getVisualizeMenuItem(preds, classAtt);
Version version = new Version();
if (pluginMenuItem != null) {
/*if (version.compareTo(plugin.getMinVersion()) < 0)
pluginMenuItem.setText(pluginMenuItem.getText() + " (weka outdated)");
if (version.compareTo(plugin.getMaxVersion()) >= 0)
pluginMenuItem.setText(pluginMenuItem.getText() + " (plugin outdated)"); */
visPlugins.add(pluginMenuItem);
}
}
catch (Exception e) {
//e.printStackTrace();
}
}
// errros
pluginsVector = GenericObjectEditor.getClassnames(ErrorVisualizePlugin.class.getName());
for (int i = 0; i < pluginsVector.size(); i++) {
String className = (String) (pluginsVector.elementAt(i));
try {
ErrorVisualizePlugin plugin = (ErrorVisualizePlugin) Class.forName(className).newInstance();
if (plugin == null)
continue;
availablePlugins = true;
JMenuItem pluginMenuItem = plugin.getVisualizeMenuItem(vp.getInstances());
Version version = new Version();
if (pluginMenuItem != null) {
/*if (version.compareTo(plugin.getMinVersion()) < 0)
pluginMenuItem.setText(pluginMenuItem.getText() + " (weka outdated)");
if (version.compareTo(plugin.getMaxVersion()) >= 0)
pluginMenuItem.setText(pluginMenuItem.getText() + " (plugin outdated)"); */
visPlugins.add(pluginMenuItem);
}
}
catch (Exception e) {
//e.printStackTrace();
}
}
// graphs+trees
if (grph != null) {
// trees
if (((Drawable) temp_classifier).graphType() == Drawable.TREE) {
pluginsVector = GenericObjectEditor.getClassnames(TreeVisualizePlugin.class.getName());
for (int i = 0; i < pluginsVector.size(); i++) {
String className = (String) (pluginsVector.elementAt(i));
try {
TreeVisualizePlugin plugin = (TreeVisualizePlugin) Class.forName(className).newInstance();
if (plugin == null)
continue;
availablePlugins = true;
JMenuItem pluginMenuItem = plugin.getVisualizeMenuItem(grph, selectedName);
Version version = new Version();
if (pluginMenuItem != null) {
/*if (version.compareTo(plugin.getMinVersion()) < 0)
pluginMenuItem.setText(pluginMenuItem.getText() + " (weka outdated)");
if (version.compareTo(plugin.getMaxVersion()) >= 0)
pluginMenuItem.setText(pluginMenuItem.getText() + " (plugin outdated)"); */
visPlugins.add(pluginMenuItem);
}
}
catch (Exception e) {
//e.printStackTrace();
}
}
}
// graphs
else {
pluginsVector = GenericObjectEditor.getClassnames(GraphVisualizePlugin.class.getName());
for (int i = 0; i < pluginsVector.size(); i++) {
String className = (String) (pluginsVector.elementAt(i));
try {
GraphVisualizePlugin plugin = (GraphVisualizePlugin) Class.forName(className).newInstance();
if (plugin == null)
continue;
availablePlugins = true;
JMenuItem pluginMenuItem = plugin.getVisualizeMenuItem(grph, selectedName);
Version version = new Version();
if (pluginMenuItem != null) {
/*if (version.compareTo(plugin.getMinVersion()) < 0)
pluginMenuItem.setText(pluginMenuItem.getText() + " (weka outdated)");
if (version.compareTo(plugin.getMaxVersion()) >= 0)
pluginMenuItem.setText(pluginMenuItem.getText() + " (plugin outdated)"); */
visPlugins.add(pluginMenuItem);
}
}
catch (Exception e) {
//e.printStackTrace();
}