예제 #1
0
    def forQuestion(self, valueToAcc, question):
        accForAnswer = [self.createAcc() for _ in question.codomain()]
        for labelValue, acc in valueToAcc.iteritems():
            answer = question(labelValue)
            d.addAcc(accForAnswer[answer], acc)

        return accForAnswer
예제 #2
0
    def forQuestion(self, valueToAcc, question):
        accForAnswer = [ self.createAcc() for _ in question.codomain() ]
        for labelValue, acc in valueToAcc.iteritems():
            answer = question(labelValue)
            d.addAcc(accForAnswer[answer], acc)

        return accForAnswer
예제 #3
0
    def forQuestion(self, labels, fullQuestion):
        labelValuer, question = fullQuestion
        accForLabel = self.accForLabel

        accForAnswer = [ self.createAcc() for _ in question.codomain() ]
        for label in labels:
            acc = accForLabel(label)
            answer = question(labelValuer(label))
            d.addAcc(accForAnswer[answer], acc)

        return accForAnswer
예제 #4
0
    def forQuestion(self, labels, fullQuestion):
        labelValuer, question = fullQuestion
        accForLabel = self.accForLabel

        accForAnswer = [self.createAcc() for _ in question.codomain()]
        for label in labels:
            acc = accForLabel(label)
            answer = question(labelValuer(label))
            d.addAcc(accForAnswer[answer], acc)

        return accForAnswer
예제 #5
0
def estimate(distPrev, createAcc, estimateDist, afterAcc, verbosity, *accs):
    accTot = createAcc(distPrev)
    for acc in accs:
        d.addAcc(accTot, acc)
    if afterAcc is not None:
        afterAcc(accTot)
    logLikePrev = accTot.logLike()
    count = accTot.count()
    count = max(count, 1.0)
    dist = estimateDist(accTot)
    if verbosity >= 2:
        print ('trainEM: logLikePrev = %s (%s count)' %
               (logLikePrev / count, count))
    return dist
예제 #6
0
def estimate(distPrev, createAcc, estimateDist, afterAcc, verbosity, *accs):
    accTot = createAcc(distPrev)
    for acc in accs:
        d.addAcc(accTot, acc)
    if afterAcc is not None:
        afterAcc(accTot)
    logLikePrev = accTot.logLike()
    count = accTot.count()
    count = max(count, 1.0)
    dist = estimateDist(accTot)
    if verbosity >= 2:
        print('trainEM: logLikePrev = %s (%s count)' %
              (logLikePrev / count, count))
    return dist
예제 #7
0
    def getQgToValueToAcc(self, labels, questionGroups):
        accForLabel = self.accForLabel
        numQuestionGroups = len(questionGroups)

        labelValuers = [ labelValuer
                         for labelValuer, questions in questionGroups ]
        qgToValueToAcc = [ defaultdict(self.createAcc)
                           for _ in range(numQuestionGroups) ]

        for label in labels:
            acc = accForLabel(label)
            for qgIndex in range(numQuestionGroups):
                labelValuer = labelValuers[qgIndex]
                valueToAcc = qgToValueToAcc[qgIndex]
                d.addAcc(valueToAcc[labelValuer(label)], acc)

        return qgToValueToAcc
예제 #8
0
    def getLeafToQgToValueToAcc(self, numLeaves, labelToLeafIndex,
                                questionGroups):
        leafToQgToValueToAcc = [[
            defaultdict(self.createAcc) for _ in questionGroups
        ] for _ in range(numLeaves)]
        for labelledAccs in self.labelledAccChunks:
            for label, acc in labelledAccs:
                try:
                    leafIndex = labelToLeafIndex[label]
                except KeyError:
                    pass
                else:
                    for qgIndex, (labelValuer, _) in enumerate(questionGroups):
                        valueToAcc = leafToQgToValueToAcc[leafIndex][qgIndex]
                        d.addAcc(valueToAcc[labelValuer(label)], acc)

        return leafToQgToValueToAcc
예제 #9
0
    def getQgToValueToAcc(self, labels, questionGroups):
        accForLabel = self.accForLabel
        numQuestionGroups = len(questionGroups)

        labelValuers = [
            labelValuer for labelValuer, questions in questionGroups
        ]
        qgToValueToAcc = [
            defaultdict(self.createAcc) for _ in range(numQuestionGroups)
        ]

        for label in labels:
            acc = accForLabel(label)
            for qgIndex in range(numQuestionGroups):
                labelValuer = labelValuers[qgIndex]
                valueToAcc = qgToValueToAcc[qgIndex]
                d.addAcc(valueToAcc[labelValuer(label)], acc)

        return qgToValueToAcc
