GaussianMixture 使用组件参数初始化 - sklearn

has*_*uke 5 python numpy gaussian scikit-learn mixture

我想使用sklearn.mixture.GaussianMixture来存储高斯混合模型,以便我以后可以使用它来使用score_samples方法在样本点生成样本或值。这是一个示例,其中组件具有以下权重、均值和协方差

import numpy as np
weights = np.array([0.6322941277066596, 0.3677058722933399])
mu = np.array([[0.9148052872961359, 1.9792961751316835], 
               [-1.0917396392992502, -0.9304220945910037]])
sigma = np.array([[[2.267889129267119, 0.6553245618368836], 
                        [0.6553245618368835, 0.6571014653342457]], 
                       [[0.9516607767206848, -0.7445831474157608], 
                        [-0.7445831474157608, 1.006599716443763]]])
Run Code Online (Sandbox Code Playgroud)

然后我初始化混合物如下

from sklearn import mixture
gmix = mixture.GaussianMixture(n_components=2, covariance_type='full')
gmix.weights_ = weights   # mixture weights (n_components,) 
gmix.means_ = mu          # mixture means (n_components, 2) 
gmix.covariances_ = sigma  # mixture cov (n_components, 2, 2) 
Run Code Online (Sandbox Code Playgroud)

最后,我尝试根据导致错误的参数生成示例:

x = gmix.sample(1000)
NotFittedError: This GaussianMixture instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.
Run Code Online (Sandbox Code Playgroud)

据我了解 GaussianMixture 旨在使用 Gaussian 的混合物拟合样本,但有没有办法为其提供最终值并从那里继续?

has*_*uke 4

你太摇滚了,JPPetersen!看到你的答案后,我比较了使用方法引入的变化fit。看来初始实例化并没有创建 的所有属性gmix。具体来说,它缺少以下属性,

covariances_
means_
weights_
converged_
lower_bound_
n_iter_
precisions_
precisions_cholesky_
Run Code Online (Sandbox Code Playgroud)

前三个是在分配给定输入时引入的。其中,对于我的应用程序,我需要的唯一属性是precisions_cholesky_逆协方差矩阵的乔列斯基分解。作为最低要求,我添加如下,

gmix.precisions_cholesky_ = np.linalg.cholesky(np.linalg.inv(sigma)).transpose((0, 2, 1))
Run Code Online (Sandbox Code Playgroud)