2016-11-30 163 views
1

我试图想象从高斯混合模型拟合高斯分布,似乎无法弄清楚。 Herehere我已经看到了一个可视化的一维模型的拟合分布的例子,我不知道如何将它与3层的功能应用于模型。是否可以将每个训练特征的拟合分布可视化?可视化拟合高斯分布从GMM模型

我有一个名为我的模型estimatorX_train训练有素的它:

estimator = GaussianMixture(covariance_type='full', init_params='kmeans', max_iter=100, 
     means_init=array([[ 0.41297, 3.39635, 2.68793], 
     [ 0.33418, 3.82157, 4.47384], 
     [ 0.29792, 3.98821, 5.78627]]), 
     n_components=3, n_init=1, precisions_init=None, random_state=0, 
     reg_covar=1e-06, tol=0.001, verbose=0, verbose_interval=10, 
     warm_start=False, weights_init=None) 

X_train第5个样本的样子:

X_train[:6,:] = array([[ 0.29818663, 3.72573161, 4.19829702], 
     [ 0.24693619, 4.33026266, 10.74416161], 
     [ 0.21932575, 3.98019433, 8.02464581], 
     [ 0.24426255, 4.41868353, 10.52576923], 
     [ 0.16577695, 4.35316706, 12.63638592], 
     [ 0.28952628, 4.03706551, 8.03804016]]) 

X_train形状为(3753L, 3L)。我的阴谋例行海军报第一要素的拟合高斯分布如下:

fig, (ax1,ax2,a3) = plt.subplots(nrows=3) 
#Domain for pdf 
x = np.linspace(0,0.8,3753) 
logprob = estimator.score_samples(X_train) 
resp = estimator.predict_proba(X_train) 
pdf = np.exp(logprob) 
pdf_individual = resp * pdf[:, np.newaxis] 
ax1.hist(X_train[:,0],30, normed=True, histtype='stepfilled', alpha=0.4)  
ax1.plot(x, pdf, '-k') 
ax1.plot(x, pdf_individual, '--k') 
ax1.text(0.04, 0.96, "Best-fit Mixture", 
     ha='left', va='top', transform=ax.transAxes) 
ax1.set_xlabel('$x$') 
ax1.set_ylabel('$p(x)$') 
plt.show()  

但是,这似乎并没有工作。关于如何使这项工作的任何想法?

+0

什么你的错误?你是如何适合估算人员的? 'estimator.fit(X_train)'? –

回答

0

如果我加载样本数据和拟合估算:

X_train = np.array([[ 0.29818663, 3.72573161, 4.19829702], 
    [ 0.24693619, 4.33026266, 10.74416161], 
    [ 0.21932575, 3.98019433, 8.02464581], 
    [ 0.24426255, 4.41868353, 10.52576923], 
    [ 0.16577695, 4.35316706, 12.63638592], 
    [ 0.28952628, 4.03706551, 8.03804016]]) 
estimator.fit(X_train) 

夫妇的问题:linspace length是不正确的,而你打电话ax.transAxes,但还没有定义任何ax。这里是可用的版本:

fig, (ax1,ax2,a3) = plt.subplots(nrows=3) 

logprob = estimator.score_samples(X_train) 
resp = estimator.predict_proba(X_train) 

这里的长度应符合logprob/PDF一个

#Domain for pdf 
x = np.linspace(0,0.8,len(logprob)) 

pdf = np.exp(logprob) 
pdf_individual = resp * pdf[:, np.newaxis] 
ax1.hist(X_train[:,0],30, normed=True, histtype='stepfilled', alpha=0.4)  
ax1.plot(x, pdf, '-k') 
ax1.plot(x, pdf_individual, '--k') 

这里,ax1.transAxes预计:

ax1.text(0.04, 0.96, "Best-fit Mixture", 
     ha='left', va='top', transform=ax1.transAxes) 
ax1.set_xlabel('$x$') 
ax1.set_ylabel('$p(x)$') 
plt.show() 

Result plot