Package weka.gui.explorer

Source Code of weka.gui.explorer.ClustererAssignmentsPlotInstances

/*
*    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.
*/

/*
* ClustererAssignmentsPlotInstances.java
* Copyright (C) 2009 University of Waikato, Hamilton, New Zealand
*/

package weka.gui.explorer;

import weka.clusterers.ClusterEvaluation;
import weka.clusterers.Clusterer;
import weka.core.Attribute;
import weka.core.FastVector;
import weka.core.Instance;
import weka.core.DenseInstance;
import weka.core.Instances;
import weka.core.Utils;
import weka.gui.visualize.Plot2D;
import weka.gui.visualize.PlotData2D;

/**
* A class for generating plottable cluster assignments.
* <p/>
* Example usage:
* <pre>
* Instances train = ... // from somewhere
* Instances test = ... // from somewhere
* Clusterer cls = ... // from somewhere
* // build and evaluate clusterer
* cls.buildClusterer(train);
* ClusterEvaluation eval = new ClusterEvaluation();
* eval.setClusterer(cls);
* eval.evaluateClusterer(test);
* // generate plot instances
* ClustererPlotInstances plotInstances = new ClustererPlotInstances();
* plotInstances.setClusterer(cls);
* plotInstances.setInstances(test);
* plotInstances.setClusterer(cls);
* plotInstances.setClusterEvaluation(eval);
* plotInstances.setUp();
* // generate visualization
* VisualizePanel visPanel = new VisualizePanel();
* visPanel.addPlot(plotInstances.getPlotData("plot name"));
* // clean up
* plotInstances.cleanUp();
* </pre>
*
* @author  fracpete (fracpete at waikato dot ac dot nz)
* @version $Revision: 6601 $
*/
public class ClustererAssignmentsPlotInstances
  extends AbstractPlotInstances {

  /** for serialization. */
  private static final long serialVersionUID = -4748134272046520423L;

  /** for storing the plot shapes. */
  protected int[] m_PlotShapes;
 
  /** the clusterer being used. */
  protected Clusterer m_Clusterer;
 
  /** the cluster evaluation to use. */
  protected ClusterEvaluation m_Evaluation;
 
  /**
   * Initializes the members.
   */
  protected void initialize() {
    super.initialize();
   
    m_PlotShapes = null;
    m_Clusterer  = null;
    m_Evaluation = null;
  }
 
  /**
   * Sets the classifier used for making the predictions.
   *
   * @param value  the clusterer to use
   */
  public void setClusterer(Clusterer value) {
    m_Clusterer = value;
  }
 
  /**
   * Returns the currently set clusterer.
   *
   * @return    the clusterer in use
   */
  public Clusterer getClusterer() {
    return m_Clusterer;
  }

  /**
   * Sets the cluster evaluation object to use.
   *
   * @param value  the evaluation object
   */
  public void setClusterEvaluation(ClusterEvaluation value) {
    m_Evaluation = value;
  }
 
  /**
   * Returns the cluster evaluation object in use.
   *
   * @return    the evaluation object
   */
  public ClusterEvaluation getClusterEvaluation() {
    return m_Evaluation;
  }
 
  /**
   * Checks whether clusterer and evaluation are provided.
   */
  protected void check() {
    super.check();

    if (m_Clusterer == null)
      throw new IllegalStateException("No clusterer set!");
 
    if (m_Evaluation == null)
      throw new IllegalStateException("No cluster evaluation set!");
  }
 
  /**
   * Sets up the structure for the plot instances.
   */
  protected void determineFormat() {
    int   numClusters;
    FastVector   hv;
    Attribute   predictedCluster;
    FastVector   clustVals;
    int    i;
   
    numClusters = m_Evaluation.getNumClusters();
    hv          = new FastVector();
    clustVals   = new FastVector();

    for (i = 0; i < numClusters; i++)
      clustVals.addElement("cluster" + /*(i+1)*/ i);
    predictedCluster = new Attribute("Cluster", clustVals);
    for (i = 0; i < m_Instances.numAttributes(); i++)
      hv.addElement(m_Instances.attribute(i).copy());
    hv.addElement(predictedCluster);
   
    m_PlotInstances = new Instances(
  m_Instances.relationName() + "_clustered", hv, m_Instances.numInstances());
  }
 
  /**
   * Generates the cluster assignments.
   *
   * @see    #m_PlotShapes
   * @see    #m_PlotSizes
   * @see    #m_PlotInstances
   */
  protected void process() {
    double[]   clusterAssignments;
    int    i;
    double[]   values;
    int   j;
    int[]   classAssignments;
   
    clusterAssignments = m_Evaluation.getClusterAssignments();
   
    classAssignments   = null;
    if (m_Instances.classIndex() >= 0) {
      classAssignments = m_Evaluation.getClassesToClusters();
      m_PlotShapes = new int[m_Instances.numInstances()];
      for (i = 0; i < m_Instances.numInstances(); i++)
  m_PlotShapes[i] = Plot2D.CONST_AUTOMATIC_SHAPE;
    }

    for (i = 0; i < m_Instances.numInstances(); i++) {
      values = new double[m_PlotInstances.numAttributes()];
      for (j = 0; j < m_Instances.numAttributes(); j++)
  values[j] = m_Instances.instance(i).value(j);
      if (clusterAssignments[i] < 0) {
        values[j] = Utils.missingValue();
      } else {
        values[j] = clusterAssignments[i];
      }
      m_PlotInstances.add(new DenseInstance(1.0, values));
      if (m_PlotShapes != null) {
        if (clusterAssignments[i] >= 0) {
          if ((int) m_Instances.instance(i).classValue() != classAssignments[(int) clusterAssignments[i]])
            m_PlotShapes[i] = Plot2D.ERROR_SHAPE;
        } else {
          m_PlotShapes[i] = Plot2D.MISSING_SHAPE;
        }
      }
    }
  }
 
  /**
   * Performs optional post-processing.
   */
  protected void finishUp() {
    super.finishUp();
   
    process();
  }
 
  /**
   * Assembles and returns the plot. The relation name of the dataset gets
   * added automatically.
   *
   * @param name  the name of the plot
   * @return    the plot
   * @throws Exception  if plot generation fails
   */
  protected PlotData2D createPlotData(String name) throws Exception {
    PlotData2D   result;
   
    result = new PlotData2D(m_PlotInstances);
    if (m_PlotShapes != null)
      result.setShapeType(m_PlotShapes);
    result.addInstanceNumberAttribute();
    result.setPlotName(name + " (" + m_Instances.relationName() + ")");

    return result;
  }
 
  /**
   * For freeing up memory. Plot data cannot be generated after this call!
   */
  public void cleanUp() {
    super.cleanUp();
   
    m_Clusterer  = null;
    m_Evaluation = null;
    m_PlotShapes = null;
  }
}
TOP

Related Classes of weka.gui.explorer.ClustererAssignmentsPlotInstances

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.