微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sklearn - 来自 GaussianMixture 的样本,没有拟合

如何解决sklearn - 来自 GaussianMixture 的样本,没有拟合

我想使用 GaussianMixture 来生成随机数据。 参数不应该从数据中学习,而是提供。

GaussianMixture 允许提供权重、均值、精度的初始值,但仍然无法调用“样本”。

示例:

import numpy as np
from sklearn.mixture import GaussianMixture
d = 10
k = 2
_weights = np.random.gamma(shape=1,scale=1,size=k)
data_gmm = GaussianMixture(n_components=k,weights_init=_weights / _weights.sum(),means_init=np.random.random((k,d)) * 10,precisions_init=[np.diag(np.random.random(d)) for _ in range(k)])
data_gmm.sample(100)

这会抛出:

NotFittedError: This GaussianMixture instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.

我试过了:

  • 调用 _initialize_parameters() - 这还需要提供数据矩阵,并且不会初始化采样所需的 covariances 变量。
  • 调用 set_params() - 这不允许为采样使用的属性提供值。

任何帮助将不胜感激。

解决方法

您可以手动设置所有属性,这样您就不必适应 GaussianMixture

您需要设置weights_means_covariances_如下:

import numpy as np
from sklearn.mixture import GaussianMixture
d = 10
k = 2
_weights = np.random.gamma(shape=1,scale=1,size=k)
data_gmm = GaussianMixture(n_components=k)
data_gmm.weights_ = _weights / _weights.sum()
data_gmm.means_ = np.random.random((k,d)) * 10
data_gmm.covariances_ = [np.diag(np.random.random(d)) for _ in range(k)]
data_gmm.sample(100)

注意:您可能需要根据您的用例修改这些参数值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。