Esempio n. 1
0
def pi_N(N, pi, mean_1, cov_1, mean_2, cov_2, steps):
    gmm = GMM(N, pi, mean_1, cov_1, mean_2, cov_2)
    pi_steps = np.zeros(shape=steps)
    # 均值
    pi_mu = 0
    # 方差
    pi_sigma = 0

    # 计算steps次估计值和均值
    for i in range(steps):
        D = gmm.dataset()
        pi_learn, _, _, _, _ = gmm.EM(D, N)
        pi_mu += pi_learn
        pi_steps[i] = pi_learn

    pi_mu /= steps

    # 计算steps次方差
    for i in range(steps):
        pi_sigma += (pi_steps[i] - pi_mu)**2

    pi_sigma /= steps

    return pi_mu, pi_sigma
Esempio n. 2
0
"""
@author:hanmy
@file:ParaEsti.py
@time:2019/04/24
"""
import numpy as np
import matplotlib.pyplot as plt
from gmm import GMM

if __name__ == "__main__":
    N = 10000
    pi = 0.8
    mean_1 = np.array([0.0, 0.0])
    cov_1 = np.mat([[1.0, 0.0], [0.0, 1.0]])
    mean_2 = np.array([3.0, 3.0])
    cov_2 = np.mat([[1.0, 0.5], [0.5, 1.0]])

    gmm = GMM(N, pi, mean_1, cov_1, mean_2, cov_2)
    plt.figure()
    plt.gca().set_aspect('equal')  # 令x轴和y轴的同一区间的刻度相同
    D = gmm.dataset()
    plt.scatter(D[:, 0], D[:, 1])
    plt.show()

    pi_learn, mean_1_learn, cov_1_learn, mean_2_learn, cov_2_learn = gmm.EM(D, N)
    print("权重值:", pi_learn)
    print("第一个分模型的均值:\n", mean_1_learn)
    print("第一个分模型的协方差矩阵:\n", cov_1_learn)
    print("第二个分模型的均值:\n", mean_2_learn)
    print("第二个分模型的协方差矩阵:\n", cov_2_learn)