Python 如何使用sklearn实现一维高斯混合直方图?

Python 如何使用sklearn实现一维高斯混合直方图?,python,matplotlib,scikit-learn,histogram,gmm,Python,Matplotlib,Scikit Learn,Histogram,Gmm,我想做一个混合1D高斯直方图作为图片 谢谢你的照片 我的直方图如下: 我有一个列中包含大量数据(4000000个数字)的文件: 1.727182 1.645300 1.619943 1.709263 1.614427 1.522313 我使用的剧本比孟和正义勋爵做的还要多: from matplotlib import rc from sklearn import mixture import matplotlib.pyplot as plt import numpy as np impo

我想做一个混合1D高斯直方图作为图片

谢谢你的照片

我的直方图如下:

我有一个列中包含大量数据(4000000个数字)的文件:

1.727182
1.645300
1.619943
1.709263
1.614427
1.522313
我使用的剧本比孟和正义勋爵做的还要多:

from matplotlib import rc
from sklearn import mixture
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
import matplotlib.ticker as tkr
import scipy.stats as stats

x = open("prueba.dat").read().splitlines()

f = np.ravel(x).astype(np.float)
f=f.reshape(-1,1)
g = mixture.GaussianMixture(n_components=3,covariance_type='full')
g.fit(f)
weights = g.weights_
means = g.means_
covars = g.covariances_

plt.hist(f, bins=100, histtype='bar', density=True, ec='red', alpha=0.5)
plt.plot(f,weights[0]*stats.norm.pdf(f,means[0],np.sqrt(covars[0])), c='red')
plt.rcParams['agg.path.chunksize'] = 10000

plt.grid()
plt.show()
当我运行脚本时,我有下面的情节:

所以,我不知道如何把所有高斯函数的起点和终点放在那里。我是python新手,对使用模块的方式感到困惑。请问,你能帮助我,并指导我如何做这个阴谋

非常感谢

这都是关于重塑的。 首先,你需要重塑f。 对于pdf,请在使用stats.norm.pdf之前重塑形状。同样,在打印前进行排序和重塑

from matplotlib import rc
from sklearn import mixture
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
import matplotlib.ticker as tkr
import scipy.stats as stats

# x = open("prueba.dat").read().splitlines()

# create the data
x = np.concatenate((np.random.normal(5, 5, 1000),np.random.normal(10, 2, 1000)))

f = np.ravel(x).astype(np.float)
f=f.reshape(-1,1)
g = mixture.GaussianMixture(n_components=3,covariance_type='full')
g.fit(f)
weights = g.weights_
means = g.means_
covars = g.covariances_

plt.hist(f, bins=100, histtype='bar', density=True, ec='red', alpha=0.5)

f_axis = f.copy().ravel()
f_axis.sort()
plt.plot(f_axis,weights[0]*stats.norm.pdf(f_axis,means[0],np.sqrt(covars[0])).ravel(), c='red')

plt.rcParams['agg.path.chunksize'] = 10000

plt.grid()
plt.show()

哪一行给出了这个错误?我想是高斯混合的那一部分,我不太清楚。如果我只做柱状图,没有问题。谢谢孟,但我想看到高斯柱状图与我的文件数据分开。问题是我有4000000个数据,我不知道如何指示高斯曲线的起点或终点。我现在使用整形,我的脚本中有一个错误:ValueError:操作数不能与形状(4000000,1)(3,1)一起广播哪一行给出了错误?如果你能提供数据,我可以使用你的数据。这里我只是在编一些数据。当然。谢谢我如何向您发送数据?太好了。!!这种情节我想做。我的柱状图在这个博客的开头。我将发布我的脚本,问题是:我认为plt.plot(f,weights[0]*stats.norm.pdf(f,means[0],np.sqrt(covars[0])),c='red')这一行需要更改和添加其他行,但我不知道如何更改。拜托,你能在下一部分看到我的剧本吗。非常感谢。我想你缺少的是分类步骤。我更新了我的答案。