【问题标题】:how to calculate BIC, score... WITHOUT fit?如何计算 BIC,得分...不适合?
【发布时间】:2018-09-13 18:10:36
【问题描述】:

我知道借助 scikit 工具,我们可以轻松计算高斯混合模型的 BIC 或分数,如下所示。

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

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

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

我可以设置为

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”。

我不想运行 fit,因为它会改变给定的权重、均值和协方差。 我能做些什么? 谢谢

【问题讨论】:

标签: python-3.x scikit-learn


【解决方案1】:

您需要设置这三个变量以通过 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')

将“完整”更改为适当的协方差类型,然后使用 clf 将结果设置为

clf.precisions_cholesky_ = precisions_cholesky

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多