how to calculate BIC, score... WITHOUT fit?
我知道感谢 scikit 工具,我们可以很容易地计算出高斯混合模型的 BIC 或分数,如下所示。
1 2 3 | 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?
我可以设置为
1 2 3 4 | clf = mixture.GaussianMixture(n_components=3, covariance_type='full') clf.weights_=weights_list clf.means_=means_list clf.covariances_=covariances_list |
或
1 2 3 | clf.weights_init=weights_list clf.means_init=means_list clf.precisions_init =np.linalg.inv(covariances_list) |
但是当我尝试使用 bic 时,
1 | bic=clf.bic(data) |
我收到错误消息说
sklearn.exceptions.NotFittedError:此 GaussianMixture 实例尚未拟合。在使用此方法之前,使用适当的参数调用"fit"。
我不想跑步,因为它会改变给定的权重、均值和协方差。
我能做什么?
谢谢
您需要设置这三个变量以通过 check_is_fitted 测试:
所以,这里用这个方法计算一下
1 2 | from sklearn.mixture.gaussian_mixture import _compute_precision_cholesky precisions_cholesky = _compute_precision_cholesky(covariances_list, 'full') |
将 "full" 更改为适当的协方差类型,然后使用
将结果设置为 clf
1 | clf.precisions_cholesky_ = precisions_cholesky |
确保所有这些变量的形状与您的数据正确对应。