gpt4 book ai didi

numpy - 拟合部分高斯

转载 作者:行者123 更新时间:2023-12-01 23:44:26 26 4
gpt4 key购买 nike

我正在尝试使用scikit-learn来拟合高斯总和。因为 scikit-learn GaussianMixture看起来比使用 curve_fit 更强大。

问题:即使是单个高斯峰的截断部分,它也不能很好地拟合:

from sklearn import mixture
import matplotlib.pyplot
import matplotlib.mlab
import numpy as np

clf = mixture.GaussianMixture(n_components=1, covariance_type='full')
data = np.random.randn(10000)
data = [[x] for x in data]
clf.fit(data)
data = [item for sublist in data for item in sublist]
rangeMin = int(np.floor(np.min(data)))
rangeMax = int(np.ceil(np.max(data)))
h = matplotlib.pyplot.hist(data, range=(rangeMin, rangeMax), normed=True);
plt.plot(np.linspace(rangeMin, rangeMax),
mlab.normpdf(np.linspace(rangeMin, rangeMax),
clf.means_, np.sqrt(clf.covariances_[0]))[0])

给出 enter image description here现在正在改变data = [[x] for x in data]data = [[x] for x in data if x <0]为了截断分布返回 enter image description here有什么想法如何正确安装截断吗?

注意:分布不一定会在中间被截断,可能会剩下完整分布的 50% 到 100% 之间的内容。

如果有人能给我指出替代包,我也会很高兴。我只尝试过 curve_fit,但一旦涉及两个以上的峰值,就无法让它做任何有用的事情。

最佳答案

有点粗暴,但简单的解决方案是将曲线分成两半( data = [[x] for x in data if x < 0] ),镜像左侧部分( data.append([-data[d][0]]) ),然后进行常规高斯拟合。

import numpy as np
from sklearn import mixture
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

np.random.seed(seed=42)
n = 10000

clf = mixture.GaussianMixture(n_components=1, covariance_type='full')

#split the data and mirror it
data = np.random.randn(n)
data = [[x] for x in data if x < 0]
n = len(data)
for d in range(n):
data.append([-data[d][0]])

clf.fit(data)
data = [item for sublist in data for item in sublist]
rangeMin = int(np.floor(np.min(data)))
rangeMax = int(np.ceil(np.max(data)))
h = plt.hist(data[0:n], bins=20, range=(rangeMin, rangeMax), normed=True);
plt.plot(np.linspace(rangeMin, rangeMax),
mlab.normpdf(np.linspace(rangeMin, rangeMax),
clf.means_, np.sqrt(clf.covariances_[0]))[0] * 2)

plt.show()

enter image description here

关于numpy - 拟合部分高斯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41924857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com