贝叶斯高斯混合模型#

class sklearn.mixture.BayesianGaussianMixture(*, n_components=1, covariance_type='full', tol=0.001, reg_covar=1e-06, max_iter=100, n_init=1, init_params='kmeans', weight_concentration_prior_type='dirichlet_process', weight_concentration_prior=None, mean_precision_prior=None, mean_prior=None, degrees_of_freedom_prior=None, covariance_prior=None, random_state=None, warm_start=False, verbose=0, verbose_interval=10)[source]#

高斯混合模型的变分贝叶斯估计。

此类允许推断高斯混合分布参数的近似后验分布。可以从数据中推断出有效的组件数量。

此类实现了两种类型的权重分布先验:具有狄利克雷分布的有限混合模型和具有狄利克雷过程的无限混合模型。在实践中,狄利克雷过程推理算法是近似的,并使用具有固定最大组件数的截断分布(称为“Stick-breaking”表示)。实际使用的组件数量几乎总是取决于数据。

版本 0.18 中添加。

用户指南 中了解更多信息。

参数:
n_componentsint, 默认值=1

混合组件的数量。根据数据和weight_concentration_prior的值,模型可以通过将某些组件weights_设置为非常接近零的值来决定不使用所有组件。因此,有效组件的数量小于 n_components。

covariance_type{'full', 'tied', 'diag', 'spherical'}, 默认值='full'

描述要使用的协方差参数类型的字符串。必须是以下之一:

  • ‘full’(每个组件都有其自身的通用协方差矩阵),

  • ‘tied’(所有组件共享相同的通用协方差矩阵),

  • ‘diag’(每个组件都有其自身的对角协方差矩阵),

  • ‘spherical’(每个组件都有其自身的单个方差)。

tolfloat, 默认值=1e-3

收敛阈值。当似然函数(关于模型的训练数据的似然函数)的下界平均增益低于此阈值时,EM 迭代将停止。

reg_covarfloat, 默认值=1e-6

添加到协方差对角线的非负正则化。允许确保所有协方差矩阵都是正定的。

max_iterint, 默认值=100

要执行的 EM 迭代次数。

n_initint, 默认值=1

要执行的初始化次数。保留具有最高似然函数下界值的結果。

init_params{'kmeans', 'k-means++', 'random', 'random_from_data'}, 默认值='kmeans'

用于初始化权重、均值和协方差的方法。字符串必须是以下之一:

  • ‘kmeans’:使用 kmeans 初始化责任。

  • ‘k-means++’:使用 k-means++ 方法进行初始化。

  • ‘random’:随机初始化责任。

  • ‘random_from_data’:初始均值是随机选择的数据点。

v1.1 版本中的更改:init_params 现在接受 'random_from_data' 和 'k-means++' 作为初始化方法。

weight_concentration_prior_type{'dirichlet_process', 'dirichlet_distribution'}, 默认值='dirichlet_process'

描述权重集中先验类型的字符串。

weight_concentration_priorfloat 或 None, 默认值=None

权重分布(狄利克雷)上每个组件的狄利克雷集中度。这在文献中通常被称为 gamma。较高的集中度会在中心放置更多质量,并将导致更多组件处于活动状态,而较低的集中度参数将导致在混合权重单纯形的边缘放置更多质量。参数的值必须大于 0。如果为 None,则将其设置为1. / n_components

mean_precision_priorfloat 或 None, 默认值=None

均值分布(高斯)上的精度先验。控制可以放置均值的范围。较大的值会将聚类均值集中在mean_prior周围。参数的值必须大于 0。如果为 None,则将其设置为 1。

mean_priorarray-like, shape (n_features,), 默认值=None

均值分布(高斯)上的先验。如果为 None,则将其设置为 X 的均值。

degrees_of_freedom_priorfloat 或 None, 默认值=None

协方差分布(Wishart 分布)的自由度先验。如果为 None,则设置为 n_features

covariance_prior浮点数或数组,默认值为 None

协方差分布(Wishart 分布)的先验。如果为 None,则使用 X 的协方差初始化经验协方差先验。形状取决于 covariance_type

