如何计算BIC,得分......不合适?

时间:2018-04-04 08:49:49

标签: python-3.x scikit-learn

我知道,由于使用scikit工具,我们可以轻松计算出高斯混合模型的BIC或分数。

clf.fit(data)
bic=clf.bic(data)
score=clf.score(data)

http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html

但我的问题是,当我已经拥有权重,均值,协方差和数据时,如何在不使用拟合方法的情况下计算bic或得分?

我可以设为

clf = mixture.GaussianMixture(n_components=3, covariance_type='full')
clf.weights_=weights_list
clf.means_=means_list
clf.covariances_=covariances_list

clf.weights_init=weights_list
clf.means_init=means_list
clf.precisions_init =np.linalg.inv(covariances_list)

但是当我试图获得bic时,

bic=clf.bic(data)

我收到错误消息

sklearn.exceptions.NotFittedError:此GaussianMixture实例尚未安装。在使用此方法之前,请使用适当的参数调用“fit”。

我不想跑步,因为它会改变给定的重量,手段和协方差。 我能做什么? 感谢

1 个答案:

答案 0 :(得分:0)

您需要设置这三个变量以通过check_is_fitted测试:'weights_', 'means_', 'precisions_cholesky_''weights_''means_',您正确设置。要计算'precisions_cholesky_',您需要拥有covariances_

所以,只需使用this method here

计算
from sklearn.mixture.gaussian_mixture import _compute_precision_cholesky
precisions_cholesky = _compute_precision_cholesky(covariances_list, 'full')

将“full”更改为适当的协方差类型,然后使用

将结果设置为clf
clf.precisions_cholesky_ = precisions_cholesky

确保所有这些变量的形状与您的数据正确对应。