⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clustererpanel.java

📁 代码是一个分类器的实现,其中使用了部分weka的源代码。可以将项目导入eclipse运行
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
        JMenuItem visClusts = new JMenuItem("Visualize cluster assignments");    if (vp != null) {      visClusts.addActionListener(new ActionListener() {	    public void actionPerformed(ActionEvent e) {	      visualizeClusterAssignments(vp);	    }	  });          } else {      visClusts.setEnabled(false);    }    resultListMenu.add(visClusts);    JMenuItem visTree = new JMenuItem("Visualize tree");    if (grph != null) {      visTree.addActionListener(new ActionListener() {	  public void actionPerformed(ActionEvent e) {	    String title;	    if (vp != null) title = vp.getName();	    else title = selectedName;	    visualizeTree(grph, title);	  }	});    } else {      visTree.setEnabled(false);    }    resultListMenu.add(visTree);    resultListMenu.show(m_History.getList(), x, y);  }    /**   * Save the currently selected clusterer 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.");      }    }  }  private void setIgnoreColumns() {    ListSelectorDialog jd = new ListSelectorDialog(null, m_ignoreKeyList);    // Open the dialog    int result = jd.showDialog();        if (result != ListSelectorDialog.APPROVE_OPTION) {      // clear selected indices      m_ignoreKeyList.clearSelection();    }  }  /**   * Saves the currently selected clusterer   */  protected void saveClusterer(String name, Clusterer clusterer,			       Instances trainHeader, int[] ignoredAtts) {    File sFile = null;    boolean saveOK = true;    int returnVal = m_FileChooser.showSaveDialog(this);    if (returnVal == JFileChooser.APPROVE_OPTION) {      sFile = m_FileChooser.getSelectedFile();      if (!sFile.getName().toLowerCase().endsWith(MODEL_FILE_EXTENSION)) {	sFile = new File(sFile.getParent(), sFile.getName() 			 + MODEL_FILE_EXTENSION);      }      m_Log.statusMessage("Saving model to file...");            try {	OutputStream os = new FileOutputStream(sFile);	if (sFile.getName().endsWith(".gz")) {	  os = new GZIPOutputStream(os);	}	ObjectOutputStream objectOutputStream = new ObjectOutputStream(os);	objectOutputStream.writeObject(clusterer);	if (trainHeader != null) objectOutputStream.writeObject(trainHeader);	if (ignoredAtts != null) objectOutputStream.writeObject(ignoredAtts);	objectOutputStream.flush();	objectOutputStream.close();      } catch (Exception e) {		JOptionPane.showMessageDialog(null, e, "Save Failed",				      JOptionPane.ERROR_MESSAGE);	saveOK = false;      }      if (saveOK)	m_Log.logMessage("Saved model (" + name			 + ") to file '" + sFile.getName() + "'");      m_Log.statusMessage("OK");    }  }  /**   * Loads a clusterer   */  protected void loadClusterer() {    int returnVal = m_FileChooser.showOpenDialog(this);    if (returnVal == JFileChooser.APPROVE_OPTION) {      File selected = m_FileChooser.getSelectedFile();      Clusterer clusterer = null;      Instances trainHeader = null;      int[] ignoredAtts = null;      m_Log.statusMessage("Loading model from file...");      try {	InputStream is = new FileInputStream(selected);	if (selected.getName().endsWith(".gz")) {	  is = new GZIPInputStream(is);	}	ObjectInputStream objectInputStream = new ObjectInputStream(is);	clusterer = (Clusterer) objectInputStream.readObject();	try { // see if we can load the header & ignored attribute info	  trainHeader = (Instances) objectInputStream.readObject();	  ignoredAtts = (int[]) objectInputStream.readObject();	} catch (Exception e) {} // don't fuss if we can't	objectInputStream.close();      } catch (Exception e) {		JOptionPane.showMessageDialog(null, e, "Load Failed",				      JOptionPane.ERROR_MESSAGE);      }	      m_Log.statusMessage("OK");            if (clusterer != null) {	m_Log.logMessage("Loaded model from file '" + selected.getName()+ "'");	String name = (new SimpleDateFormat("HH:mm:ss - ")).format(new Date());	String cname = clusterer.getClass().getName();	if (cname.startsWith("weka.clusterers."))	  cname = cname.substring("weka.clusterers.".length());	name += cname + " from file '" + selected.getName() + "'";	StringBuffer outBuff = new StringBuffer();	outBuff.append("=== Model information ===\n\n");	outBuff.append("Filename:     " + selected.getName() + "\n");	outBuff.append("Scheme:       " + cname);	if (clusterer instanceof OptionHandler) {	  String [] o = ((OptionHandler) clusterer).getOptions();	  outBuff.append(" " + Utils.joinOptions(o));	}	outBuff.append("\n");	if (trainHeader != null) {	  outBuff.append("Relation:     " + trainHeader.relationName() + '\n');	  outBuff.append("Attributes:   " + trainHeader.numAttributes() + '\n');	  if (trainHeader.numAttributes() < 100) {	    boolean [] selectedAtts = new boolean [trainHeader.numAttributes()];	    for (int i = 0; i < trainHeader.numAttributes(); i++) {	      selectedAtts[i] = true;	    }	    	    if (ignoredAtts != null)	      for (int i=0; i<ignoredAtts.length; i++)		selectedAtts[ignoredAtts[i]] = false;	   	    for (int i = 0; i < trainHeader.numAttributes(); i++) {	      if (selectedAtts[i]) {		outBuff.append("              " + trainHeader.attribute(i).name()			       + '\n');	      }	    }	    if (ignoredAtts != null) {	      outBuff.append("Ignored:\n");	      for (int i=0; i<ignoredAtts.length; i++)		outBuff.append("              "			       + trainHeader.attribute(ignoredAtts[i]).name()			       + '\n');	    }	  } else {	    outBuff.append("              [list of attributes omitted]\n");	  }	} else {	  outBuff.append("\nTraining data unknown\n");	} 		outBuff.append("\n=== Clustering model ===\n\n");	outBuff.append(clusterer.toString() + "\n");	m_History.addResult(name, outBuff);	m_History.setSingle(name);	FastVector vv = new FastVector();	vv.addElement(clusterer);	if (trainHeader != null) vv.addElement(trainHeader);	if (ignoredAtts != null) vv.addElement(ignoredAtts);	// allow visualization of graphable classifiers	String grph = null;	if (clusterer instanceof Drawable) {	  try {	    grph = ((Drawable)clusterer).graph();	  } catch (Exception ex) {	  }	}	if (grph != null) vv.addElement(grph);		m_History.addObject(name, vv);	      }    }  }  /**   * Re-evaluates the named clusterer with the current test set. Unpredictable   * things will happen if the data set is not compatible with the clusterer.   *   * @param name the name of the clusterer entry   * @param clusterer the clusterer to evaluate   * @param trainHeader the header of the training set   * @param ignoredAtts ignored attributes   */  protected void reevaluateModel(final String name,                                  final Clusterer clusterer,				 final Instances trainHeader,                                  final int[] ignoredAtts) {    if (m_RunThread == null) {      m_StartBut.setEnabled(false);      m_StopBut.setEnabled(true);      m_ignoreBut.setEnabled(false);      m_RunThread = new Thread() {          public void run() {            // Copy the current state of things            m_Log.statusMessage("Setting up...");            StringBuffer outBuff = m_History.getNamedBuffer(name);            Instances userTest = null;            PlotData2D predData = null;            if (m_TestInstances != null) {              userTest = new Instances(m_TestInstances);            }                boolean saveVis = m_StorePredictionsBut.isSelected();            String grph = null;            try {              if (userTest == null) {                throw new Exception("No user test set has been opened");              }              if (trainHeader != null && !trainHeader.equalHeaders(userTest)) {                throw new Exception("Train and test set are not compatible");              }              m_Log.statusMessage("Evaluating on test data...");              m_Log.logMessage("Re-evaluating clusterer (" + name + ") on test set");              m_Log.logMessage("Started reevaluate model");              if (m_Log instanceof TaskLogger) {                ((TaskLogger)m_Log).taskStarted();              }              ClusterEvaluation eval = new ClusterEvaluation();              eval.setClusterer(clusterer);                  Instances userTestT = new Instances(userTest);              if (ignoredAtts != null) {                userTestT = removeIgnoreCols(userTestT, ignoredAtts);              }              eval.evaluateClusterer(userTestT);                    predData = setUpVisualizableInstances(userTest, eval);              outBuff.append("\n=== Re-evaluation on test set ===\n\n");              outBuff.append("User supplied test set\n");                outBuff.append("Relation:     " + userTest.relationName() + '\n');              outBuff.append("Instances:    " + userTest.numInstances() + '\n');              outBuff.append("Attributes:   " + userTest.numAttributes() + "\n\n");              if (trainHeader == null)                outBuff.append("NOTE - if test set is not compatible then results are "                               + "unpredictable\n\n");                    outBuff.append(eval.clusterResultsToString());              outBuff.append("\n");              m_History.updateResult(name);              m_Log.logMessage("Finished re-evaluation");              m_Log.statusMessage("OK");            } catch (Exception ex) {              ex.printStackTrace();              m_Log.logMessage(ex.getMessage());              JOptionPane.showMessageDialog(ClustererPanel.this,                                            "Problem evaluating clusterer:\n"                                            + ex.getMessage(),                                            "Evaluate clusterer",                                            JOptionPane.ERROR_MESSAGE);              m_Log.statusMessage("Problem evaluating clusterer");            } finally {              if (predData != null) {                m_CurrentVis = new VisualizePanel();                m_CurrentVis.setName(name+" ("+userTest.relationName()+")");                m_CurrentVis.setLog(m_Log);                predData.setPlotName(name+" ("+userTest.relationName()+")");	                try {                  m_CurrentVis.addPlot(predData);                } catch (Exception ex) {                  System.err.println(ex);                }	                FastVector vv = new FastVector();                vv.addElement(clusterer);                if (trainHeader != null) vv.addElement(trainHeader);                if (ignoredAtts != null) vv.addElement(ignoredAtts);                if (saveVis) {                  vv.addElement(m_CurrentVis);                  if (grph != null) {                    vv.addElement(grph);                  }	                  }                m_History.addObject(name, vv);              }              if (isInterrupted()) {                m_Log.logMessage("Interrupted reevaluate model");                m_Log.statusMessage("See error log");              }              m_RunThread = null;              m_StartBut.setEnabled(true);              m_StopBut.setEnabled(false);              m_ignoreBut.setEnabled(true);              if (m_Log instanceof TaskLogger) {                ((TaskLogger)m_Log).taskFinished();              }            }          }              };      m_RunThread.setPriority(Thread.MIN_PRIORITY);      m_RunThread.start();    }  }    /**   * updates the capabilities filter of the GOE   *    * @param filter	the new filter to use   */  protected void updateCapabilitiesFilter(Capabilities filter) {    if (filter == null) {      m_ClustererEditor.setCapabilitiesFilter(new Capabilities(null));      return;    }        // clusterer don't need the class attribute, so we can skip that here        m_ClustererEditor.setCapabilitiesFilter(filter);  }    /**   * method gets called in case of a change event   *    * @param e		the associated change event   */  public void capabilitiesFilterChanged(CapabilitiesFilterChangeEvent e) {    updateCapabilitiesFilter((Capabilities) e.getFilter().clone());  }  /**   * Tests out the clusterer panel from the command line.   *   * @param args may optionally contain the name of a dataset to load.   */  public static void main(String [] args) {    try {      final javax.swing.JFrame jf =	new javax.swing.JFrame("Weka Explorer: Cluster");      jf.getContentPane().setLayout(new BorderLayout());      final ClustererPanel sp = new ClustererPanel();      jf.getContentPane().add(sp, BorderLayout.CENTER);      weka.gui.LogPanel lp = new weka.gui.LogPanel();      sp.setLog(lp);      jf.getContentPane().add(lp, BorderLayout.SOUTH);      jf.addWindowListener(new java.awt.event.WindowAdapter() {	public void windowClosing(java.awt.event.WindowEvent e) {	  jf.dispose();	  System.exit(0);	}      });      jf.pack();      jf.setSize(800, 600);      jf.setVisible(true);      if (args.length == 1) {	System.err.println("Loading instances from " + args[0]);	java.io.Reader r = new java.io.BufferedReader(			   new java.io.FileReader(args[0]));	Instances i = new Instances(r);	sp.setInstances(i);      }    } catch (Exception ex) {      ex.printStackTrace();      System.err.println(ex.getMessage());    }  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -