Exemple #1
0
def generate_samples():
    model = HMM.from_fixed_params()
    T = 10
    Z, X = model.sample(T)
    print(model)
    print(f"X: {X}, True Z: {Z}")

    smcmc = SMCMC(model, T)
    samples = smcmc.sample(N=100, x_sequence=X)
    print(f"Last L samples: \n{samples[:, -1]}")
    # print(np.unique(samples[:, 0], return_counts=True)[1] / len(samples))
    print(f"Mean sample: {samples.mean((0, 1)).round(1)}")
Exemple #2
0
        Z_samples = np.empty((N, T), dtype=int)
        Z_samples[0] = self.model.sample_Z(T)

        for n in range(1, N):
            z_proposal = self.model.sample_Z(T)
            log_alpha = compute_log_alpha(z_proposal, Z_samples[n - 1], x_sequence, self.model)
            self.acceptance_probs.append(np.exp(min(0., log_alpha)))
            if np.random.rand() <= self.acceptance_probs[-1]:
                Z_samples[n] = z_proposal
            else:
                Z_samples[n] = Z_samples[n - 1]
        return Z_samples

    def plot_acceptance(self):
        fig, ax = plt.subplots(1, 1)
        ax.plot(self.acceptance_probs)
        plt.show()


if __name__ == '__main__':
    model = HMM.from_fixed_params()
    T = 5
    Z, X = model.sample(10, 10, None)
    mh = MH(model, T)
    print(model)
    print(X, Z)
    samples = mh.sample(X)
    print(samples[-10:])
    # mh.plot_acceptance()
    # print(np.array(mh.acceptance_probs))
    print(samples.mean(0).round())