scipy提供了一种适合单个对数正态分布的好方法。我看到scikit learn有能力拟合正态(高斯)混合物。有没有一种简单的方法来拟合两个对数正态分布的混合物?如果没有,是否有一种更好的方法可以"手动"优化参数,要么直接使用scipy.optimize,要么将混合物分布定义为scipy.stats.rv_continous的子类?
我偶然发现了这个,它对我来说很好:
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)