def initMixtureModel(data, hyperParams):
    # Initialize parameter data structs
    C = hyperParams.C
    K = hyperParams.K

    mixture = [1.0 / C] * C

    multinomials = []
    for c in range(0, C):
        randomMultinomial = ST.drawFromDirichlet(hyperParams.componentDirich)
        multinomials.append(randomMultinomial)

    return MME.MultinomialMixtureModel(C, K, multinomials, mixture)
示例#2
0
def readSingleTreeFromInfile(reader):
  next = reader.next()
  mixture = map(float, next)
  if (len(mixture) == 0): return None # We've reached a terminal node

  multinomials = []
  for i in range(0, len(mixture)):
    row = reader.next()
    multinomials.append(map(float, row))

  K = 2
  if (len(multinomials) > 0): K = len(multinomials[0])

  return MME.MultinomialMixtureModel(len(mixture), K, multinomials, mixture)
示例#3
0
def initMixtureModel(data, hyperParams):
    # Initialize parameter data structs
    C = hyperParams.C
    K = hyperParams.K

    mixture = [1.0 / C] * C

    multinomials = []
    for c in range(0, C):
        multinomials.append([0.0] * K)
        denominator = sum(data[c]) + sum(hyperParams.componentDirich)
        for k in range(0, K):
            numerator = float(data[c][k]) + hyperParams.componentDirich[k]
            multinomials[c][k] = numerator / denominator

    return MME.MultinomialMixtureModel(C, K, multinomials, mixture)
示例#4
0
def updateMixtureModel(data, params, hyperParams, batchSize, learnRate):
    minibatch = makeMinibatch(data, batchSize)

    # Initialize parameter data structs
    C = params.C
    K = params.K
    mixtureCounts = [0.] * C
    multinomialCounts = []

    for c in range(0, C):
        mixtureCounts[c] += hyperParams.mixtureDirich[c]
        multinomialCounts.append([0.] * K)
        for k in range(0, K):
            multinomialCounts[c][k] += hyperParams.componentDirich[k]

    # Loop through the data and update param data structs
    for row in minibatch:
        cProbs = MME.getComponentProbabilitiesForCounts(row, params)
        for c in range(0, C):
            mixtureCounts[c] += cProbs[c]
            for k in range(0, K):
                multinomialCounts[c][k] += row[k] * cProbs[c]

    # Update the mixture probabilities
    sumMixtureCounts = sum(mixtureCounts)
    for c in range(0, C):
        mixtureCounts[c] /= sumMixtureCounts
        mixtureCounts[c] = learnRate * mixtureCounts[c] + (
            1 - learnRate) * params.mixture[c]

    # Update the multinomial probabilities
    for c in range(0, C):
        multinomialSum = sum(multinomialCounts[c])
        for k in range(0, K):
            multinomialCounts[c][k] /= multinomialSum
            multinomialCounts[c][k] = learnRate * multinomialCounts[c][k] + (
                1 - learnRate) * params.multinomials[c][k]

    return MME.MultinomialMixtureModel(C, K, multinomialCounts, mixtureCounts)