int[] activeOutcomes = params[pi].getOutcomes(); modelExpects[0][pi].updateParameter(aoi, modelExpects[i][pi].getParameters()[aoi]); double[] observed = observedExpects[pi].getParameters(); double[] model = modelExpects[0][pi].getParameters(); int[] activeOutcomes = params[pi].getOutcomes(); for (int aoi = 0; aoi < activeOutcomes.length; aoi++) { if (useGaussianSmoothing) { params[pi].updateParameter(aoi, gaussianUpdate(pi, aoi, correctionConstant)); } else { if (model[aoi] == 0) { LOG.error("Model expects == 0 for " + featNames[pi] + " " + labels[aoi]); params[pi].updateParameter(aoi, ((Math.log(observed[aoi]) - Math.log(model[aoi])) / correctionConstant)); modelExpect[pi].setParameter(aoi, 0.0); // re-initialize to 0.0's
int[] activeOutcomes = modelExpects[threadIndex][pi].getOutcomes(); for (int aoi = 0; aoi < activeOutcomes.length; aoi++) { int oi = activeOutcomes[aoi]; modelExpects[threadIndex][pi].updateParameter(aoi, modelDistribution[oi] * trainingDataFeatValues[ei][j] * numTimesEventsSeen[ei]); } else { modelExpects[threadIndex][pi].updateParameter(aoi, modelDistribution[oi] * numTimesEventsSeen[ei]);
params[pi] = new MutableContext(allOutcomesPattern,new double[numOutcomes]); for (int aoi=0;aoi<numOutcomes;aoi++) params[pi].setParameter(aoi, 0.0); if (useAverage) { for (int pi = 0; pi < numPreds; pi++) { summedParams[pi] = new MutableContext(allOutcomesPattern,new double[numOutcomes]); for (int aoi=0;aoi<numOutcomes;aoi++) summedParams[pi].setParameter(aoi, 0.0); int pi = contexts[ei][ci]; if (values == null) { params[pi].updateParameter(targetOutcome, stepsize); params[pi].updateParameter(maxOutcome, -stepsize); } else { params[pi].updateParameter(targetOutcome, stepsize*values[ei][ci]); params[pi].updateParameter(maxOutcome, -stepsize*values[ei][ci]); for (int pi = 0; pi < numPreds; pi++) for (int aoi=0;aoi<numOutcomes;aoi++) summedParams[pi].updateParameter(aoi, params[pi].getParameters()[aoi]); for (int pi = 0; pi < numPreds; pi++) for (int aoi=0;aoi<numOutcomes;aoi++) summedParams[pi].setParameter(aoi, summedParams[pi].getParameters()[aoi]/numTimesSummed);
params[pi] = new MutableContext(outcomePattern, new double[numActiveOutcomes]); for (int i = 0; i < modelExpects.length; i++) modelExpects[i][pi] = new MutableContext(outcomePattern, new double[numActiveOutcomes]); observedExpects[pi] = new MutableContext(outcomePattern, new double[numActiveOutcomes]); for (int aoi = 0; aoi < numActiveOutcomes; aoi++) { int oi = outcomePattern[aoi]; params[pi].setParameter(aoi, 0.0); for (MutableContext[] modelExpect : modelExpects) { modelExpect[pi].setParameter(aoi, 0.0); observedExpects[pi].setParameter(aoi, featCount[pi][oi]); } else if (useSimpleSmoothing) { observedExpects[pi].setParameter(aoi, smoothingObservation);
if (pi != -1) { params[pi].updateParameter(oi, featureCounts[oi].get(feature)); if (useAverage) { if (updates[pi][oi][VALUE] != 0) { averageParams[pi].updateParameter(oi,updates[pi][oi][VALUE]*(numSequences*(iteration-updates[pi][oi][ITER])+(si-updates[pi][oi][EVENT]))); updates[pi][oi][VALUE] = (int) params[pi].getParameters()[oi]; updates[pi][oi][ITER] = iteration; updates[pi][oi][EVENT] = si; if (useAverage && iteration == iterations-1) { for (int pi = 0; pi < numPreds; pi++) { double[] predParams = averageParams[pi].getParameters(); for (int oi = 0;oi<numOutcomes;oi++) { if (updates[pi][oi][VALUE] != 0) { averageParams[pi].setParameter(oi, predParams[oi]);
private double gaussianUpdate(int predicate, int oid, int n, double correctionConstant) { double param = params[predicate].getParameters()[oid]; double x0 = 0.0; double modelValue = modelExpects[0][predicate].getParameters()[oid]; double observedValue = observedExpects[predicate].getParameters()[oid]; for (int i = 0; i < 50; i++) { double tmp = modelValue * Math.exp(correctionConstant * x0); double f = tmp + (param + x0) / sigma - observedValue; double fp = tmp * correctionConstant + 1 / sigma; if (fp == 0) { break; } double x = x0 - f / fp; if (Math.abs(x - x0) < 0.000001) { x0 = x; break; } x0 = x; } return x0; }
params[pi] = new MutableContext(allOutcomesPattern,new double[numOutcomes]); for (int aoi=0;aoi<numOutcomes;aoi++) params[pi].setParameter(aoi, 0.0); if (useAverage) { for (int pi = 0; pi < numPreds; pi++) { summedParams[pi] = new MutableContext(allOutcomesPattern,new double[numOutcomes]); for (int aoi=0;aoi<numOutcomes;aoi++) summedParams[pi].setParameter(aoi, 0.0); int pi = contexts[ei][ci]; if (values == null) { params[pi].updateParameter(targetOutcome, stepsize); params[pi].updateParameter(maxOutcome, -stepsize); } else { params[pi].updateParameter(targetOutcome, stepsize*values[ei][ci]); params[pi].updateParameter(maxOutcome, -stepsize*values[ei][ci]); for (int pi = 0; pi < numPreds; pi++) for (int aoi=0;aoi<numOutcomes;aoi++) summedParams[pi].updateParameter(aoi, params[pi].getParameters()[aoi]); for (int pi = 0; pi < numPreds; pi++) for (int aoi=0;aoi<numOutcomes;aoi++) summedParams[pi].setParameter(aoi, summedParams[pi].getParameters()[aoi]/numTimesSummed);
params[pi] = new MutableContext(outcomePattern, new double[numActiveOutcomes]); for (int i = 0; i < modelExpects.length; i++) modelExpects[i][pi] = new MutableContext(outcomePattern, new double[numActiveOutcomes]); observedExpects[pi] = new MutableContext(outcomePattern, new double[numActiveOutcomes]); for (int aoi = 0; aoi < numActiveOutcomes; aoi++) { int oi = outcomePattern[aoi]; params[pi].setParameter(aoi, 0.0); for (int i = 0; i < modelExpects.length; i++) modelExpects[i][pi].setParameter(aoi, 0.0); if (predCount[pi][oi] > 0) { observedExpects[pi].setParameter(aoi, predCount[pi][oi]); } else if (useSimpleSmoothing) { observedExpects[pi].setParameter(aoi, smoothingObservation);
if (pi != -1) { params[pi].updateParameter(oi, featureCounts[oi].get(feature)); if (useAverage) { if (updates[pi][oi][VALUE] != 0) { averageParams[pi].updateParameter(oi,updates[pi][oi][VALUE]*(numSequences*(iteration-updates[pi][oi][ITER])+(si-updates[pi][oi][EVENT]))); updates[pi][oi][VALUE] = (int) params[pi].getParameters()[oi]; updates[pi][oi][ITER] = iteration; updates[pi][oi][EVENT] = si; if (useAverage && iteration == iterations-1) { for (int pi = 0; pi < numPreds; pi++) { double[] predParams = averageParams[pi].getParameters(); for (int oi = 0;oi<numOutcomes;oi++) { if (updates[pi][oi][VALUE] != 0) { averageParams[pi].setParameter(oi, predParams[oi]);
int pi = contexts[ei][j]; if (predicateCounts[pi] >= cutoff) { int[] activeOutcomes = modelExpects[threadIndex][pi].getOutcomes(); for (int aoi = 0; aoi < activeOutcomes.length; aoi++) { int oi = activeOutcomes[aoi]; modelExpects[threadIndex][pi].updateParameter(aoi, modelDistribution[oi] * values[ei][j] * numTimesEventsSeen[ei]); } else { modelExpects[threadIndex][pi].updateParameter(aoi, modelDistribution[oi] * numTimesEventsSeen[ei]);
private double gaussianUpdate(int predicate, int oid, double correctionConstant) { double param = params[predicate].getParameters()[oid]; double x0 = 0.0; double modelValue = modelExpects[0][predicate].getParameters()[oid]; double observedValue = observedExpects[predicate].getParameters()[oid]; for (int i = 0; i < 50; i++) { double tmp = modelValue * Math.exp(correctionConstant * x0); double f = tmp + (param + x0) / sigma - observedValue; double fp = tmp * correctionConstant + 1 / sigma; if (fp == 0) { break; } double x = x0 - f / fp; if (Math.abs(x - x0) < 0.000001) { x0 = x; break; } x0 = x; } return x0; }
int[] activeOutcomes = params[pi].getOutcomes(); modelExpects[0][pi].updateParameter(aoi, modelExpects[i][pi].getParameters()[aoi]); double[] observed = observedExpects[pi].getParameters(); double[] model = modelExpects[0][pi].getParameters(); int[] activeOutcomes = params[pi].getOutcomes(); for (int aoi=0;aoi<activeOutcomes.length;aoi++) { if (useGaussianSmoothing) { params[pi].updateParameter(aoi,gaussianUpdate(pi,aoi,numEvents,correctionConstant)); params[pi].updateParameter(aoi,((Math.log(observed[aoi]) - Math.log(model[aoi]))/correctionConstant)); modelExpect[pi].setParameter(aoi, 0.0); // re-initialize to 0.0's
params[pi] = new MutableContext(outcomePattern,new double[numActiveOutcomes]); for (int i = 0; i< modelExpects.length; i++) modelExpects[i][pi] = new MutableContext(outcomePattern,new double[numActiveOutcomes]); observedExpects[pi] = new MutableContext(outcomePattern,new double[numActiveOutcomes]); for (int aoi=0;aoi<numActiveOutcomes;aoi++) { int oi = outcomePattern[aoi]; params[pi].setParameter(aoi, 0.0); for (MutableContext[] modelExpect : modelExpects) { modelExpect[pi].setParameter(aoi, 0.0); observedExpects[pi].setParameter(aoi, predCount[pi][oi]); observedExpects[pi].setParameter(aoi,smoothingObservation);
int pi = contexts[ei][j]; if (predicateCounts[pi] >= cutoff) { int[] activeOutcomes = modelExpects[threadIndex][pi].getOutcomes(); for (int aoi=0;aoi<activeOutcomes.length;aoi++) { int oi = activeOutcomes[aoi]; modelExpects[threadIndex][pi].updateParameter(aoi,modelDistribution[oi] * values[ei][j] * numTimesEventsSeen[ei]); modelExpects[threadIndex][pi].updateParameter(aoi,modelDistribution[oi] * numTimesEventsSeen[ei]);
private double gaussianUpdate(int predicate, int oid, int n, double correctionConstant) { double param = params[predicate].getParameters()[oid]; double x0 = 0.0; double modelValue = modelExpects[0][predicate].getParameters()[oid]; double observedValue = observedExpects[predicate].getParameters()[oid]; for (int i = 0; i < 50; i++) { double tmp = modelValue * Math.exp(correctionConstant * x0); double f = tmp + (param + x0) / sigma - observedValue; double fp = tmp * correctionConstant + 1 / sigma; if (fp == 0) { break; } double x = x0 - f / fp; if (Math.abs(x - x0) < 0.000001) { x0 = x; break; } x0 = x; } return x0; }
int[] activeOutcomes = params[pi].getOutcomes(); modelExpects[0][pi].updateParameter(aoi, modelExpects[i][pi].getParameters()[aoi]); double[] observed = observedExpects[pi].getParameters(); double[] model = modelExpects[0][pi].getParameters(); int[] activeOutcomes = params[pi].getOutcomes(); for (int aoi=0;aoi<activeOutcomes.length;aoi++) { if (useGaussianSmoothing) { params[pi].updateParameter(aoi,gaussianUpdate(pi,aoi,numEvents,correctionConstant)); params[pi].updateParameter(aoi,((Math.log(observed[aoi]) - Math.log(model[aoi]))/correctionConstant)); modelExpect[pi].setParameter(aoi, 0.0); // re-initialize to 0.0's
params[pi] = new MutableContext(outcomePattern,new double[numActiveOutcomes]); for (int i = 0; i< modelExpects.length; i++) modelExpects[i][pi] = new MutableContext(outcomePattern,new double[numActiveOutcomes]); observedExpects[pi] = new MutableContext(outcomePattern,new double[numActiveOutcomes]); for (int aoi=0;aoi<numActiveOutcomes;aoi++) { int oi = outcomePattern[aoi]; params[pi].setParameter(aoi, 0.0); for (MutableContext[] modelExpect : modelExpects) { modelExpect[pi].setParameter(aoi, 0.0); observedExpects[pi].setParameter(aoi, predCount[pi][oi]); observedExpects[pi].setParameter(aoi,smoothingObservation);
int pi = contexts[ei][j]; if (predicateCounts[pi] >= cutoff) { int[] activeOutcomes = modelExpects[threadIndex][pi].getOutcomes(); for (int aoi=0;aoi<activeOutcomes.length;aoi++) { int oi = activeOutcomes[aoi]; modelExpects[threadIndex][pi].updateParameter(aoi,modelDistribution[oi] * values[ei][j] * numTimesEventsSeen[ei]); modelExpects[threadIndex][pi].updateParameter(aoi,modelDistribution[oi] * numTimesEventsSeen[ei]);
private double gaussianUpdate(int predicate, int oid, int n, double correctionConstant) { double param = params[predicate].getParameters()[oid]; double x0 = 0.0; double modelValue = modelExpects[0][predicate].getParameters()[oid]; double observedValue = observedExpects[predicate].getParameters()[oid]; for (int i = 0; i < 50; i++) { double tmp = modelValue * Math.exp(correctionConstant * x0); double f = tmp + (param + x0) / sigma - observedValue; double fp = tmp * correctionConstant + 1 / sigma; if (fp == 0) { break; } double x = x0 - f / fp; if (Math.abs(x - x0) < 0.000001) { x0 = x; break; } x0 = x; } return x0; }
int[] activeOutcomes = params[pi].getOutcomes(); modelExpects[0][pi].updateParameter(aoi, modelExpects[i][pi].getParameters()[aoi]); double[] observed = observedExpects[pi].getParameters(); double[] model = modelExpects[0][pi].getParameters(); int[] activeOutcomes = params[pi].getOutcomes(); for (int aoi = 0; aoi < activeOutcomes.length; aoi++) { if (useGaussianSmoothing) { params[pi].updateParameter(aoi, gaussianUpdate(pi, aoi, numEvents, correctionConstant)); } else { if (model[aoi] == 0) { params[pi].updateParameter(aoi, ((Math.log(observed[aoi]) - Math.log(model[aoi])) / correctionConstant)); modelExpects[i][pi].setParameter(aoi, 0.0); // re-initialize to 0.0's