高斯混合模型#

class sklearn.mixture.GaussianMixture(n_components=1, *, covariance_type='full', tol=0.001, reg_covar=1e-06, max_iter=100, n_init=1, init_params='kmeans', weights_init=None, means_init=None, precisions_init=None, random_state=None, warm_start=False, verbose=0, verbose_interval=10)[源码]#

高斯混合模型。

高斯混合模型概率分布的表示。此类别用于估计高斯混合分布的参数。

更多信息请参见用户指南

版本 0.18 中新增。

参数:
n_components整型, 默认=1

混合组件的数量。

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

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

  • 'full':每个组件都有自己的通用协方差矩阵。

  • 'tied':所有组件共享相同的通用协方差矩阵。

  • 'diag':每个组件都有自己的对角协方差矩阵。

  • 'spherical':每个组件都有自己的单一方差。

有关使用 covariance_type 的示例,请参阅高斯混合模型选择

tol浮点型, 默认=1e-3

收敛阈值。当 EM 迭代的下界平均增益低于此阈值时,迭代将停止。

reg_covar浮点型, 默认=1e-6

添加到协方差对角线的非负正则化项。用于确保协方差矩阵都是正定的。

max_iter整型, 默认=100

要执行的 EM 迭代次数。

n_init整型, 默认=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++' 作为初始化方法。

weights_init类数组, 形状为 (n_components, ), 默认=None

用户提供的初始权重。如果为 None,权重将使用 init_params 方法进行初始化。

means_init类数组, 形状为 (n_components, n_features), 默认=None

用户提供的初始均值。如果为 None,均值将使用 init_params 方法进行初始化。

precisions_init类数组, 默认=None

用户提供的初始精度(协方差矩阵的逆)。如果为 None,精度将使用 'init_params' 方法进行初始化。其形状取决于 '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'
random_state整型, RandomState 实例或 None, 默认=None

控制用于初始化参数(参见 init_params)的方法所使用的随机种子。此外,它还控制从已拟合分布中生成随机样本(参见 sample 方法)。传递一个整型值可确保在多次函数调用中输出可复现。参见术语表

warm_start布尔型, 默认=False

如果 'warm_start' 为 True,则上次拟合的结果将用作下一次调用 fit() 的初始化。当在类似问题上多次调用 fit 时,这可以加快收敛速度。在这种情况下,'n_init' 将被忽略,并且在首次调用时只会进行一次初始化。在后续调用中,训练将从上次中断的地方开始。参见术语表

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'

有关使用协方差的示例,请参阅GMM 协方差

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_类数组

每个混合组件的精度矩阵的乔利斯基分解。精度矩阵是协方差矩阵的逆。协方差矩阵是对称正定的,因此高斯混合可以通过精度矩阵等效地参数化。存储精度矩阵而不是协方差矩阵可以更有效地在测试时计算新样本的对数似然。其形状取决于 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_布尔型

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

n_iter_整型

EM 的最佳拟合达到收敛所需的步数。

lower_bound_浮点型

EM 最佳拟合的对数似然(训练数据相对于模型)的下界值。

lower_bounds_类数组, 形状为 (n_iter_,)

EM 最佳拟合每次迭代的对数似然下界值列表。

n_features_in_整型

拟合过程中见到的特征数量。

版本 0.24 中新增。

feature_names_in_ndarray, 形状为 (n_features_in_,)

拟合过程中见到的特征名称。仅当 X 的所有特征名称都是字符串时才定义。

版本 1.0 中新增。

另请参阅

BayesianGaussianMixture

使用变分推断拟合高斯混合模型。

示例

>>> import numpy as np
>>> from sklearn.mixture import GaussianMixture
>>> X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]])
>>> gm = GaussianMixture(n_components=2, random_state=0).fit(X)
>>> gm.means_
array([[10.,  2.],
       [ 1.,  2.]])
>>> gm.predict([[0, 0], [12, 3]])
array([1, 0])

有关高斯混合模型与其他聚类算法的比较,请参见在玩具数据集上比较不同的聚类算法

aic(X)[源码]#

输入X上当前模型的赤池信息准则。

有关所用AIC公式的更多详细信息,请参阅此数学部分

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

输入样本。

返回值:
aic浮点型

值越低越好。

bic(X)[源码]#

输入X上当前模型的贝叶斯信息准则。

有关所用BIC公式的更多详细信息,请参阅此数学部分

有关使用 bic 信息准则进行GMM选择的示例,请参阅高斯混合模型选择

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

输入样本。

返回值:
bic浮点型

值越低越好。

fit(X, y=None)[源码]#

使用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)[源码]#

使用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()[源码]#

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

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

返回值:
routingMetadataRequest

一个封装路由信息的MetadataRequest对象。

get_params(deep=True)[源码]#

获取此估计器的参数。

参数:
deep布尔型, 默认=True

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

返回值:
params字典

参数名称及其对应的值。

predict(X)[源码]#

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

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

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

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

组件标签。

predict_proba(X)[源码]#

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

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

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

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

X中每个样本的每个高斯组件的密度。

sample(n_samples=1)[源码]#

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

参数:
n_samples整型, 默认=1

要生成的样本数量。

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

随机生成的样本。

y数组, 形状为 (nsamples,)

组件标签。

score(X, y=None)[源码]#

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

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

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

y忽略

未使用,按惯例为保持API一致性而存在。

返回值:
log_likelihood浮点型

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

score_samples(X)[源码]#

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

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

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

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

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

set_params(**params)[源码]#

设置此估计器的参数。

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

参数:
**params字典

估计器参数。

返回值:
self估计器实例

估计器实例。