de.jstacs.classifiers.differentiableSequenceScoreBased.gendismix
Class OneDataSetLogGenDisMixFunction
java.lang.Object
de.jstacs.algorithms.optimization.DifferentiableFunction
de.jstacs.classifiers.differentiableSequenceScoreBased.OptimizableFunction
de.jstacs.classifiers.differentiableSequenceScoreBased.AbstractOptimizableFunction
de.jstacs.classifiers.differentiableSequenceScoreBased.AbstractMultiThreadedOptimizableFunction
de.jstacs.classifiers.differentiableSequenceScoreBased.DiffSSBasedOptimizableFunction
de.jstacs.classifiers.differentiableSequenceScoreBased.gendismix.LogGenDisMixFunction
de.jstacs.classifiers.differentiableSequenceScoreBased.gendismix.OneDataSetLogGenDisMixFunction
- All Implemented Interfaces:
- Function
public class OneDataSetLogGenDisMixFunction
- extends LogGenDisMixFunction
This class implements the the following function

where
is the weight for sequence
and class
.
The weights
have to sum to 1. For special weights the optimization turns out to be
well known
- if the weights are (0,1,0), one obtains maximum likelihood,
- if the weights are (0,0.5,0.5), one obtains maximum a posteriori,
- if the weights are (1,0,0), one obtains maximum conditional likelihood,
- if the weights are (0.5,0,0.5), one obtains maximum supervised posterior,
- if the
=0, one obtains the generative-discriminative trade-off,
- if the
=0.5, one obtains the penalized generative-discriminative trade-off.
Of course, there are also some very interesting cases with other weights.
It can be used to maximize the parameters. This can also be done with LogGenDisMixFunction
.
However, we implemented this class to allow a faster function and gradient evaluation leading to a faster optimization.
This becomes especially interesting if the number of classes increases.
This class enables the user to exploit all CPUs of the computer by using threads. The number of compute threads can be
determined in the constructor.
It is very important for this class that the DifferentiableSequenceScore.clone()
method works correctly, since each thread works on its own clones.
- Author:
- Jens Keilwagen
Method Summary |
protected void |
evaluateFunction(int index,
int startClass,
int startSeq,
int endClass,
int endSeq)
This method evaluates the function for a part of the data. |
protected void |
evaluateGradientOfFunction(int index,
int startClass,
int startSeq,
int endClass,
int endSeq)
This method evaluates the gradient of the function for a part of the data. |
DataSet[] |
getData()
Returns the data for each class used in this OptimizableFunction . |
void |
setDataAndWeights(DataSet[] data,
double[][] weights)
This method sets the data set and the sequence weights to be used. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
OneDataSetLogGenDisMixFunction
public OneDataSetLogGenDisMixFunction(int threads,
DifferentiableSequenceScore[] score,
DataSet data,
double[][] weights,
LogPrior prior,
double[] beta,
boolean norm,
boolean freeParams)
throws IllegalArgumentException
- The constructor for creating an instance that can be used in an
Optimizer
.
- Parameters:
threads
- the number of threads used for evaluating the function and determining the gradient of the functionscore
- an array containing the DifferentiableSequenceScore
s that are used for determining the sequences scores;
if the weight beta[LearningPrinciple.LIKELIHOOD_INDEX]
is positive all elements of score
have to be DifferentiableStatisticalModel
data
- the array of DataSet
s containing the data that is needed to evaluate the functionweights
- the weights for each Sequence
in each DataSet
of data
prior
- the prior that is used for learning the parametersbeta
- the beta-weights for the three terms of the learning principlenorm
- the switch for using the normalization (division by the number
of sequences)freeParams
- the switch for using only the free parameters
- Throws:
IllegalArgumentException
- if the number of threads is not positive, the number of classes or the dimension of the weights is not correct
setDataAndWeights
public void setDataAndWeights(DataSet[] data,
double[][] weights)
throws IllegalArgumentException
- Description copied from class:
OptimizableFunction
- This method sets the data set and the sequence weights to be used. It also allows to do further preparation for the computation on this data.
- Overrides:
setDataAndWeights
in class AbstractMultiThreadedOptimizableFunction
- Parameters:
data
- the data setsweights
- the sequence weights for each sequence in each data set
- Throws:
IllegalArgumentException
- if the data or the weights can not be used
getData
public DataSet[] getData()
- Description copied from class:
OptimizableFunction
- Returns the data for each class used in this
OptimizableFunction
.
- Overrides:
getData
in class AbstractOptimizableFunction
- Returns:
- the data for each class
- See Also:
OptimizableFunction.getSequenceWeights()
evaluateGradientOfFunction
protected void evaluateGradientOfFunction(int index,
int startClass,
int startSeq,
int endClass,
int endSeq)
- Description copied from class:
AbstractMultiThreadedOptimizableFunction
- This method evaluates the gradient of the function for a part of the data.
- Overrides:
evaluateGradientOfFunction
in class LogGenDisMixFunction
- Parameters:
index
- the index of the partstartClass
- the index of the start classstartSeq
- the index of the start sequenceendClass
- the index of the end class (inclusive)endSeq
- the index of the end sequence (exclusive)
evaluateFunction
protected void evaluateFunction(int index,
int startClass,
int startSeq,
int endClass,
int endSeq)
throws EvaluationException
- Description copied from class:
AbstractMultiThreadedOptimizableFunction
- This method evaluates the function for a part of the data.
- Overrides:
evaluateFunction
in class LogGenDisMixFunction
- Parameters:
index
- the index of the partstartClass
- the index of the start classstartSeq
- the index of the start sequenceendClass
- the index of the end class (inclusive)endSeq
- the index of the end sequence (exclusive)
- Throws:
EvaluationException
- if the gradient could not be evaluated properly