private static void marginalizeIncrementalResults(List<IncrementalResult> results) { double totalMass = 0.0d; for (IncrementalResult r : results) { totalMass += r.prob; } for (IncrementalResult r : results) { r.prob /= totalMass; } }
private List<IncrementalResult> getIncrementalResults( List<Pt> input, double beta, double lambda, double kappa, double e_sigma) { List<IncrementalResult> results = new ArrayList<IncrementalResult>(); List<Pt> unkPts = deepCopyPts(input); normalize(unkPts); for (Pattern pattern : patterns) { IncrementalResult result = getIncrementalResult(unkPts, pattern, beta, lambda, e_sigma); List<Pt> lastSegmentPts = pattern.segments.get(pattern.segments.size() - 1); double completeProb = getLikelihoodOfMatch( resample(unkPts, lastSegmentPts.size()), lastSegmentPts, e_sigma, e_sigma / beta, lambda); double x = 1 - completeProb; result.prob *= (1 + kappa * Math.exp(-x * x)); results.add(result); } marginalizeIncrementalResults(results); return results; }