예제 #1
0
def compute_omega(T, K, alg, model, X):
    if alg == 'gibbs':
        rw_matrix = gibbs.transition_kernel(
            X, model).T  # As defined in the course
    elif alg == 'mh_uniform':
        rw_matrix = load_mh_uniform_transitionmatrix(T, K, model, X)
    elif alg == 'mh_prior':
        rw_matrix = load_mh_prior_transitionmatrix(T, K, model, X)
    eigvals = np.linalg.eigvals(rw_matrix)
    order = np.argsort(eigvals)[::-1]

    w = eigvals[order]
    omega = w[1]
    assert np.abs(np.real(omega) - np.linalg.norm(omega)) < 1e-10
    omega = np.real(omega)
    # print(f"T: {T}, K: {K}, Omega: {omega:.5f}")
    return omega
예제 #2
0
def compute_pi(T, K, alg):
    (_, X), model = loaddatamodel(T, K)
    if alg == 'gibbs':
        rw_matrix = gibbs2.transition_kernel(
            X, model).T  # As defined in the course
    elif alg == 'mh_uniform':
        rw_matrix = load_mh_uniform_transitionmatrix(T, K)
    elif alg == 'mh_prior':
        rw_matrix = load_mh_prior_transitionmatrix(T, K)
    eigvals, eigvecs = np.linalg.eig(rw_matrix)
    order = np.argsort(eigvals)[::-1]
    pi = eigvecs[:, order[0]]
    real = np.real(pi)

    assert np.abs(np.linalg.norm(real) - np.linalg.norm(pi)) < 1e-10
    pi = np.copy(real)
    pi = pi / pi.sum()

    w = eigvals[order]
    omega = w[1]
    assert np.abs(np.real(omega) - np.linalg.norm(omega)) < 1e-10
    omega = np.real(omega)
    print(f"T: {T}, K: {K}, Omega: {omega:.5f}, Pi: {pi}")
    return pi
예제 #3
0
def load_gibbs_transitionmatrix(T, K, modelversion=2):
    Z, X = loaddata(T, K)
    model = loadmodel(K, modelversion)
    return gibbs1.transition_kernel(
        X, model) if modelversion == 1 else gibbs2.transition_kernel(X, model)