(n_features, n_features) if 'full',
(n_features, n_features) if 'tied',
(n_features)             if 'diag',
float                    if 'spherical'
random_state整数、RandomState 实例或 None,默认值为 None

控制提供给用于初始化参数的方法的随机种子(参见 init_params)。此外,它还控制从拟合分布生成随机样本(参见方法 sample)。传递一个整数可在多次函数调用中获得可重复的输出。参见 术语表

warm_start布尔值,默认值为 False

如果 ‘warm_start’ 为 True,则上次拟合的解将用作下次 fit() 调用的初始化。当对类似问题多次调用 fit() 时,这可以加快收敛速度。参见 术语表

verbose整数,默认值为 0

启用详细输出。如果为 1,则打印当前初始化和每个迭代步骤。如果大于 1,则还会打印对数概率和每个步骤所需的时间。

verbose_interval整数,默认值为 10

下一次打印之前完成的迭代次数。

属性:
weights_形状为 (n_components,) 的类数组

每个混合成分的权重。

means_形状为 (n_components, n_features) 的类数组

每个混合成分的均值。

covariances_类数组

每个混合成分的协方差。形状取决于 covariance_type

(n_components,)                        if 'spherical',
(n_features, n_features)               if 'tied',
(n_components, n_features)             if 'diag',
(n_components, n_features, n_features) if 'full'
precisions_类数组

混合中每个成分的精度矩阵。精度矩阵是协方差矩阵的逆。协方差矩阵是对称正定的,因此高斯混合可以用精度矩阵等效地参数化。存储精度矩阵而不是协方差矩阵可以提高在测试时计算新样本对数似然的效率。形状取决于 covariance_type

(n_components,)                        if 'spherical',
(n_features, n_features)               if 'tied',
(n_components, n_features)             if 'diag',
(n_components, n_features, n_features) if 'full'
precisions_cholesky_类数组

每个混合成分的精度矩阵的 Cholesky 分解。精度矩阵是协方差矩阵的逆。协方差矩阵是对称正定的,因此高斯混合可以用精度矩阵等效地参数化。存储精度矩阵而不是协方差矩阵可以提高在测试时计算新样本对数似然的效率。形状取决于 covariance_type

(n_components,)                        if 'spherical',
(n_features, n_features)               if 'tied',
(n_components, n_features)             if 'diag',
(n_components, n_features, n_features) if 'full'
converged_布尔值

达到最佳拟合推理的收敛时为 True,否则为 False。

n_iter_整数

最佳拟合推理达到收敛所使用的步骤数。

lower_bound_浮点数

最佳拟合推理的模型证据(训练数据)的下界值。

weight_concentration_prior_元组或浮点数

权重分布(狄利克雷分布)上每个成分的狄利克雷浓度。类型取决于 weight_concentration_prior_type

(float, float) if 'dirichlet_process' (Beta parameters),
float          if 'dirichlet_distribution' (Dirichlet parameters).

较高的浓度将更多的质量放在中心,并将导致更多成分被激活,而较低的浓度参数将导致更多的质量位于单纯形的边缘。

weight_concentration_形状为 (n_components,) 的类数组

权重分布(狄利克雷分布)上每个成分的狄利克雷浓度。

mean_precision_prior_浮点数

均值分布(高斯分布)的精度先验。控制可以放置均值的范围。较大的值会将聚类均值集中在 mean_prior 周围。如果 mean_precision_prior 设置为 None,则 mean_precision_prior_ 设置为 1。

mean_precision_形状为 (n_components,) 的类数组

均值分布(高斯分布)上每个成分的精度。

mean_prior_形状为 (n_features,) 的类数组

均值分布(高斯分布)的先验。

degrees_of_freedom_prior_浮点数

协方差分布(Wishart 分布)的自由度先验。

degrees_of_freedom_形状为 (n_components,) 的类数组

模型中每个成分的自由度。

covariance_prior_浮点数或类数组

协方差分布(Wishart 分布)的先验。形状取决于 covariance_type

(n_features, n_features) if 'full',
(n_features, n_features) if 'tied',
(n_features)             if 'diag',
float                    if 'spherical'
n_features_in_整数

拟合期间看到的特征数量。

在 0.24 版本中添加。

