Python 如何使用sklearn实现一维高斯混合直方图?
我想做一个混合1D高斯直方图作为图片 谢谢你的照片 我的直方图如下: 我有一个列中包含大量数据(4000000个数字)的文件: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
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')这一行需要更改和添加其他行,但我不知道如何更改。拜托,你能在下一部分看到我的剧本吗。非常感谢。我想你缺少的是分类步骤。我更新了我的答案。