Пример #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)
Пример #2
0
class GaussianPriorFactor(GaussianFactor):
    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)

    def updateMessageVariable(self, message, variable):

        oldMarginal = copy(variable.getValue())
        oldMessage = message
        newMarginal = GaussianDistribution.fromPrecisionMean(
            oldMarginal.getPrecisionMean() +
            self._newMessage.getPrecisionMean() -
            oldMessage.getValue().getPrecisionMean(),
            oldMarginal.getPrecision() + self._newMessage.getPrecision() -
            oldMessage.getValue().getPrecision())

        variable.setValue(newMarginal)
        newMessage = self._newMessage
        message.setValue(newMessage)
        return GaussianDistribution.subtract(oldMarginal, newMarginal)
Пример #3
0
    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)
Пример #4
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,
        )
Пример #5
0
class GaussianPriorFactor(GaussianFactor) :
    
    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)

    def updateMessageVariable(self, message, variable) :
        
        oldMarginal = copy(variable.getValue())
        oldMessage = message
        newMarginal = GaussianDistribution.fromPrecisionMean(oldMarginal.getPrecisionMean() + self._newMessage.getPrecisionMean() - oldMessage.getValue().getPrecisionMean(),
                oldMarginal.getPrecision() + self._newMessage.getPrecision() - oldMessage.getValue().getPrecision())

        variable.setValue(newMarginal)
        newMessage = self._newMessage
        message.setValue(newMessage)
        return GaussianDistribution.subtract(oldMarginal, newMarginal)
Пример #6
0
    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)