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

📄 clustererpanel.java

📁 wekaUT是 university texas austin 开发的基于weka的半指导学习(semi supervised learning)的分类器
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
	} else if (temp instanceof VisualizePanel) { // normal errors	  temp_vp = (VisualizePanel)temp;	} else if (temp instanceof String) { // graphable output	  temp_grph = (String)temp;	}      }     }          final VisualizePanel vp = temp_vp;    final String grph = temp_grph;    final Clusterer clusterer = temp_clusterer;    final Instances trainHeader = temp_trainHeader;    final int[] ignoreAtts = temp_ignoreAtts;        JMenuItem saveModel = new JMenuItem("Save model");    if (clusterer != null) {      saveModel.addActionListener(new ActionListener() {	  public void actionPerformed(ActionEvent e) {	    saveClusterer(selectedName, clusterer, trainHeader, ignoreAtts);	  }	});    } else {      saveModel.setEnabled(false);    }    resultListMenu.add(saveModel);        JMenuItem reEvaluate =      new JMenuItem("Re-evaluate model on current test set");    if (clusterer != null && m_TestInstances != null) {      reEvaluate.addActionListener(new ActionListener() {	  public void actionPerformed(ActionEvent e) {	    reevaluateModel(selectedName, clusterer, trainHeader, ignoreAtts);	  }	});     } else {      reEvaluate.setEnabled(false);    }    resultListMenu.add(reEvaluate);        resultListMenu.addSeparator();        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();            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 classifier the clusterer to evaluate   */  protected void reevaluateModel(String name, Clusterer clusterer,				 Instances trainHeader, int[] ignoredAtts) {    StringBuffer outBuff = m_History.getNamedBuffer(name);    Instances userTest = null;    PlotData2D predData = null;    if (m_TestInstances != null) {      userTest = new Instances(m_TestInstancesCopy);    }        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");      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) {      m_Log.logMessage(ex.getMessage());      m_Log.statusMessage("See error log");      ex.printStackTrace();    } 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);	  m_CurrentVis.setXIndex(m_visXIndex); 	  m_CurrentVis.setYIndex(m_visYIndex);	} catch (Exception ex) {	  System.err.println(ex);	}	m_CurrentVis.addActionListener(new ActionListener() {	    public void actionPerformed(ActionEvent e) {	      if (m_Instances != null &&		  m_CurrentVis.getInstances().		  relationName().		  compareTo(m_Instances.relationName()) == 0) {		setXY_VisualizeIndexes(m_CurrentVis.getXIndex(), 				       m_CurrentVis.getYIndex());	      }	    }	  });		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);      }    }  }  /**   * 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 Knowledge 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 + -