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.StringFILE_EXTENSIONThe 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 InstancesapplyCostMatrix(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.ObjectgetCell(int rowIndex, int columnIndex)Return the contents of a particular cell.doublegetElement(int rowIndex, int columnIndex)Return the value of a cell as a double (for legacy code)doublegetElement(int rowIndex, int columnIndex, Instance inst)Return the value of a cell as a double.doublegetMaxCost(int classVal)Gets the maximum cost for a particular class value.doublegetMaxCost(int classVal, Instance inst)Gets the maximum cost for a particular class value.java.lang.StringgetRevision()Returns the revision string.voidinitialize()Initializes the matrixvoidnormalize()Normalizes the matrix so that the diagonal contains zeros.intnumColumns()Same as sizeintnumRows()Same as sizestatic CostMatrixparseMatlab(java.lang.String matlab)creates a matrix from the given Matlab string.voidreadOldFormat(java.io.Reader reader)Loads a cost matrix in the old format from a reader.voidsetCell(int rowIndex, int columnIndex, java.lang.Object value)Set the value of a particular cell in the matrixvoidsetElement(int rowIndex, int columnIndex, double value)Set the value of a cell as a doubleintsize()The number of rows (and columns)java.lang.StringtoMatlab()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.StringtoString()Converts a matrix to a string.voidwrite(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.ExceptionReads 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.ExceptionCalculates 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.ExceptionCalculates 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.ExceptionGets 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.ExceptionGets 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.ExceptionLoads 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.ExceptionWrites 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.ExceptionReturn 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.ExceptionReturn 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:
toStringin classjava.lang.Object- Returns:
- the converted string
-
getRevision
public java.lang.String getRevision()
Returns the revision string.- Specified by:
getRevisionin interfaceRevisionHandler- Returns:
- the revision
-
-