📄 classifierpanel.java
字号:
public void actionPerformed(ActionEvent e) { m_History.removeResult(selectedName); } }); } else { deleteOutput.setEnabled(false); } resultListMenu.add(deleteOutput); resultListMenu.addSeparator(); JMenuItem loadModel = new JMenuItem("Load model"); loadModel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadClassifier(); } }); resultListMenu.add(loadModel); 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(); } } }); visCost.add(clv); } } else { visCost.setEnabled(false); } resultListMenu.add(visCost); JMenu visPlugins = new JMenu("Plugins"); Vector pluginsVector = ClassDiscovery.find(VisualizePlugin.class, "weka.gui.visualize.plugins"); boolean availablePlugins = false; for (int i=0; i<pluginsVector.size(); i++) { String className = (String)(pluginsVector.elementAt(i)); try { if (className.matches(".*\\.VisualizePlugin")) continue; 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 (ClassNotFoundException cnfe) { //System.out.println("Visualize plugin ClassNotFoundException " + cnfe.getMessage()); } catch (InstantiationException ie) { //System.out.println("Visualize plugin InstantiationException " + ie.getMessage()); } catch (IllegalAccessException iae) { //System.out.println("Visualize plugin IllegalAccessException " + iae.getMessage()); } } if (availablePlugins) resultListMenu.add(visPlugins); resultListMenu.show(m_History.getList(), x, y); } /** * Pops up a TreeVisualizer for the classifier from the currently * selected item in the results list * @param dottyString the description of the tree in dotty format * @param treeName the title to assign to the display */ protected void visualizeTree(String dottyString, String treeName) { final javax.swing.JFrame jf = new javax.swing.JFrame("Weka Classifier Tree Visualizer: "+treeName); jf.setSize(500,400); jf.getContentPane().setLayout(new BorderLayout()); TreeVisualizer tv = new TreeVisualizer(null, dottyString, new PlaceNode2()); jf.getContentPane().add(tv, BorderLayout.CENTER); jf.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { jf.dispose(); } }); jf.setVisible(true); tv.fitToScreen(); } /** * Pops up a GraphVisualizer for the BayesNet classifier from the currently * selected item in the results list * * @param XMLBIF the description of the graph in XMLBIF ver. 0.3 * @param graphName the name of the graph */ protected void visualizeBayesNet(String XMLBIF, String graphName) { final javax.swing.JFrame jf = new javax.swing.JFrame("Weka Classifier Graph Visualizer: "+graphName); jf.setSize(500,400); jf.getContentPane().setLayout(new BorderLayout()); GraphVisualizer gv = new GraphVisualizer(); try { gv.readBIF(XMLBIF); } catch(BIFFormatException be) { System.err.println("unable to visualize BayesNet"); be.printStackTrace(); } gv.layoutGraph(); jf.getContentPane().add(gv, BorderLayout.CENTER); jf.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { jf.dispose(); } }); jf.setVisible(true); } /** * Pops up a VisualizePanel for visualizing the data and errors for * the classifier from the currently selected item in the results list * @param sp the VisualizePanel to pop up. */ protected void visualizeClassifierErrors(VisualizePanel sp) { if (sp != null) { String plotName = sp.getName(); final javax.swing.JFrame jf = new javax.swing.JFrame("Weka Classifier Visualize: "+plotName); jf.setSize(600,400); jf.getContentPane().setLayout(new BorderLayout()); jf.getContentPane().add(sp, BorderLayout.CENTER); jf.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { jf.dispose(); } }); jf.setVisible(true); } } /** * Save the currently selected classifier output to a file. * @param name the name of the buffer to save */ protected void saveBuffer(String name) { StringBuffer sb = m_History.getNamedBuffer(name); if (sb != null) { if (m_SaveOut.save(sb)) { m_Log.logMessage("Save successful."); } } } /** * Stops the currently running classifier (if any). */ protected void stopClassifier() { if (m_RunThread != null) { m_RunThread.interrupt(); // This is deprecated (and theoretically the interrupt should do). m_RunThread.stop(); } } /** * Saves the currently selected classifier * * @param name the name of the run * @param classifier the classifier to save * @param trainHeader the header of the training instances */ protected void saveClassifier(String name, Classifier classifier, Instances trainHeader) { File sFile = null; boolean saveOK = true; int returnVal = m_Fil
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -