【问题标题】:Fit a GMM to a 3D histogram in scikit-learn将 GMM 拟合到 scikit-learn 中的 3D 直方图
【发布时间】:2015-05-12 00:26:19
【问题描述】:

scikit-learn 中的混合模型代码适用于列出单个数据点,但如果您有直方图怎么办?也就是说,我对每个体素都有一个密度值,我希望混合模型来近似它。这可能吗?我想一种解决方案是从此直方图中采样值,但这不是必需的。

【问题讨论】:

  • 欢迎来到 slashdot!我对 scikit 了解不多,但是如果您可以发布更多详细信息,包括一些示例代码供讨论,您可能会得到更多回复。
  • 这取决于应用程序。你真的需要高斯混合模型的位置和标准差吗?你用它来分类吗?如果您真的需要高斯混合模型,您可以使用多峰高斯拟合来近似使用高斯混合模型的直方图。但是,如果您只是想要平滑插值,那将不是最简单的方法,在这种情况下,双三次插值之类的方法可能更简单。

标签: scikit-learn mixture-model


【解决方案1】:

Scikit-learn 具有广泛的实用程序和算法,可用于核密度估计,特别集中在从直方图等事物中推断分布。有关示例,请参阅文档 here。如果您对数据的分布没有期望,KDE 可能是一种更通用的方法。

【讨论】:

    【解决方案2】:

    对于二维直方图 Z(您的二维体素数组)

    import numpy as np
    # create the co-ordinate values
    X, Y = np.mgrid[0:Z.shape[0], 0:Z.shape[1]]
    
    # artificially create a list of points from your histogram
    data_points = []
    for x, y, z in zip(X.ravel(), Y.ravel(), Z.ravel()):
        # add the data point / voxel (x, y) as many times as it occurs
        # in the histogram
        for iz in z:
            data_points.append((x, y))
    
    # now fit your GMM
    from sklearn.mixture import GMM
    gmm = GMM()
    gmm.fit(data_points)
    

    不过,正如@Kyle Kastner 指出的那样,有更好的方法可以实现这一目标。首先,您的直方图将被“分箱”,这已经会使您失去一些分辨率。你能在分箱前拿到原始数据吗?

    【讨论】:

      猜你喜欢
      • 2015-08-11
      • 2015-03-25
      • 2013-12-19
      • 2012-08-23
      • 2017-07-13
      • 2015-10-25
      • 2015-02-22
      • 1970-01-01
      • 2021-05-09
      相关资源
      最近更新 更多