【问题标题】:Getting AIC of lognormal distributions using scikit's GMM使用 scikit 的 GMM 获取对数正态分布的 AIC
【发布时间】:2022-01-08 13:07:55
【问题描述】:

我使用以下数据生成:

from scipy.stats import skewnorm
import matplotlib.pyplot as plt
import numpy as np

numValues = 10000
maxValue = 100
skewness = -5   
data = skewnorm.rvs(a = skewness,loc=maxValue, size=numValues) 

对于高斯模型,我从下面计算了 AIC:

from sklearn.mixture import GaussianMixture
gmm = GaussianMixture(n_components = 1).fit(X=np.expand_dims(data,1))
gmm_aic = gmm.aic(X=np.expand_dims(data,1))
gmm_bic = gmm.bic(X=np.expand_dims(data,1))

对于对数正态模型,我取数据的对数并从下面拟合高斯:

log_gmm = GaussianMixture(n_components = 1).fit(X=np.expand_dims(np.log(data),1))

并在 data 而非 np.log(data)

上计算此模型的 AIC
log_gmm_aic = log_gmm.aic(X=np.expand_dims(data,1))
log_gmm_bic = log_gmm.bic(X=np.expand_dims(data,1))

这样,我在这两种情况下的 AIC 和 BIC 值都是:

Guassian - AIC: 18790.27 BIC:18804.69 

lognormal - AIC: 2231500479614.06 BIC:2231500479628.48

价值似乎无法比拟。 如果我想计算对数正态模型的 AIC 和 BIC,我做错了什么?

【问题讨论】:

标签: python scikit-learn distribution model-fitting gaussian-mixture-model


【解决方案1】:

简短的回答是,您不应该比较具有不同响应变量尺度的模型的 aic。请参阅 thisthis 之类的帖子。

所以例如你可以比较

gmm = GaussianMixture(n_components = 1).fit(X=np.expand_dims(data,1))
print(gmm.aic(X=np.expand_dims(data,1)))

gmm2 = GaussianMixture(n_components = 2).fit(X=np.expand_dims(data,1))
print(gmm2.aic(X=np.expand_dims(data,1)))

18753.718210403502
17498.87614003799

您可以看到第一个模型的 BIC 比第二个更好。

进一步说明为什么您会得到奇怪的值。对于非对数模型,估计参数为:

gmm.means_
array([[99.2174906]])

gmm.covariances_
array([[[0.38499364]]])

对于您所谓的对数正态数据,您的输入数据在对数刻度上,您可以看到估计的参数在对数刻度上:

log_gmm.means_
array([[4.59729469]])

log_gmm.covariances_
array([[[4.0321591e-05]]])

BIC 和 AIC 源自模型的对数似然性,您必须使用输入数据,因为您想知道给定对数空间的值,它属于集群的概率是多少。

但是你立即注意到你得到了一个负面的 aic:

log_gmm.bic(np.log(np.expand_dims(data,1)))
Out[59]: -73122.88028438632

原因是你的方差非常小,所以在估计概率时,see source code for gmm,你的大部分概率都超过了 1,使得 aic 为正。有关 pdf 值 > 1 的更多详细信息,请参阅this post

最后,如果您想知道您的响应变量或分布是否更好地进行对数转换,则无需使用高斯混合。你可以使用 qqplot 或者基本上是check whether changes are multiplicative or additive

【讨论】:

    猜你喜欢
    • 2012-08-23
    • 1970-01-01
    • 2014-12-12
    • 2021-10-06
    • 2017-11-15
    • 2018-02-21
    • 2020-02-24
    • 1970-01-01
    相关资源
    最近更新 更多