【问题标题】:Fitting a mixture of lognormal distributions in Python在 Python 中拟合对数正态分布的混合
【发布时间】:2016-04-17 21:30:12
【问题描述】:

scipy 提供了一种拟合单个对数正态分布的好方法。我看到scikit-learn 具有拟合正常(高斯)混合物的能力。有没有一种简单的方法来拟合两个对数正态分布的混合?如果没有,是否有一种更好的方法可以直接使用 scipy.optimize 或通过将混合分布定义为 scipy.stats.rv_continuous 的子类来“手动”优化参数?

【问题讨论】:

  • 您可以log-转换您的数据并为其添加GMM,类似于X = np.log(X),但是...我相信没有easy 使用scikit-learn 精确拟合对数正态分布的方法,但是,您始终可以查看GMM code 并自己扩展它。你甚至可以将实现发回scikit-learn
  • scipy 提供了适应对数正态分布位置的灵活性,这将在log 转换中丢失 - 预先做出这个选择感觉有问题,但也许它不在实践。如果事实证明 location 参数确实是必要的,那么扩展 GMM 可能是最好的方法。感谢您的建议!
  • 是的,这就是数据对数转换的主要问题。您没有拟合对数正态混合,而是将高斯混合拟合到对数转换数据。它不一样,但取决于您的应用程序,它可能仍然有效。祝你好运扩展GMM,如果这是要走的路!

标签: python numpy scipy scikit-learn


【解决方案1】:

我偶然发现了这个,它对我很有用:

https://pomegranate.readthedocs.io/en/latest/GeneralMixtureModel.html

示例用法:

from pomegranate import *

x = np.array(df['foo']).reshape(-1, 1)

model = GeneralMixtureModel.from_samples(LogNormalDistribution, n_components=2, X=x)
model.fit(x)
pomegranate_clusters = model.predict(x)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-04
    • 2017-08-31
    • 2020-03-09
    • 2017-11-16
    • 2014-09-22
    • 2023-03-13
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多