feature_names_in_形状为 (n_features_in_,) 的 ndarray

拟合期间看到的特征名称。仅当 X 的特征名称全部为字符串时才定义。

在 1.0 版本中添加。

另请参阅

高斯混合模型

使用 EM 拟合有限高斯混合。

参考文献

示例

>>> import numpy as np
>>> from sklearn.mixture import BayesianGaussianMixture
>>> X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [12, 4], [10, 7]])
>>> bgm = BayesianGaussianMixture(n_components=2, random_state=42).fit(X)
>>> bgm.means_
array([[2.49... , 2.29...],
       [8.45..., 4.52... ]])
>>> bgm.predict([[0, 0], [9, 3]])
array([0, 1])
fit(X, y=None)[source]#

使用EM算法估计模型参数。

该方法拟合模型n_init次,并设置具有最大似然或下界的模型参数。在每次尝试中,该方法会在E步骤和M步骤之间迭代max_iter次,直到似然或下界的变化小于tol,否则会引发ConvergenceWarning警告。如果warm_startTrue,则忽略n_init,并在第一次调用时执行单次初始化。在连续调用时,训练将从上次中断的地方继续。

参数:
X形状为 (n_samples, n_features) 的类数组

n_features 维数据的列表。每一行对应一个数据点。

y忽略

未使用,出于 API 一致性约定而保留。

返回:
self对象

拟合后的混合模型。

fit_predict(X, y=None)[source]#

使用 X 估计模型参数并预测 X 的标签。

该方法拟合模型 n_init 次,并设置具有最大似然或下界的模型参数。在每次尝试中,该方法会在 E 步骤和 M 步骤之间迭代max_iter次,直到似然或下界的变化小于tol,否则会引发 ConvergenceWarning 警告。拟合后,它会预测输入数据点的最可能标签。

0.20 版本中新增。

参数:
X形状为 (n_samples, n_features) 的类数组

n_features 维数据的列表。每一行对应一个数据点。

y忽略

未使用,出于 API 一致性约定而保留。

返回:
labels数组,形状为 (n_samples,)

组件标签。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查看 用户指南,了解路由机制的工作原理。

返回:
routingMetadataRequest

一个 MetadataRequest,封装了路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deep布尔值,默认为 True

如果为 True,则将返回此估计器和作为估计器的包含子对象的参数。

返回:
params字典

参数名称与其值的映射。

predict(X)[source]#

使用训练好的模型预测 X 中数据样本的标签。

参数:
X形状为 (n_samples, n_features) 的类数组

n_features 维数据的列表。每一行对应一个数据点。

返回:
labels数组,形状为 (n_samples,)

组件标签。

predict_proba(X)[source]#

评估每个样本的组件密度。

参数:
X形状为 (n_samples, n_features) 的类数组

n_features 维数据的列表。每一行对应一个数据点。

返回:
resp数组,形状为 (n_samples, n_components)

X 中每个样本的每个高斯分量的密度。

sample(n_samples=1)[source]#

从拟合的高斯分布生成随机样本。

参数:
n_samples整数,默认为 1

要生成的样本数。

返回:
X数组,形状为 (n_samples, n_features)

随机生成的样本。

y数组,形状为 (nsamples,)

组件标签。

score(X, y=None)[source]#

计算给定数据 X 的每个样本的平均对数似然。

参数:
X形状为 (n_samples, n_dimensions) 的类数组

n_features 维数据的列表。每一行对应一个数据点。

y忽略

未使用,出于 API 一致性约定而保留。

返回:
log_likelihood浮点数

在高斯混合模型下X的对数似然。

score_samples(X)[source]#

计算每个样本的对数似然。

参数:
X形状为 (n_samples, n_features) 的类数组

n_features 维数据的列表。每一行对应一个数据点。

返回:
log_prob数组,形状为 (n_samples,)

在当前模型下X中每个样本的对数似然。

set_params(**params)[source]#

设置此估计器的参数。

此方法适用于简单的估计器以及嵌套对象(例如 Pipeline)。后者具有 <component>__<parameter> 形式的参数,因此可以更新嵌套对象的每个组件。

参数:
**params字典

估计器参数。

返回:
self估计器实例

估计器实例。