【问题标题】:sklearn - sample from GaussianMixture without fittingsklearn - 来自 GaussianMixture 的样本,没有拟合
【发布时间】:2021-10-03 02:34:20
【问题描述】:

我想使用 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() - 这不允许为采样使用的属性提供值。

任何帮助将不胜感激。

【问题讨论】:

    标签: random scikit-learn gmm


    【解决方案1】:

    您可以手动设置所有属性,因此您不必适合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)
    

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

    【讨论】:

    • 这是最优雅的方式吗?我认为 sklearn 不需要我知道应该覆盖哪些内部变量。
    • 嗯,这是使用scikit-learn的GaussianMixture的唯一方法,而不必适应它。
    猜你喜欢
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2017-07-12
    相关资源
    最近更新 更多