|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectcom.aliasi.dca.DiscreteChooser
public class DiscreteChooser
The DiscreteChooser class implements multinomial
conditional logit discrete choice analysis with variables varying
over alternatives.
The model is characterized by a coefficient vector
β, which is supplied at construction time.
Choices are represented as vectors, and there may be any number of
them.
Suppose the model is presented with
N choices represented as vectors
α[0],...,α[N-1]. The probability
of choice n for 0 <= n < N is
where the asterisk (p(n|α,β) = exp(α[n] * β) / Z
*) represents vector dot products, and
the normalizing constant is defined by summation in the usual way, by
Z = Σ0 <= n < N exp(α[n] * β)
This model is related to logistic regression in that it is a log-linear model.
Thus intercepts should not be added to choice vectors and a regression prior with an uninformative intercept should not be used for estimation.
n and choice
m,
p(n|α,β)/p(m|α, β)
= (exp(α[n] * β) / Z) / (exp(α[m] * β) / Z)
= exp(α[n] * β) / exp(α[m] * β).
The value does depends on only α[n] and
α[m] (and the model's coefficient vector
β).
This is fine when the choices are independent, but problematic when there are dependencies between the choices. A standard example of is given a choice between items A and B may be modeled properly. But consider a B' that is very much like B and added to the mix. For instance, consider choosing between a California cabernet and a Bordeaux. Suppose you have a 2/3 probability of choosing the Bordeaux and a 1/3 probability of choosing the California cabernet. Now consider adding a second Califoronia cabernet that's very similar to the first one (as measured by the model, of course). Then the probabilities will be roughly 1/2 for choosing the Bordeaux, and 1/4 for each of the California cabernets. With similar choices, the probability of each should go down. If they were identical (perfectly correlated), the right answer would seem to be a 2/3 probability of choosing the Bordeaux and 1/6 probability for choosing each of the Califoronia cabernets.
If some of the coefficients are features of a chooser, the model may be used to represent the decision function of multiple choosers. In this case, all fetaure tying is up to the implementing class. Typically, there will be interaction features included between the chooser and the choice. Returning to the wine example, different choosers might put different weights on the degree of new oak used, acid levels, or complexity. In these cases, overall preferences may be represented by chooser-independent variables, and then chooser-dependent preferences would be interpreted relatively.
| Constructor Summary | |
|---|---|
DiscreteChooser(Vector coefficients)
Construct a discrete chooser with the specified coefficient vector. |
|
| Method Summary | |
|---|---|
double[] |
choiceLogProbs(Vector[] choices)
Return an array of (natural) log choice probabilities corresponding to the input array of choices. |
double[] |
choiceProbs(Vector[] choices)
Return an array of choice probabilities corresponding to the input array of choices. |
int |
choose(Vector[] choices)
Returns the most likely choice among the choices in the specified array of vectors. |
Vector |
coefficients()
Return an unmodifiable view of the coefficients underlying this discrete chooser. |
static DiscreteChooser |
estimate(Vector[][] alternativess,
int[] choices,
RegressionPrior prior,
int priorBlockSize,
AnnealingSchedule annealingSchedule,
double minImprovement,
int minEpochs,
int maxEpochs,
Reporter reporter)
Returns a discrete choice model estimated from the specified training data, prior, and learning parameters. |
String |
toString()
Return a string-based representation of the coefficient vector underlying this discrete chooser. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Constructor Detail |
|---|
public DiscreteChooser(Vector coefficients)
coefficients - Coefficient vector.| Method Detail |
|---|
public int choose(Vector[] choices)
choices - Array of alternative choices represented
as vectors.
IllegalArgumentException - If there is not at least one
choice.public double[] choiceProbs(Vector[] choices)
choices - Array of alternative choices represented
as vectors.
IllegalArgumentException - If there is not at least one
choice.public double[] choiceLogProbs(Vector[] choices)
choices - Array of alternative choices represented
as vectors.
IllegalArgumentException - If there is not at least one
choice.public Vector coefficients()
public String toString()
toString in class Object
public static DiscreteChooser estimate(Vector[][] alternativess,
int[] choices,
RegressionPrior prior,
int priorBlockSize,
AnnealingSchedule annealingSchedule,
double minImprovement,
int minEpochs,
int maxEpochs,
Reporter reporter)
Training is carried out using stochastic gradient descent. Priors are only applied every block size number of examples, and at the end of each epoch to catch up.
The reporter receives LogLevel.INFO reports on
parameters and LogLevel.DEBUG reports on a per-epoch
basis of learning rate, log likelihood, log prior, and totals.
alternativess - An array of vectors for each training instance.choices - The index of the vector chosen for each training instance.prior - The prior to apply to coefficients.priorBlockSize - Period with which the prior is applied.annealingSchedule - Learning rates per epoch.minImprovement - Minimum improvement in the rolling average
of log likelihood plus prior to compute another epoch.minEpochs - Minimum number of epochs to compute.maxEpochs - Maximum number of epochs.reporter - Reporter to which progress reports are sent.
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||