weka.gui.boundaryvisualizer
Class BoundaryPanel

java.lang.Object
  extended byjava.awt.Component
      extended byjava.awt.Container
          extended byjavax.swing.JComponent
              extended byjavax.swing.JPanel
                  extended byweka.gui.boundaryvisualizer.BoundaryPanel
All Implemented Interfaces:
javax.accessibility.Accessible, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable
Direct Known Subclasses:
BoundaryPanelDistributed

public class BoundaryPanel
extends javax.swing.JPanel

BoundaryPanel. A class to handle the plotting operations associated with generating a 2D picture of a classifier's decision boundaries.

Since:
1.0
Version:
$Revision: 1.19 $
Author:
Mark Hall
See Also:
JPanel, Serialized Form

Nested Class Summary
private  class BoundaryPanel.PlotPanel
           
protected  class BoundaryPanel.PlotThread
           
 
Nested classes inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
 
Nested classes inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
static java.awt.Color[] DEFAULT_COLORS
           
protected  Classifier m_classifier
           
private  int m_classIndex
           
protected  FastVector m_Colors
           
protected  DataGenerator m_dataGenerator
           
private  java.lang.Double m_dummy
           
private  boolean m_initialTiling
           
private  java.util.Vector m_listeners
           
protected  double m_maxX
           
protected  double m_maxY
           
protected  double m_minX
           
protected  double m_minY
           
protected  int m_numOfSamplesPerGenerator
           
protected  int m_numOfSamplesPerRegion
           
protected  java.awt.Image m_osi
           
protected  int m_panelHeight
           
protected  int m_panelWidth
           
private  boolean m_pausePlotting
           
protected  double m_pixHeight
           
protected  double m_pixWidth
           
private  BoundaryPanel.PlotPanel m_plotPanel
           
private  java.lang.Thread m_plotThread
           
protected  boolean m_plotTrainingData
           
protected  double[][][] m_probabilityCache
           
private  java.util.Random m_random
           
private  double m_rangeX
           
private  double m_rangeY
           
protected  double m_samplesBase
           
private  int m_size
           
protected  boolean m_stopPlotting
           
protected  boolean m_stopReplotting
           
protected  Instances m_trainingData
           
protected  int m_xAttribute
           
protected  int m_yAttribute
           
 
Fields inherited from class javax.swing.JPanel
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Container
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
BoundaryPanel(int panelWidth, int panelHeight)
          Creates a new BoundaryPanel instance.
 
Method Summary
 void addActionListener(java.awt.event.ActionListener newListener)
          Register a listener to be notified when plotting completes
protected  void computeMinMaxAtts()
           
private  double convertFromPanelX(double pX)
           
private  double convertFromPanelY(double pY)
           
private  int convertToPanelX(double xval)
           
private  int convertToPanelY(double yval)
           
 FastVector getColors()
          Get the current vector of Color objects used for the classes
 double getGeneratorSamplesBase()
          Get the base used for computing the number of samples to obtain from each generator
 int getNumSamplesPerRegion()
          Get the number of points to sample from a region (fixed dimensions).
 boolean getPlotTrainingData()
          Returns true if training data is to be superimposed
private  double getRandomX(int pix)
          Return a random x attribute value contained within the pix'th horizontal pixel
private  double getRandomY(int pix)
          Return a random y attribute value contained within the pix'th vertical pixel
protected  void initialize()
          Set up the off screen bitmap for rendering to
static void main(java.lang.String[] args)
          Main method for testing this class
protected  void plotPoint(int x, int y, double[] probs, boolean update)
           
private  void plotPoint(int x, int y, int width, int height, double[] probs, boolean update)
           
protected  void plotTrainingData()
           
 void removeActionListener(java.awt.event.ActionListener removeListener)
          Remove a listener
 void replot()
          Quickly replot the display using cached probability estimates
