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

📄 boundaryvisualizer.java

📁 wekaUT是 university texas austin 开发的基于weka的半指导学习(semi supervised learning)的分类器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    m_controlPanel.add(colOne, BorderLayout.WEST);    m_controlPanel.add(colTwo, BorderLayout.CENTER);    /*    m_controlPanel.add(cHolder);    m_controlPanel.add(cValHolder);    m_controlPanel.add(vAttHolder);    m_controlPanel.add(m_startBut); */    add(m_controlPanel, BorderLayout.NORTH);    m_boundaryPanel = new BoundaryPanel(m_plotAreaWidth, m_plotAreaHeight);    m_boundaryPanel.setDataGenerator(new KDDataGenerator());    add(m_boundaryPanel, BorderLayout.CENTER);    m_xAxisPanel = new AxisPanel(false);    add(m_xAxisPanel, BorderLayout.SOUTH);    m_yAxisPanel = new AxisPanel(true);    add(m_yAxisPanel, BorderLayout.WEST);    m_startBut.setEnabled(false);    m_startBut.addActionListener(new ActionListener() {	public void actionPerformed(ActionEvent e) {	  if (m_startBut.getText().equals("Start")) {	    if (m_trainingInstances != null && m_classifier != null) {	      try {		int tempSamples = m_numberOfSamplesFromEachGeneratingModel;		try {		  tempSamples = 		    Integer.parseInt(m_samplesText.getText().trim());		} catch (Exception ex) {		  m_samplesText.setText(""+tempSamples);		}		m_numberOfSamplesFromEachGeneratingModel = tempSamples;		m_boundaryPanel.		  setNumberOfSamplesFromEachGeneratingModel(tempSamples);		m_trainingInstances.		  setClassIndex(m_classAttBox.getSelectedIndex());		m_boundaryPanel.setClassifier(m_classifier);		m_boundaryPanel.setTrainingData(m_trainingInstances);		m_boundaryPanel.		  setRedClassValue(m_redClassValueBox.getSelectedIndex());		m_boundaryPanel.		  setGreenClassValue(m_greenClassValueBox.getSelectedIndex());		m_boundaryPanel.		  setBlueClassValue(m_blueClassValueBox.getSelectedIndex());		m_boundaryPanel.setXAttribute(m_xIndex);		m_boundaryPanel.setYAttribute(m_yIndex);		m_boundaryPanel.start();		m_startBut.setText("Stop");		setControlEnabledStatus(false);	      } catch (Exception ex) {		ex.printStackTrace();	      }	    }	  } else {	    m_boundaryPanel.stopPlotting();	    m_startBut.setText("Start");	    setControlEnabledStatus(true);	  }	}      });    m_boundaryPanel.addActionListener(new ActionListener() {	public void actionPerformed(ActionEvent e) {	  m_startBut.setText("Start");	  setControlEnabledStatus(true);	}      });  }  /**   * Set the enabled status of the controls   *   * @param status a <code>boolean</code> value   */  private void setControlEnabledStatus(boolean status) {    m_classAttBox.setEnabled(status);    m_redClassValueBox.setEnabled(status);    m_greenClassValueBox.setEnabled(status);    m_blueClassValueBox.setEnabled(status);    m_xAttBox.setEnabled(status);    m_yAttBox.setEnabled(status);    m_samplesText.setEnabled(status);  }  /**   * Set a classifier to use   *   * @param newClassifier the classifier to use   * @exception Exception if an error occurs   */  public void setClassifier(Classifier newClassifier) throws Exception {    if (!(newClassifier instanceof DistributionClassifier)) {      throw new Exception("Classifier must be a distribution classifier!");    }    m_classifier = (DistributionClassifier)newClassifier;  }  private void computeBounds() {    String xName = (String)m_xAttBox.getSelectedItem();    if (xName == null) {      return;    }    xName = Utils.removeSubstring(xName, "X: ");    xName = Utils.removeSubstring(xName, " (Num)");    String yName = (String)m_yAttBox.getSelectedItem();    yName = Utils.removeSubstring(yName, "Y: ");    yName = Utils.removeSubstring(yName, " (Num)");    m_xIndex = -1;    m_yIndex = -1;    for (int i = 0; i < m_trainingInstances.numAttributes(); i++) {      if (m_trainingInstances.attribute(i).name().equals(xName)) {	m_xIndex = i;      }       if (m_trainingInstances.attribute(i).name().equals(yName)) {	m_yIndex = i;      }    }    if (m_xIndex != -1 && m_yIndex != -1) {      // find the min and max values      m_minX = Double.MAX_VALUE;      m_minY = Double.MAX_VALUE;      m_maxX = Double.MIN_VALUE;      m_maxY = Double.MIN_VALUE;      for (int i = 0; i < m_trainingInstances.numInstances(); i++) {	Instance inst = m_trainingInstances.instance(i);	if (!inst.isMissing(m_xIndex)) {	  double value = inst.value(m_xIndex);	  if (value < m_minX) {	    m_minX = value;	  }	  if (value > m_maxX) {	    m_maxX = value;	  }	}	if (!inst.isMissing(m_yIndex)) {	  double value = inst.value(m_yIndex);	  if (value < m_minY) {	    m_minY = value;	  }	  if (value > m_maxY) {	    m_maxY = value;	  }	}      }    }  }  /**   * Get the training instances   *   * @return the training instances   */  public Instances getInstances() {    return m_trainingInstances;  }  /**   * Set the training instances   *   * @param inst the instances to use   */  public void setInstances(Instances inst) throws Exception {    if (inst.numAttributes() < 3) {      throw new Exception("Not enough attributes in the data to visualize!");    }    m_trainingInstances = inst;    // setup combo boxes    String [] classAttNames = new String [m_trainingInstances.numAttributes()];    Vector xAttNames = new Vector();    Vector yAttNames = new Vector();    for (int i = 0; i < m_trainingInstances.numAttributes(); i++) {      classAttNames[i] = m_trainingInstances.attribute(i).name();      if (m_trainingInstances.attribute(i).isNominal()) {	classAttNames[i] += " (Nom)";      } else {	classAttNames[i] += " (Num)";      }      if (m_trainingInstances.attribute(i).isNumeric()) {	xAttNames.addElement("X: "+classAttNames[i]);	yAttNames.addElement("Y: "+classAttNames[i]);      }    }    m_classAttBox.setModel(new DefaultComboBoxModel(classAttNames));    m_xAttBox.setModel(new DefaultComboBoxModel(xAttNames));    m_yAttBox.setModel(new DefaultComboBoxModel(yAttNames));    if (xAttNames.size() > 1) {      m_yAttBox.setSelectedIndex(1);    }    m_classAttBox.addActionListener(new ActionListener() {	public void actionPerformed(ActionEvent e) {	  setUpClassValuesBoxes();	}      });    m_xAttBox.addItemListener(new ItemListener() {	public void itemStateChanged(ItemEvent e) {	  if (e.getStateChange() == ItemEvent.SELECTED) {	    computeBounds();	    repaint();	  }	}      });    m_yAttBox.addItemListener(new ItemListener() {	public void itemStateChanged(ItemEvent e) {	  if (e.getStateChange() == ItemEvent.SELECTED) {	    computeBounds();	    repaint();	  }	}      });    computeBounds();    revalidate();    repaint();  }    /**   * Set up the class values combo boxes   */  private void setUpClassValuesBoxes() {    int classIndex = m_classAttBox.getSelectedIndex();    if (classIndex >= 0) {      // see if this is a nominal attribute      if (m_trainingInstances.attribute(classIndex).isNominal()) {	Vector rNames = new Vector();	Vector gNames = new Vector();	Vector bNames = new Vector();	for (int i = 0; 	     i < m_trainingInstances.attribute(classIndex).numValues(); i++) {	  String name = m_trainingInstances.attribute(classIndex).value(i);	  rNames.addElement("Red: "+name);	  gNames.addElement("Green: "+name);	  bNames.addElement("Blue: "+name);	}	m_redClassValueBox.setModel(new DefaultComboBoxModel(rNames));	m_greenClassValueBox.setModel(new DefaultComboBoxModel(gNames));	m_blueClassValueBox.setModel(new DefaultComboBoxModel(bNames));	if (gNames.size() > 1) {	  m_greenClassValueBox.setSelectedIndex(1);	  m_blueClassValueBox.setSelectedIndex(1);	}	if (bNames.size() > 2) {	  m_blueClassValueBox.setSelectedIndex(2);	}	if (m_xAttBox.getSelectedIndex() >= 0 &&	    m_yAttBox.getSelectedIndex() >= 0) {	  m_startBut.setEnabled(true);	}      } else {	((DefaultComboBoxModel)m_redClassValueBox.getModel())	  .removeAllElements();	((DefaultComboBoxModel)m_greenClassValueBox.getModel())	  .removeAllElements();	((DefaultComboBoxModel)m_blueClassValueBox.getModel())	  .removeAllElements();	m_startBut.setEnabled(false);      }    }  }  /**   * Main method for testing this class   *   * @param args a <code>String[]</code> value   */  public static void main(String [] args) {    try {      if (args.length < 2) {	System.err.println("Usage : BoundaryPanel <dataset> <classifier "			   +"[classifier options]>");	System.exit(1);      }      final javax.swing.JFrame jf = 	new javax.swing.JFrame("Weka classification boundary visualizer");      jf.getContentPane().setLayout(new BorderLayout());      BoundaryVisualizer bv = new BoundaryVisualizer();      jf.getContentPane().add(bv, BorderLayout.CENTER);      jf.setSize(bv.getMinimumSize());      jf.addWindowListener(new java.awt.event.WindowAdapter() {	  public void windowClosing(java.awt.event.WindowEvent e) {	    jf.dispose();	    System.exit(0);	  }	});      jf.pack();      jf.setVisible(true);      jf.setResizable(false);      Dimension t = jf.getSize();      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);      bv.setInstances(i);      String [] argsR = null;      if (args.length > 2) {	argsR = new String [args.length-2];	for (int j = 2; j < args.length; j++) {	  argsR[j-2] = args[j];	}      }      Classifier c = Classifier.forName(args[1], argsR);      bv.setClassifier(c);    } catch (Exception ex) {      ex.printStackTrace();    }  }}

⌨️ 快捷键说明

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