コード例 #1
0
ファイル: mvGHMM.py プロジェクト: wsgan001/Thesis-11
    def reestimateA(self, observ, xi, gamma):
        new_A = np.zeros((self.n, self.n), dtype=self.precision)
        for i in xrange(self.n):
            for j in xrange(self.n):
                numer = safemath.LOGZERO
                denom = safemath.LOGZERO
                for t in xrange(len(observ) - 1):
                    numer = safemath.safelnsum(numer, xi[t][i][j])
                    denom = safemath.safelnsum(denom, gamma[t][i])
                new_A[i][j] = safemath.safeexp(
                    safemath.safelnprod(numer, -1 * denom))

        return new_A
コード例 #2
0
ファイル: mvGHMM.py プロジェクト: wsgan001/Thesis-11
    def calcxi(self, observ, alpha=None, beta=None):
        if alpha is None:
            alpha = self._calcalpha(observ)
        if beta is None:
            beta = self._calcbeta(observ)
        xi = np.zeros((len(observ), self.n, self.n), dtype=self.precision)

        for t in xrange(len(observ) - 1):
            normalizer = safemath.LOGZERO
            for i in xrange(self.n):
                for j in xrange(self.n):
                    xi[t][i][j] = safemath.safelnprod(
                        alpha[t][i],
                        safemath.safelnprod(
                            safemath.safeln(self.A[i][j]),
                            safemath.safelnprod(
                                safemath.safeln(self.B[j][t + 1]),
                                beta[t + 1][j])))
                    normalizer = safemath.safelnsum(normalizer, xi[t][i][j])

            for i in xrange(self.n):
                for j in xrange(self.n):
                    xi[t][i][j] = safemath.safelnprod(xi[t][i][j],
                                                      -1 * normalizer)

        return xi
コード例 #3
0
ファイル: mvGHMM.py プロジェクト: wsgan001/Thesis-11
    def forwardbackward(self, observ, cache=False):
        if not cache:
            self.calcB(observ)

        alpha = self.calcalpha(observ)

        loglikelihood = safemath.LOGZERO
        for i in xrange(self.n):
            loglikelihood = safemath.safelnsum(loglikelihood, alpha[-1][i])
        return loglikelihood
コード例 #4
0
ファイル: mvGHMM.py プロジェクト: wsgan001/Thesis-11
    def calcgamma(self, alpha, beta, seqlen):
        gamma = np.zeros((seqlen, self.n), dtype=self.precision)

        for t in xrange(seqlen):
            normalizer = safemath.LOGZERO
            for i in xrange(self.n):
                gamma[t][i] = safemath.safelnprod(alpha[t][i], beta[t][i])
                normalizer = safemath.safelnsum(normalizer, gamma[t][i])
            for i in xrange(self.n):
                gamma[t][i] = safemath.safelnprod(gamma[t][i], -1 * normalizer)

        return gamma
コード例 #5
0
ファイル: mvGHMM.py プロジェクト: wsgan001/Thesis-11
    def calcbeta(self, observ):
        beta = np.zeros((len(observ), self.n), dtype=self.precision)

        # induction
        for t in xrange(len(observ) - 2, -1, -1):
            for i in xrange(self.n):
                logbeta = safemath.LOGZERO
                for j in xrange(self.n):
                    logbeta = safemath.safelnsum(
                        logbeta,
                        safemath.safelnprod(
                            safemath.safeln(self.A[i][j]),
                            safemath.safelnprod(
                                safemath.safeln(self.B[j][t + 1]),
                                beta[t + 1][j])))
                beta[t][i] = logbeta

        return beta
コード例 #6
0
ファイル: mvGHMM.py プロジェクト: wsgan001/Thesis-11
    def calcalpha(self, observ):
        alpha = np.ones((len(observ), self.n),
                        dtype=self.precision)  # allocation

        # init stage - alpha_1(x) = pi(x)b_x(O1)
        for x in xrange(self.n):
            alpha[0][x] = safemath.safelnprod(safemath.safeln(self.pi[x]),
                                              safemath.safeln(self.B[x][0]))

        # induction
        for t in xrange(1, len(observ)):
            for j in xrange(self.n):
                logalpha = safemath.LOGZERO
                for i in xrange(self.n):
                    logalpha = safemath.safelnsum(
                        logalpha,
                        safemath.safelnprod(alpha[t - 1][i],
                                            safemath.safeln(self.A[i][j])))
                alpha[t][j] = safemath.safelnprod(
                    logalpha, safemath.safeln(self.B[j][t]))

        return alpha