*
* @param observations observation for which the mixture will be estimated
* @return estimated mixture
*/
public DiagonalNormalDistributionMixture estimate(ObservationProvider<Vector> observations) {
Hypercube minMax = extractHypercube(observations);
for (int i = 0; i < minMax.getDimension(); ++i) {
ValidationUtils.guardGreaterOrEqualDouble(minMax.getMin().getComponent(i), -1000000,
"observation is out of range for calcualtion");
ValidationUtils.guardGreaterOrEqualDouble(1000000, minMax.getMax().getComponent(i),
"observation is out of range for calcualtion");
}
DiagonalNormalDistributionMixture res = initializeOneCompoenent(observations, minMax.getDimension());
invokeStepListener(res);
double resL = Double.NEGATIVE_INFINITY;
double newL = countLnL(observations, res);
int iteration = 0;