Error in transition probability computation
madsendennis opened this issue · comments
As highlighted on the scalismo forum (https://groups.google.com/g/scalismo/c/FytrdvlKgk4), there is an error in the current computation of the transition probability. The parameter update proposal is not correctly projected into the posterior model.
Current version:
override def logTransitionProbability(from: ModelFittingParameters, to: ModelFittingParameters): Double = {
val posterior = cashedPosterior(from)
val compensatedTo = to.copy(shapeParameters = ShapeParameters(from.shapeParameters.parameters + (to.shapeParameters.parameters - from.shapeParameters.parameters) / stepLength))
posterior.logpdf(compensatedTo.shapeParameters.parameters)
}
example of correct projection:
override def logTransitionProbability(from: ModelFittingParameters, to: ModelFittingParameters): Double = {
val pos = cashedPosterior(from)
val posterior = StatisticalMeshModel(referenceMesh, pos)
val compensatedTo = from.shapeParameters.parameters + ((to.shapeParameters.parameters -
from.shapeParameters.parameters) / stepLength)
val toMesh = model.instance(compensatedTo)
val projectedTo = posterior.coefficients(toMesh)
pos.logpdf(projectedTo)
}
Testing needs to be performed before included in the project.