python faithful.txtのGMMの学习

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python faithful.txtのGMMの学习相关的知识,希望对你有一定的参考价值。

#coding:utf-8
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import sklearn.mixture

def scale(X):
    """データ行列Xを属性ごとに標準化したデータを返す"""
    # 属性の数(=列の数)
    col = X.shape[1]

    # 属性ごとに平均値と標準偏差を計算
    mu = np.mean(X, axis=0)
    sigma = np.std(X, axis=0)

    # 属性ごとデータを標準化
    for i in range(col):
        X[:,i] = (X[:,i] - mu[i]) / sigma[i]

    return X

# faithful.txtデータをロード
data = np.genfromtxt("faithful.txt")
X_train = scale(data)
N = len(X_train)

# GMMを学習
n_components = 2
gmm = sklearn.mixture.GMM(n_components, covariance_type='full')
gmm.fit(X_train)

# 結果を表示
print "*** weights"
print gmm.weights_

print "*** means"
print gmm.means_

print "*** covars"
print gmm.covars_

# 訓練データを描画
plt.plot(X_train[:, 0], X_train[:, 1], 'gx')

# 推定したガウス分布を描画
x = np.linspace(-2.5, 2.5, 1000)
y = np.linspace(-2.5, 2.5, 1000)
X, Y = np.meshgrid(x, y)

# 各ガウス分布について
for k in range(n_components):
    # 平均を描画
    plt.plot(gmm.means_[k][0], gmm.means_[k][1], 'ro')
    # ガウス分布の等高線を描画
    Z = mlab.bivariate_normal(X, Y,
                              np.sqrt(gmm.covars_[k][0][0]), np.sqrt(gmm.covars_[k][1][1]),
                              gmm.means_[k][0], gmm.means_[k][1],
                              gmm.covars_[k][0][1])
    plt.contour(X, Y, Z)

# メッシュ上の各点での対数尤度の等高線を描画
XX = np.array([X.ravel(), Y.ravel()]).T
Z = gmm.score_samples(XX)[0]
Z = Z.reshape(X.shape)
CS = plt.contour(X, Y, Z)
CB = plt.colorbar(CS)

plt.xlim(-2.5, 2.5)
plt.ylim(-2.5, 2.5)
plt.show()

以上是关于python faithful.txtのGMMの学习的主要内容,如果未能解决你的问题,请参考以下文章

2012 7月

如何在python中实现EM-GMM?

python 声质変换のGMMを学习する

Python Scikit Learn GMM 结果与 R Mclust 不一致

如何在python中实现适用于N维特征向量的GMM聚类EM算法(期望最大化算法)

机器学习强基计划7-4:详细推导高斯混合聚类(GMM)原理(附Python实现)