【问题标题】:Scikit learn, fitting a gaussian to a histogramScikit学习,将高斯拟合到直方图
【发布时间】:2015-08-11 05:57:20
【问题描述】:

在 scikit-learn 中,使用 GMM 拟合高斯峰似乎适用于离散数据数据点。 有没有一种方法可以将 GMM 与已经分箱或聚合成直方图的数据一起使用?

例如,以下代码是一种变通方法,可在拟合之前将分箱数据转换为离散数据点:

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

def fit_one_peak(x, linspace):
    gmm = mixture.GMM(n_components=1) # gmm for one components
    gmm.fit(x) # train it!
    m1 = gmm.means_
    w1 = gmm.weights_
    return np.exp(gmm.score_samples(linspace)[0]), m1[0][0], w1[0]

def convert_to_signal(d, s):
    c = []
    count = 0
    for i in s:
        for j in range(int(d[count])):  # No floats!
            c.append(i)
        count += 1
    return c

d = [0.5, 2, 5, 3, 1, 0.5]  # y data, which is already binned
s = [0, 1, 2, 3, 4, 5]  # x data

signal = convert_to_signal(d, s)
linspace = np.linspace(s[0], s[-1], len(s))
l, mean, weight = fit_one_peak(signal, linspace)
l = l*(np.max(d)/ np.max(l))  # Normalize the fitted y

fig = plt.figure()
plt.plot(s, d, label='Original')
plt.plot(linspace, l, label='Fitted')
plt.hist(signal, label='Re-binned')
plt.legend()

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    您可能混淆了从一组数据点优化统计模型并通过一组数据点拟合曲线的概念。

    上面引用的一些 scikit-learn 代码正在尝试从一组数据点优化统计模型。换句话说,在这种情况下,您正在尝试估计可能已生成数据点集的源的概率分布参数。有关这方面的更多信息,您可能需要查看this article 的“原则”部分。然后将此信息呈现给观众的方式是一个完全独立的主题。例如,您可以从数据点恢复高斯参数(即均值和标准差),然后在数据直方图上叠加高斯曲线。有关这方面的更多信息,请参阅this link。

    如果您只有直方图数据,即数据集中每个数据项的出现频率,那么您将拥有 [(x0,y0), (x1,y1), ( x2,y2), ..., (xn,yn)]。在这种情况下,您试图通过这些特定数据点拟合曲线,您可以使用最小二乘法之类的方法来完成此操作。有关这方面的更多信息,请参阅 this、this 和 this 链接。

    因此,要从数据集中优化您的高斯概率密度函数,您可以使用 sklearn 的 GMM 模型并将您的数据集直接提供给它(即,将直方图所基于的原始数据提供给它)

    如果您已经拥有直方图的数据,那么您将查看诸如curve_fit 之类的函数。这里只是一个小提示:由于您正在尝试拟合概率分布函数,因此您的数据(即您的 HISTOGRAM 数据的 Y 分量)必须进行归一化以便总和为 1.0。为此,只需将每个频率计数除以所有频率计数的总和即可。

    有关更多信息,您可能需要查看this、this 和this 链接。

    希望这会有所帮助。

    【讨论】:

    • 谢谢你,这帮了我很大的忙。
    • 不客气,很高兴听到这是一个有用的回复。
    猜你喜欢
    • 2015-04-10
    • 2013-11-19
    • 2016-07-05
    • 2014-11-12
    • 2013-01-08
    • 1970-01-01
    • 2018-02-17
    • 2022-01-06
    • 2016-05-01
    相关资源
    最近更新 更多