Bayesian information criterion和 Akaike information criterion中的模型参数个数(自由度)计算 | 以高斯混合分布为例

在Scikit-Learn库里面调用sklearn.mixture.GaussianMixture,有3个重要的属性n_clusters, n_weightsn_covariance,分别对应着簇中心的数量、每个簇的重要性和每个簇的协方差矩阵。

重要概念:
  1. BIC 贝叶斯信息准则
    B I C = l o g ( m ) p − 2 l o g ( L ^ ) BIC = log(m)p-2log(\hat L) BIC=log(m)p2log(L^)

    其中m是样本数,p是模型参数个数, L ^ \hat L L^是最大似然函数的值

  2. AIC 赤池信息准则
    A I C = 2 p − 2 l o g ( L ^ ) AIC=2p-2log(\hat L) AIC=2p2log(L^)

  3. 自由度
    计算某一统计量时,取值不受限制的变量个数。通常df=n-k。其中n为样本数量,k为被限制的条件数或变量个数,或计算某一统计量时用到其它独立统计量的个数

问题:p模型的参数个数(即自由度)该如何计算?

假设n_clusters=3,设数据集的维度为n_dims=2
由于每个簇都有一个权重,而且权重和为1,则关于权重的参数个数(即自由度)为2。同样地,对于 n × n n\times n n×n协方差矩阵,它自由度不是 n 2 n^2 n2,而是 1 + 2 + ⋅ ⋅ ⋅ + n = n ( n + 1 ) 2 1+2+···+n=\frac{n(n+1)}{2} 1+2++n=2n(n+1)。下面以python为例,手动计算GaussianMixture的BIC和AIC:

from sklearn.mixture import GaussianMixture

gm = GaussianMixture(n_components=3, n_init=10, random_state=42)
gm.fit(X)

n_clusters = 3
n_dims = 2
n_params_for_weights = n_clusters - 1
n_params_for_means = n_clusters * n_dims
n_params_for_covariance = n_clusters * n_dims * (n_dim + 1) // 2
n_params = n_params_for_weights + n_params_for_means + n_params_for_covariance
max_log_likelihood = gm.score(X) * len(X) # log(^L)
bic = np.log(len(X)) * n_params - 2 * max_log_likelihood
aic = 2 * n_params - 2 * max_log_likelihood

你可能感兴趣的:(机器学习理论)