예제 #10
0
    def getLeafToQgToValueToAcc(self, numLeaves, labelToLeafIndex,
                                questionGroups):
        leafToQgToValueToAcc = [
            [
                defaultdict(self.createAcc)
                for _ in questionGroups
            ]
            for _ in range(numLeaves)
        ]
        for labelledAccs in self.labelledAccChunks:
            for label, acc in labelledAccs:
                try:
                    leafIndex = labelToLeafIndex[label]
                except KeyError:
                    pass
                else:
                    for qgIndex, (labelValuer, _) in enumerate(questionGroups):
                        valueToAcc = leafToQgToValueToAcc[leafIndex][qgIndex]
                        d.addAcc(valueToAcc[labelValuer(label)], acc)

        return leafToQgToValueToAcc
예제 #11
0
def estimateWithTotAux(distPrev, createAcc, estimateTotAux, afterAcc,
                       monotoneAux, verbosity, *accs):
    accTot = createAcc(distPrev)
    for acc in accs:
        d.addAcc(accTot, acc)
    if afterAcc is not None:
        afterAcc(accTot)
    logLikePrev = accTot.logLike()
    count = accTot.count()
    count = max(count, 1.0)
    dist, (aux, auxRat) = estimateTotAux(accTot)
    if monotoneAux and aux < logLikePrev:
        raise RuntimeError('re-estimated auxiliary value (%s) less than'
                           ' previous log likelihood (%s) during'
                           ' expectation-maximization (count = %s)' %
                           (aux / count, logLikePrev / count, count))
    if verbosity >= 2:
        auxRatString = d.Rat.toString(auxRat)
        print('trainEM: logLikePrev = %s -> aux = %s (%s) (%s count)' %
              (logLikePrev / count, aux / count, auxRatString, count))
    return dist
예제 #12
0
def estimateWithTotAux(distPrev, createAcc, estimateTotAux, afterAcc,
                       monotoneAux, verbosity, *accs):
    accTot = createAcc(distPrev)
    for acc in accs:
        d.addAcc(accTot, acc)
    if afterAcc is not None:
        afterAcc(accTot)
    logLikePrev = accTot.logLike()
    count = accTot.count()
    count = max(count, 1.0)
    dist, (aux, auxRat) = estimateTotAux(accTot)
    if monotoneAux and aux < logLikePrev:
        raise RuntimeError('re-estimated auxiliary value (%s) less than'
                           ' previous log likelihood (%s) during'
                           ' expectation-maximization (count = %s)' %
                           (aux / count, logLikePrev / count, count))
    if verbosity >= 2:
        auxRatString = d.Rat.toString(auxRat)
        print ('trainEM: logLikePrev = %s -> aux = %s (%s) (%s count)' %
               (logLikePrev / count, aux / count, auxRatString, count))
    return dist
예제 #13
0
 def all(self, labels):
     accForLabel = self.accForLabel
     accTot = self.createAcc()
     for label in labels:
         d.addAcc(accTot, accForLabel(label))
     return accTot
예제 #14
0
 def all(self):
     accTot = self.createAcc()
     for labelledAccs in self.labelledAccChunks:
         for _, acc in labelledAccs:
             d.addAcc(accTot, acc)
     return accTot
예제 #15
0
 def getLogProb(dist, labels):
     acc = createAcc(dist)
     for label in labels:
         d.addAcc(acc, accForLabel(label))
     return acc.logLike()
예제 #16
0
 def getLogProb(dist, labels):
     acc = createAcc(dist)
     for label in labels:
         d.addAcc(acc, accForLabel(label))
     return acc.logLike()
예제 #17
0
 def all(self, labels):
     accForLabel = self.accForLabel
     accTot = self.createAcc()
     for label in labels:
         d.addAcc(accTot, accForLabel(label))
     return accTot
예제 #18
0
 def all(self):
     accTot = self.createAcc()
     for labelledAccs in self.labelledAccChunks:
         for _, acc in labelledAccs:
             d.addAcc(accTot, acc)
     return accTot