【问题标题】:Fit gaussians (or other distributions) on my data using python使用 python 在我的数据上拟合高斯(或其他分布)
【发布时间】:2017-07-05 19:44:53
【问题描述】:

我有一个特征数据库,一个 2D np.array(2000 个样本,每个样本包含 100 个特征,2000 X 100)。我想使用 python 将高斯分布拟合到我的数据库中。我的代码如下:

data = load_my_data() # loads a np.array with size 2000x200
clf = mixture.GaussianMixture(n_components= 50, covariance_type='full')
clf.fit(data)

我不确定 covariance_type 等参数以及如何调查拟合是否成功。

编辑:我调试代码以调查 clf.means_ 发生了什么,显然它产生了一个矩阵 n_components X size_of_features 50 X 20)。有没有办法可以检查拟合是否成功,或绘制数据?高斯混合的替代品是什么(例如指数混合,我找不到任何可用的实现)?

【问题讨论】:

    标签: python database gaussian


    【解决方案1】:

    我认为你正在使用 sklearn 包。

    一旦你适应了,然后输入

    print clf.means_
    

    如果有输出,则拟合数据,如果出现错误,则不拟合。

    希望对你有所帮助。

    【讨论】:

    • 这不是一个答案,因为我想知道的是这是否合适。
    • 你的意思是要判断配件的性能,我错过了理解你的问题。那么也许可以试试clf.aic(data)clf.bic(data)
    • aic 和 bic 到底可接受的值是多少?
    • 我得到了不同数量的组件的几个值,aic 和 bic 的结果肯定超过 100。
    • 对不起,我不确定,我只知道越小越好。
    【解决方案2】:

    您可以使用 PCA 对 3D 空间(假设)进行降维,然后绘制均值和数据。

    【讨论】:

      【解决方案3】:

      在尝试识别分布之前总是首选选择一组减少的候选者(换句话说,使用 Cullen & Frey 拒绝不太可能的候选者),然后选择最佳结果的拟合优度,

      您可以在 scipy.xml 中创建所有可用发行版的列表。具有两个分布和随机数据的示例:

      import numpy as np
      import scipy.stats as st
      
      data = np.random.random(10000)
      #Specify all distributions here
      distributions = [st.laplace, st.norm]
      mles = []
      
      for distribution in distributions:
          pars = distribution.fit(data)
          mle = distribution.nnlf(pars, data)
          mles.append(mle)
      
      results = [(distribution.name, mle) for distribution, mle in 
      zip(distributions, mles)]
      best_fit = sorted(zip(distributions, mles), key=lambda d: d[1])[0]
      print 'Best fit reached using {}, MLE value: {}'.format(best_fit[0].name, best_fit[1])
      

      【讨论】:

        【解决方案4】:

        我了解,您可能更喜欢对两种不同的分布进行回归,而不是将它们拟合到算术曲线上。如果是这种情况,您可能有兴趣将一个与另一个进行对比,并进行线性(或多项式)回归,检查系数 如果是这种情况,两个分布的线性回归可能会告诉您是否存在线性相关。 Linear Regression using Scipy documentation

        【讨论】:

          猜你喜欢
          • 2015-10-10
          • 1970-01-01
          • 2017-08-30
          • 2022-01-19
          • 2016-01-15
          • 2016-11-10
          • 2019-03-06
          • 2013-05-14
          • 2013-03-07
          相关资源
          最近更新 更多