From 5e8fc7f7212b440b4ce4e3c4fe9c4eea9fe43495 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Fr=C3=BDda?= Date: Fri, 19 Jan 2024 13:33:51 +0100 Subject: [PATCH] Fix logical error in an exceptional case in Tweedie dispersion estimation --- h2o-algos/src/main/java/hex/glm/DispersionUtils.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/h2o-algos/src/main/java/hex/glm/DispersionUtils.java b/h2o-algos/src/main/java/hex/glm/DispersionUtils.java index 9bb1fe9fa742..29d3280f95b6 100644 --- a/h2o-algos/src/main/java/hex/glm/DispersionUtils.java +++ b/h2o-algos/src/main/java/hex/glm/DispersionUtils.java @@ -141,12 +141,15 @@ private static double goldenRatioDispersionSearch(GLMModel.GLMParameters parms, double midLoPhi = sortedPhis.get(counter - 2); double midLoLLH = sortedLLHs.get(counter - 2); - if (midLoPhi > upperBound) { + double midHiPhi = lowPhi + d; + double midHiLLH = getTweedieLogLikelihood(parms, dinfo, midHiPhi, mu); + if (midLoPhi > midHiPhi) { midLoPhi = hiPhi - d; midLoLLH = getTweedieLogLikelihood(parms, dinfo, midLoPhi, mu); } - double midHiPhi = lowPhi + d; - double midHiLLH = getTweedieLogLikelihood(parms, dinfo, midHiPhi, mu); + assert lowerBound <= midLoPhi; + assert midLoPhi <= midHiPhi; + assert midHiPhi <= upperBound; for (; counter < iterationsLeft; counter++) { Log.info("Tweedie golden-section search[iter=" + counter + ", phis=(" + lowPhi + ", " + midLoPhi + ", " + midHiPhi + ", " + hiPhi + "), likelihoods=(" +