protected  void saveImage(java.lang.String fileName)
           
 void setClassifier(Classifier classifier)
          Set the classifier to use.
 void setColors(FastVector colors)
          Set a vector of Color objects for the classes
 void setDataGenerator(DataGenerator dataGenerator)
          Set the data generator to use for generating new instances
 void setGeneratorSamplesBase(double ksb)
          Set the base for computing the number of samples to obtain from each generator. number of samples = base ^ (# non fixed dimensions)
 void setNumSamplesPerRegion(int num)
          Set the number of points to uniformly sample from a region (fixed dimensions).
 void setPlotTrainingData(boolean pg)
          Set whether to superimpose the training data plot
 void setTrainingData(Instances trainingData)
          Set the training data to use
 void setXAttribute(int xatt)
          Set the x attribute index
 void setYAttribute(int yatt)
          Set the y attribute index
 void start()
          Start the plotting thread
 void stopPlotting()
          Stop the plotting thread
private  void update()
           
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addPropertyChangeListener, addPropertyChangeListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBorder, getBounds, getClientProperty, getComponentGraphics, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getGraphics, getHeight, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPreferredSize, getPropertyChangeListeners, getPropertyChangeListeners, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isPreferredSizeSet, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removePropertyChangeListener, removePropertyChangeListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFont, setForeground, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setFocusCycleRoot, setFocusTraversalKeys, setFocusTraversalPolicy, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMouseWheelListeners, getName, getParent, getPeer, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

DEFAULT_COLORS

public static final java.awt.Color[] DEFAULT_COLORS

m_Colors

protected FastVector m_Colors

m_trainingData

protected Instances m_trainingData

m_classifier

protected Classifier m_classifier

m_dataGenerator

protected DataGenerator m_dataGenerator

m_classIndex

private int m_classIndex

m_xAttribute

protected int m_xAttribute

m_yAttribute

protected int m_yAttribute

m_minX

protected double m_minX

m_minY

protected double m_minY

m_maxX

protected double m_maxX

m_maxY

protected double m_maxY

m_rangeX

private double m_rangeX

m_rangeY

private double m_rangeY

m_pixHeight

protected double m_pixHeight

m_pixWidth

protected double m_pixWidth

m_osi

protected java.awt.Image m_osi

m_panelWidth

protected int m_panelWidth

m_panelHeight

protected int m_panelHeight

m_numOfSamplesPerRegion

protected int m_numOfSamplesPerRegion

m_numOfSamplesPerGenerator

protected int m_numOfSamplesPerGenerator

m_samplesBase

protected double m_samplesBase

m_listeners

private java.util.Vector m_listeners

m_plotPanel

private BoundaryPanel.PlotPanel m_plotPanel

m_plotThread

private java.lang.Thread m_plotThread

m_stopPlotting

protected boolean m_stopPlotting

m_stopReplotting

protected boolean m_stopReplotting

m_dummy

private java.lang.Double m_dummy

m_pausePlotting

private boolean m_pausePlotting

m_size

private int m_size

m_initialTiling

private boolean m_initialTiling

m_random

private java.util.Random m_random

m_probabilityCache

protected double[][][] m_probabilityCache

m_plotTrainingData

protected boolean m_plotTrainingData
Constructor Detail

BoundaryPanel

public BoundaryPanel(int panelWidth,
                     int panelHeight)
Creates a new BoundaryPanel instance.

Parameters:
panelWidth - the width in pixels of the panel
panelHeight - the height in pixels of the panel
Method Detail

setNumSamplesPerRegion

public void setNumSamplesPerRegion(int num)
Set the number of points to uniformly sample from a region (fixed dimensions).

Parameters:
num - an int value

getNumSamplesPerRegion

public int getNumSamplesPerRegion()
Get the number of points to sample from a region (fixed dimensions).

Returns:
an int value

setGeneratorSamplesBase

public void setGeneratorSamplesBase(double ksb)
Set the base for computing the number of samples to obtain from each generator. number of samples = base ^ (# non fixed dimensions)

Parameters:
ksb - a double value

getGeneratorSamplesBase

public double getGeneratorSamplesBase()
Get the base used for computing the number of samples to obtain from each generator

Returns:
a double value

initialize

protected void initialize()
Set up the off screen bitmap for rendering to


stopPlotting

public void stopPlotting()
Stop the plotting thread


computeMinMaxAtts

protected void computeMinMaxAtts()

getRandomX

private double getRandomX(int pix)
Return a random x attribute value contained within the pix'th horizontal pixel

Parameters:
pix - the horizontal pixel number
Returns:
a value in attribute space

getRandomY

private double getRandomY(int pix)
Return a random y attribute value contained within the pix'th vertical pixel

Parameters:
pix - the vertical pixel number
Returns:
a value in attribute space

start

public void start()
           throws java.lang.Exception
Start the plotting thread

Throws:
java.lang.Exception - if an error occurs

plotTrainingData

protected void plotTrainingData()

convertToPanelX

private int convertToPanelX(double xval)

convertToPanelY

private int convertToPanelY(double yval)

convertFromPanelX

private double convertFromPanelX(double pX)

convertFromPanelY

private double convertFromPanelY(double pY)

plotPoint

protected void plotPoint(int x,
                         int y,
                         double[] probs,
                         boolean update)

plotPoint

private void plotPoint(int x,
                       int y,
                       int width,
                       int height,
                       double[] probs,
                       boolean update)

update

private void update()

setTrainingData

public void setTrainingData(Instances trainingData)
                     throws java.lang.Exception
Set the training data to use

Parameters:
trainingData - the training data
Throws:
java.lang.Exception - if an error occurs

addActionListener

public void addActionListener(java.awt.event.ActionListener newListener)
Register a listener to be notified when plotting completes

Parameters:
newListener - the listener to add

removeActionListener

public void removeActionListener(java.awt.event.ActionListener removeListener)
Remove a listener

Parameters:
removeListener - the listener to remove

setClassifier

public void setClassifier(Classifier classifier)
Set the classifier to use.

Parameters:
classifier - the classifier to use

setDataGenerator

public void setDataGenerator(DataGenerator dataGenerator)
Set the data generator to use for generating new instances

Parameters:
dataGenerator - the data generator to use

setXAttribute

public void setXAttribute(int xatt)
                   throws java.lang.Exception
Set the x attribute index

Parameters:
xatt - index of the attribute to use on the x axis
Throws:
java.lang.Exception - if an error occurs

setYAttribute

public void setYAttribute(int yatt)
                   throws java.lang.Exception
Set the y attribute index

Parameters:
yatt - index of the attribute to use on the y axis
Throws:
java.lang.Exception - if an error occurs

setColors

public void setColors(FastVector colors)
Set a vector of Color objects for the classes

Parameters:
colors - a FastVector value

setPlotTrainingData

public void setPlotTrainingData(boolean pg)
Set whether to superimpose the training data plot

Parameters:
pg - a boolean value

getPlotTrainingData

public boolean getPlotTrainingData()
Returns true if training data is to be superimposed

Returns:
a boolean value

getColors

public FastVector getColors()
Get the current vector of Color objects used for the classes

Returns:
a FastVector value

replot

public void replot()
Quickly replot the display using cached probability estimates


saveImage

protected void saveImage(java.lang.String fileName)

main

public static void main(java.lang.String[] args)
Main method for testing this class

Parameters:
args - a String[] value