Exemple #1
0
    def getPartialUpdate(prior, fullPosterior, updatePercentage):

        priorGaussian = GaussianDistribution(prior.getMean(),
                                             prior.getStandardDeviation())
        posteriorGaussian = GaussianDistribution(
            fullPosterior.getMean(), fullPosterior.getStandardDeviation())

        #         From a clarification email from Ralf Herbrich:
        #         "the idea is to compute a linear interpolation between the prior and posterior skills of each player
        #         ... in the canonical space of parameters"

        precisionDifference = posteriorGaussian.getPrecision(
        ) - priorGaussian.getPrecision()
        partialPrecisionDifference = updatePercentage * precisionDifference

        precisionMeanDifference = posteriorGaussian.getPrecisionMean(
        ) - priorGaussian.getPrecisionMean()
        partialPrecisionMeanDifference = updatePercentage * precisionMeanDifference

        partialPosteriorGaussion = GaussianDistribution.fromPrecisionMean(
            priorGaussian.getPrecisionMean() + partialPrecisionMeanDifference,
            priorGaussian.getPrecision() + partialPrecisionDifference)

        return Rating(partialPosteriorGaussion.getMean(),
                      partialPosteriorGaussion.getStandardDeviation(),
                      prior._conservativeStandardDeviationMultiplier)
    def __init__(self, mean, variance, variable):

        name = "Prior value going to %s" % variable
        super(GaussianPriorFactor, self).__init__(name)

        msg = "message from %s to %s" % (self, variable)
        self._newMessage = GaussianDistribution(mean, sqrt(variance))
        newMessage = Message(GaussianDistribution.fromPrecisionMean(0, 0), msg)

        self.createVariableToMessageBindingWithMessage(variable, newMessage)