Package weka.classifiers
Class CostMatrix
- java.lang.Object
-
- weka.classifiers.CostMatrix
-
- All Implemented Interfaces:
java.io.Serializable
,RevisionHandler
public class CostMatrix extends java.lang.Object implements java.io.Serializable, RevisionHandler
Class for storing and manipulating a misclassification cost matrix. The element at position i,j in the matrix is the penalty for classifying an instance of class j as class i. Cost values can be fixed or computed on a per-instance basis (cost sensitive evaluation only) from the value of an attribute or an expression involving attribute(s).- Version:
- $Revision: 9048 $
- Author:
- Mark Hall, Richard Kirkby (rkirkby@cs.waikato.ac.nz)
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
FILE_EXTENSION
The deafult file extension for cost matrix files
-
Constructor Summary
Constructors Constructor Description CostMatrix(int numOfClasses)
Creates a default cost matrix of a particular size.CostMatrix(java.io.Reader reader)
Reads a matrix from a reader.CostMatrix(CostMatrix toCopy)
Creates a cost matrix that is a copy of another.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Instances
applyCostMatrix(Instances data, java.util.Random random)
Applies the cost matrix to a set of instances.double[]
expectedCosts(double[] classProbs)
Calculates the expected misclassification cost for each possible class value, given class probability estimates.double[]
expectedCosts(double[] classProbs, Instance inst)
Calculates the expected misclassification cost for each possible class value, given class probability estimates.java.lang.Object
getCell(int rowIndex, int columnIndex)
Return the contents of a particular cell.double
getElement(int rowIndex, int columnIndex)
Return the value of a cell as a double (for legacy code)double
getElement(int rowIndex, int columnIndex, Instance inst)
Return the value of a cell as a double.double
getMaxCost(int classVal)
Gets the maximum cost for a particular class value.double
getMaxCost(int classVal, Instance inst)
Gets the maximum cost for a particular class value.java.lang.String
getRevision()
Returns the revision string.void
initialize()
Initializes the matrixvoid
normalize()
Normalizes the matrix so that the diagonal contains zeros.int
numColumns()
Same as sizeint
numRows()
Same as sizestatic CostMatrix
parseMatlab(java.lang.String matlab)
creates a matrix from the given Matlab string.void
readOldFormat(java.io.Reader reader)
Loads a cost matrix in the old format from a reader.void
setCell(int rowIndex, int columnIndex, java.lang.Object value)
Set the value of a particular cell in the matrixvoid
setElement(int rowIndex, int columnIndex, double value)
Set the value of a cell as a doubleint
size()
The number of rows (and columns)java.lang.String
toMatlab()
converts the Matrix into a single line Matlab string: matrix is enclosed by parentheses, rows are separated by semicolon and single cells by blanks, e.g., [1 2; 3 4].java.lang.String
toString()
Converts a matrix to a string.void
write(java.io.Writer w)
Writes out a matrix.
-
-
-
Constructor Detail
-
CostMatrix
public CostMatrix(int numOfClasses)
Creates a default cost matrix of a particular size. All diagonal values will be 0 and all non-diagonal values 1.- Parameters:
numOfClasses
- the number of classes that the cost matrix holds.
-
CostMatrix
public CostMatrix(CostMatrix toCopy)
Creates a cost matrix that is a copy of another.- Parameters:
toCopy
- the matrix to copy.
-
CostMatrix
public CostMatrix(java.io.Reader reader) throws java.lang.Exception
Reads a matrix from a reader. The first line in the file should contain the number of rows and columns. Subsequent lines contain elements of the matrix. (FracPete: taken from old weka.core.Matrix class)- Parameters:
reader
- the reader containing the matrix- Throws:
java.lang.Exception
- if an error occurs- See Also:
write(Writer)
-
-
Method Detail
-
initialize
public void initialize()
Initializes the matrix
-
size
public int size()
The number of rows (and columns)- Returns:
- the size of the matrix
-
numColumns
public int numColumns()
Same as size- Returns:
- the number of columns
-
numRows
public int numRows()
Same as size- Returns:
- the number of rows
-
applyCostMatrix
public Instances applyCostMatrix(Instances data, java.util.Random random) throws java.lang.Exception
Applies the cost matrix to a set of instances. If a random number generator is supplied the instances will be resampled, otherwise they will be rewighted. Adapted from code once sitting in Instances.java- Parameters:
data
- the instances to reweight.random
- a random number generator for resampling, if null then instances are rewighted.- Returns:
- a new dataset reflecting the cost of misclassification.
- Throws:
java.lang.Exception
- if the data has no class or the matrix in inappropriate.
-
expectedCosts
public double[] expectedCosts(double[] classProbs) throws java.lang.Exception
Calculates the expected misclassification cost for each possible class value, given class probability estimates.- Parameters:
classProbs
- the class probability estimates.- Returns:
- the expected costs.
- Throws:
java.lang.Exception
- if the wrong number of class probabilities is supplied.
-
expectedCosts
public double[] expectedCosts(double[] classProbs, Instance inst) throws java.lang.Exception
Calculates the expected misclassification cost for each possible class value, given class probability estimates.- Parameters:
classProbs
- the class probability estimates.inst
- the current instance for which the class probabilites apply. Is used for computing any non-fixed cost values.- Returns:
- the expected costs.
- Throws:
java.lang.Exception
- if something goes wrong
-
getMaxCost
public double getMaxCost(int classVal) throws java.lang.Exception
Gets the maximum cost for a particular class value.- Parameters:
classVal
- the class value.- Returns:
- the maximum cost.
- Throws:
java.lang.Exception
- if cost matrix contains non-fixed costs
-
getMaxCost
public double getMaxCost(int classVal, Instance inst) throws java.lang.Exception
Gets the maximum cost for a particular class value.- Parameters:
classVal
- the class value.- Returns:
- the maximum cost.
- Throws:
java.lang.Exception
- if cost matrix contains non-fixed costs
-
normalize
public void normalize()
Normalizes the matrix so that the diagonal contains zeros.
-
readOldFormat
public void readOldFormat(java.io.Reader reader) throws java.lang.Exception
Loads a cost matrix in the old format from a reader. Adapted from code once sitting in Instances.java- Parameters:
reader
- the reader to get the values from.- Throws:
java.lang.Exception
- if the matrix cannot be read correctly.
-
write
public void write(java.io.Writer w) throws java.lang.Exception
Writes out a matrix. The format can be read via the CostMatrix(Reader) constructor. (FracPete: taken from old weka.core.Matrix class)- Parameters:
w
- the output Writer- Throws:
java.lang.Exception
- if an error occurs
-
toMatlab
public java.lang.String toMatlab()
converts the Matrix into a single line Matlab string: matrix is enclosed by parentheses, rows are separated by semicolon and single cells by blanks, e.g., [1 2; 3 4].- Returns:
- the matrix in Matlab single line format
-
setCell
public final void setCell(int rowIndex, int columnIndex, java.lang.Object value)
Set the value of a particular cell in the matrix- Parameters:
rowIndex
- the rowcolumnIndex
- the columnvalue
- the value to set
-
getCell
public final java.lang.Object getCell(int rowIndex, int columnIndex)
Return the contents of a particular cell. Note: this method returns the Object stored at a particular cell.- Parameters:
rowIndex
- the rowcolumnIndex
- the column- Returns:
- the value at the cell
-
getElement
public final double getElement(int rowIndex, int columnIndex) throws java.lang.Exception
Return the value of a cell as a double (for legacy code)- Parameters:
rowIndex
- the rowcolumnIndex
- the column- Returns:
- the value at a particular cell as a double
- Throws:
java.lang.Exception
- if the value is not a double
-
getElement
public final double getElement(int rowIndex, int columnIndex, Instance inst) throws java.lang.Exception
Return the value of a cell as a double. Computes the value for non-fixed costs using the supplied Instance- Parameters:
rowIndex
- the rowcolumnIndex
- the column- Returns:
- the value from a particular cell
- Throws:
java.lang.Exception
- if something goes wrong
-
setElement
public final void setElement(int rowIndex, int columnIndex, double value)
Set the value of a cell as a double- Parameters:
rowIndex
- the rowcolumnIndex
- the columnvalue
- the value (double) to set
-
parseMatlab
public static CostMatrix parseMatlab(java.lang.String matlab) throws java.lang.Exception
creates a matrix from the given Matlab string.- Parameters:
matlab
- the matrix in matlab format- Returns:
- the matrix represented by the given string
- Throws:
java.lang.Exception
- See Also:
toMatlab()
-
toString
public java.lang.String toString()
Converts a matrix to a string. (FracPete: taken from old weka.core.Matrix class)- Overrides:
toString
in classjava.lang.Object
- Returns:
- the converted string
-
getRevision
public java.lang.String getRevision()
Returns the revision string.- Specified by:
getRevision
in interfaceRevisionHandler
- Returns:
- the revision
-
-