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

📄 filter.java

📁 wekaUT是 university texas austin 开发的基于weka的半指导学习(semi supervised learning)的分类器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* *    This program is free software; you can redistribute it and/or modify *    it under the terms of the GNU General Public License as published by *    the Free Software Foundation; either version 2 of the License, or *    (at your option) any later version. * *    This program is distributed in the hope that it will be useful, *    but WITHOUT ANY WARRANTY; without even the implied warranty of *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *    GNU General Public License for more details. * *    You should have received a copy of the GNU General Public License *    along with this program; if not, write to the Free Software *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//* *    Filter.java *    Copyright (C) 2002 Mark Hall * */package weka.gui.beans;import java.util.Vector;import java.util.EventObject;import java.util.Hashtable;import java.util.Enumeration;import javax.swing.JPanel;import javax.swing.JLabel;import javax.swing.JTextField;import java.awt.BorderLayout;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.InputEvent;import java.awt.*;import java.io.Serializable;import java.io.Reader;import java.io.BufferedReader;import java.io.FileReader;import java.io.File;import javax.swing.ImageIcon;import javax.swing.SwingConstants;import java.beans.EventSetDescriptor;import weka.core.Instance;import weka.core.Instances;import weka.filters.*;import weka.gui.Logger;/** * A wrapper bean for Weka filters * * @author <a href="mailto:mhall@cs.waikato.ac.nz">Mark Hall</a> * @version $Revision: 1.1.1.1 $ */public class Filter extends JPanel  implements BeanCommon, Visible, WekaWrapper,	     Serializable, UserRequestAcceptor,	     TrainingSetListener, TestSetListener,	     TrainingSetProducer, TestSetProducer,	     DataSource, DataSourceListener, 	     InstanceListener, EventConstraints {  protected BeanVisual m_visual =     new BeanVisual("Filter",		   BeanVisual.ICON_PATH+"DefaultFilter.gif",		   BeanVisual.ICON_PATH+"DefaultFilter_animated.gif");  private static int IDLE = 0;  private static int FILTERING_TRAINING = 1;  private static int FILTERING_TEST = 2;  private int m_state = IDLE;  protected Thread m_filterThread = null;  private transient Instances m_trainingSet;  private transient Instances m_testingSet;  /**   * Objects talking to us   */  private Hashtable m_listenees = new Hashtable();  /**   * Objects listening for training set events   */  private Vector m_trainingListeners = new Vector();  /**   * Objects listening for test set events   */  private Vector m_testListeners = new Vector();  /**   * Objects listening for instance events   */  private Vector m_instanceListeners = new Vector();  /**   * Objects listening for data set events   */  private Vector m_dataListeners = new Vector();  /**   * The filter to use.   */  private weka.filters.Filter m_Filter = new AllFilter();  /**   * Instance event object for passing on filtered instance streams   */  private InstanceEvent m_ie = new InstanceEvent(this);  private transient Logger m_log = null;  public Filter() {    setLayout(new BorderLayout());    add(m_visual, BorderLayout.CENTER);    setFilter(m_Filter);  }  /**   * Set the filter to be wrapped by this bean   *   * @param c a <code>weka.filters.Filter</code> value   */  public void setFilter(weka.filters.Filter c) {    boolean loadImages = true;    if (c.getClass().getName().	compareTo(m_Filter.getClass().getName()) == 0) {      loadImages = false;    }    m_Filter = c;    String filterName = c.getClass().toString();    filterName = filterName.substring(filterName.				      lastIndexOf('.')+1, 				      filterName.length());    if (loadImages) {      if (!m_visual.loadIcons(BeanVisual.ICON_PATH+filterName+".gif",		       BeanVisual.ICON_PATH+filterName+"_animated.gif")) {	useDefaultVisual();      }    }    m_visual.setText(filterName);    if (!(m_Filter instanceof StreamableFilter) &&	(m_listenees.containsKey("instance"))) {      if (m_log != null) {	m_log.logMessage("WARNING : "+m_Filter.getClass().getName()			 +" is not an incremental filter");      }    }  }  public weka.filters.Filter getFilter() {    return m_Filter;  }  /**   * Set the filter to be wrapped by this bean   *   * @param algorithm a weka.filters.Filter   * @exception IllegalArgumentException if an error occurs   */  public void setWrappedAlgorithm(Object algorithm)     throws IllegalArgumentException {        if (!(algorithm instanceof weka.filters.Filter)) {       throw new IllegalArgumentException(algorithm.getClass()+" : incorrect "					 +"type of algorithm (Filter)");    }    setFilter((weka.filters.Filter)algorithm);  }  /**   * Get the filter wrapped by this bean   *   * @return an <code>Object</code> value   */  public Object getWrappedAlgorithm() {    return getFilter();  }  /**   * Accept a training set   *   * @param e a <code>TrainingSetEvent</code> value   */  public void acceptTrainingSet(TrainingSetEvent e) {    processTrainingOrDataSourceEvents(e);  }  /**   * Accept an instance for processing by StreamableFilters only   *   * @param e an <code>InstanceEvent</code> value   */  public void acceptInstance(InstanceEvent e) {    // to do!    if (m_filterThread != null) {      String messg = "Filter is currently batch processing!";      if (m_log != null) {	m_log.logMessage(messg);      } else {	System.err.println(messg);      }      return;    }    if (!(m_Filter instanceof StreamableFilter)) {      if (m_log != null) {	m_log.logMessage("ERROR : "+m_Filter.getClass().getName()			 +"can't process streamed instances; can't continue");      }      return;    }    if (e.getStatus() == InstanceEvent.FORMAT_AVAILABLE) {      try {	Instances dataset = e.getInstance().dataset();	if (m_Filter instanceof SupervisedFilter) {	  // defualt to last column if no class is set	  if (dataset.classIndex() < 0) {	    dataset.setClassIndex(dataset.numAttributes()-1);	  }	}	// initialize filter	m_Filter.setInputFormat(dataset);      } catch (Exception ex) {	ex.printStackTrace();      }    }       // pass instance through the filter    try {      if (!m_Filter.input(e.getInstance())) {	if (m_log != null) {	  m_log.logMessage("ERROR : filter not ready to output instance");	}	return;      }            // collect output instance.      Instance filteredInstance = m_Filter.output();      if (filteredInstance == null) {	return;      }      m_ie.setInstance(filteredInstance);      m_ie.setStatus(e.getStatus());      notifyInstanceListeners(m_ie);    } catch (Exception ex) {      if (m_log != null) {	m_log.logMessage(ex.toString());      }      ex.printStackTrace();    }  }  private void processTrainingOrDataSourceEvents(final EventObject e) {    if (m_filterThread == null) {      try {	if (m_state == IDLE) {	  synchronized (this) {	    m_state = FILTERING_TRAINING;	  }	  m_trainingSet = (e instanceof TrainingSetEvent) 	    ? ((TrainingSetEvent)e).getTrainingSet()	    : ((DataSetEvent)e).getDataSet();	  final String oldText = m_visual.getText();	  m_filterThread = new Thread() {	      public void run() {		try {		  if (m_trainingSet != null) {		    m_visual.setAnimated();		    m_visual.setText("Filtering training data...");		    if (m_log != null) {		      m_log.statusMessage("Filter : filtering training data ("					  +m_trainingSet.relationName());		    }		    m_Filter.setInputFormat(m_trainingSet);		    Instances filteredData = 		      weka.filters.Filter.useFilter(m_trainingSet, m_Filter);		    m_visual.setText(oldText);		    m_visual.setStatic();		    EventObject ne;		    if (e instanceof TrainingSetEvent) {		      ne = new TrainingSetEvent(weka.gui.beans.Filter.this, 						filteredData);		      ((TrainingSetEvent)ne).m_setNumber =			((TrainingSetEvent)e).m_setNumber;		      ((TrainingSetEvent)ne).m_maxSetNumber = 			((TrainingSetEvent)e).m_maxSetNumber;		    } else {		      ne = new DataSetEvent(weka.gui.beans.Filter.this,					    filteredData);		    }		    notifyDataOrTrainingListeners(ne);		  }		} catch (Exception ex) {		  ex.printStackTrace();		} finally {		  m_visual.setText(oldText);		  m_visual.setStatic();		  m_state = IDLE;		  if (isInterrupted()) {		    m_trainingSet = null;		    if (m_log != null) {		      m_log.logMessage("Filter training set interrupted!");		      m_log.statusMessage("OK");		    }		  }		  block(false);		}	      }	    };	  m_filterThread.setPriority(Thread.MIN_PRIORITY);	  m_filterThread.start();	  block(true);	  m_filterThread = null;	  m_state = IDLE;	}      } catch (Exception ex) {	ex.printStackTrace();      }    }  }  /**   * Accept a test set   *   * @param e a <code>TestSetEvent</code> value   */  public void acceptTestSet(final TestSetEvent e) {    if (m_trainingSet != null && 	m_trainingSet.equalHeaders(e.getTestSet()) && 	m_filterThread == null) {      try {	if (m_state == IDLE) {	  m_state = FILTERING_TEST;	}	m_testingSet = e.getTestSet();	final String oldText = m_visual.getText();	m_filterThread = new Thread() {	    public void run() {	      try {		if (m_testingSet != null) {		  m_visual.setAnimated();		  m_visual.setText("Filtering test data...");		  if (m_log != null) {		    m_log.statusMessage("Filter : filtering test data ("					+m_testingSet.relationName());		  }		  Instances filteredTest = 		    weka.filters.Filter.useFilter(m_testingSet, m_Filter);		  m_visual.setText(oldText);		  m_visual.setStatic();		  TestSetEvent ne =		    new TestSetEvent(weka.gui.beans.Filter.this,				     filteredTest);		  ne.m_setNumber = e.m_setNumber;		  ne.m_maxSetNumber = e.m_maxSetNumber;		  notifyTestListeners(ne);		}	      } catch (Exception ex) {

⌨️ 快捷键说明

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