聚类

K-Means 聚类

class graspologic.cluster.KMeansCluster[源代码]
ari_: list[float] | None

KMeans 聚类。

它计算从单一组件到max_clusters的所有可能模型。 当真实标签已知时,最佳模型由具有最高调整兰德指数(ARI)的模型给出。 否则,最佳模型由具有最高轮廓分数的模型给出。

Parameters:
max_clustersint, default=2.

要考虑的最大集群数。必须为>=2

random_stateint, RandomState instance or None, optional (default=None)

如果是整数,random_state 是随机数生成器使用的种子; 如果是 RandomState 实例,random_state 是随机数生成器; 如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

Attributes:
n_clusters_int

最佳聚类数量。如果给出了y,则基于最大的ARI。否则,基于最高的轮廓分数。

model_KMeans object

拟合的KMeans对象使用了n_clusters_

silhouette_list

为所有可能的聚类数量计算的轮廓分数列表,由 range(2, max_clusters) 给出。

ari_list

仅在给定 y 时计算。为 range(2, max_clusters) 给出的所有可能的聚类数计算的 ARI 值列表。

__init__(max_clusters=2, random_state=None)[源代码]
Parameters:
  • max_clusters (int)

  • random_state (int | RandomState | None)

fit(X, y=None)[source]

将kmeans模型拟合到数据。

Parameters:
Xarray-like, shape (n_samples, n_features)

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

yarray-like, shape (n_samples,), optional (default=None)

如果可用,X的标签列表。用于计算ARI分数。

Returns:
self
Parameters:
  • X (ndarray)

  • y (ndarray | None)

Return type:

KMeansCluster

fit_predict(X, y=None)

拟合模型并根据最佳模型预测聚类。

Parameters:
Xarray-like, shape (n_samples, n_features)

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

yarray-like, shape (n_samples,), optional (default=None)

如果可用,X的标签列表。用于计算ARI分数。

Returns:
labelsarray, shape (n_samples,)

组件标签。

Parameters:
  • X (ndarray)

  • y (Any | None)

Return type:

ndarray

get_metadata_routing()

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

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

Returns:
routingMetadataRequest

一个MetadataRequest封装了路由信息。

get_params(deep=True)

获取此估计器的参数。

Parameters:
deepbool, default=True

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

Returns:
paramsdict

参数名称映射到它们的值。

predict(X, y=None)

基于最佳模型预测聚类。

Parameters:
Xarray-like, shape (n_samples, n_features)

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

yarray-like, shape (n_samples, ), optional (default=None)

如果可用,X的标签列表。用于计算ARI分数。

Returns:
labelsarray, shape (n_samples,)

组件标签。

Parameters:
  • X (ndarray)

  • y (Any | None)

Return type:

ndarray

set_params(**params)

设置此估计器的参数。

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

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。

高斯混合模型聚类

class graspologic.cluster.GaussianCluster[源代码]

高斯混合模型 (GMM)

高斯混合模型概率分布的表示。 此类允许估计高斯混合分布的参数。它计算从一个组件到max_components的所有可能模型。最佳模型由最低的BIC分数给出。

Parameters:
min_componentsint, default=2.

要考虑的最小混合组件数量(除非max_components为None,在这种情况下,这是要考虑的最大组件数量)。如果max_componens不为None,则min_components必须小于或等于max_components

max_componentsint or None, default=None.

要考虑的最大混合组件数量。必须大于或等于min_components

covariance_type{'all' (default), 'full', 'tied', 'diag', 'spherical'}, optional

描述要使用的协方差参数类型的字符串或列表/数组。 如果是字符串,它必须是以下之一:

  • 'all'

    考虑所有协方差结构在['spherical', 'diag', 'tied', 'full']中

  • 'full'

    每个组件都有自己的通用协方差矩阵

  • 'tied'

    所有组件共享相同的通用协方差矩阵

  • 'diag'

    每个组件都有其自己的对角协方差矩阵

  • 'spherical'

    每个组件都有其自己的单一方差

If a list/array, it must be a list/array of strings containing only

'spherical', 'tied', 'diag', 和/或 'full'.

tolfloat, defaults to 1e-3.

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

reg_covarfloat, defaults to 1e-6.

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

max_iterint, defaults to 100.

执行的EM迭代次数。

n_initint, defaults to 1.

执行初始化的次数。保留最佳结果。

init_params{'kmeans', 'random'}, defaults to 'kmeans'.

用于初始化权重、均值和精度的方法。 必须是以下之一:

'kmeans' : responsibilities are initialized using kmeans.
'random' : responsibilities are initialized randomly.
random_stateint, RandomState instance or None, optional (default=None)

如果是整数,random_state 是随机数生成器使用的种子; 如果是 RandomState 实例,random_state 是随机数生成器; 如果是 None,随机数生成器是 np.random 使用的 RandomState 实例。

Attributes:
n_components_int

基于BIC的最佳组件数量。

covariance_type_str

基于BIC的最优协方差类型。

model_GaussianMixture object

拟合的高斯混合对象,具有最佳组件数量和最佳协方差结构。

bic_pandas.DataFrame

一个包含所有可能聚类数量的BIC值的pandas DataFrame,这些聚类数量由range(min_components, max_components + 1)给出,并且所有协方差结构由covariance_type给出。

ari_pandas.DataFrame

仅在给定 y 时计算。Pandas 数据框包含为所有可能的聚类数(由 range(min_components, max_components) 给出)和所有由 covariance_type 给出的协方差结构计算的 ARI 值。

__init__(min_components=2, max_components=None, covariance_type='all', tol=0.001, reg_covar=1e-06, max_iter=100, n_init=1, init_params='kmeans', random_state=None)[来源]
Parameters:
  • min_components (int)

  • max_components (int | None)

  • covariance_type (Literal['all', 'spherical', 'diag', 'tied', 'full'] | list[~typing.Literal['spherical', 'diag', 'tied', 'full']] | ~numpy.ndarray)

  • tol (float)

  • reg_covar (float)

  • max_iter (int)

  • n_init (int)

  • init_params (Literal['random', 'kmeans'])

  • random_state (int | RandomState | None)

fit(X, y=None)[来源]

将高斯混合模型拟合到数据。 使用EM算法估计模型参数。

Parameters:
Xarray-like, shape (n_samples, n_features)

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

yarray-like, shape (n_samples,), optional (default=None)

如果可用,X的标签列表。用于计算ARI分数。

Returns:
self
Parameters:
  • X (ndarray)

  • y (ndarray | None)

Return type:

GaussianCluster

fit_predict(X, y=None)

拟合模型并根据最佳模型预测聚类。

Parameters:
Xarray-like, shape (n_samples, n_features)

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

yarray-like, shape (n_samples,), optional (default=None)

如果可用,X的标签列表。用于计算ARI分数。

Returns:
labelsarray, shape (n_samples,)

组件标签。

Parameters:
  • X (ndarray)

  • y (Any | None)

Return type:

ndarray

get_metadata_routing()

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

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

Returns:
routingMetadataRequest

一个MetadataRequest封装了路由信息。

get_params(deep=True)

获取此估计器的参数。

Parameters:
deepbool, default=True

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

Returns:
paramsdict

参数名称映射到它们的值。

predict(X, y=None)

基于最佳模型预测聚类。

Parameters:
Xarray-like, shape (n_samples, n_features)

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

yarray-like, shape (n_samples, ), optional (default=None)

如果可用,X的标签列表。用于计算ARI分数。

Returns:
labelsarray, shape (n_samples,)

组件标签。

Parameters:
  • X (ndarray)

  • y (Any | None)

Return type:

ndarray

set_params(**params)

设置此估计器的参数。

该方法适用于简单的估计器以及嵌套对象(如Pipeline)。后者具有形式为__的参数,以便可以更新嵌套对象的每个组件。

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。

class graspologic.cluster.AutoGMMCluster[来源]

自动高斯混合模型(GMM)选择。

使用层次凝聚聚类然后高斯混合模型(GMM)拟合的聚类算法。使用了不同的凝聚、GMM和聚类数量的组合,并选择具有最佳选择标准(bic/aic)的聚类。

Parameters:
min_componentsint, default=2.

要考虑的最小混合组件数量(除非max_components为None,在这种情况下,这是要考虑的最大组件数量)。如果max_components不为None,则min_components必须小于或等于max_components。如果给出了label_init,则min_components必须与label_init中的唯一标签数量匹配。

max_componentsint or None, default=10.

要考虑的最大混合组件数量。必须大于或等于min_components。 如果提供了label_init,min_components必须与label_init中唯一标签的数量匹配。

affinity{'euclidean','manhattan','cosine','none', 'all' (default)}, optional

字符串或列表/数组,描述在聚合中使用的亲和力类型。 如果是字符串,它必须是以下之一:

  • 'euclidean'

    L2 范数

  • 'manhattan'

    L1 范数

  • 'cosine'

    余弦相似度

  • 'none'

    无聚集 - GMM 使用 k-means 初始化

  • 'all'

    考虑所有在 ['euclidean','manhattan','cosine','none'] 中的亲和性

如果是一个列表/数组,它必须是一个仅包含 'euclidean'、'manhattan'、'cosine' 和/或 'none' 的字符串列表/数组。

请注意,余弦相似度只有在所有行都不是零向量时才能工作。 如果输入矩阵有零行,余弦相似度将被跳过,并且会抛出警告。

linkage{'ward','complete','average','single', 'all' (default)}, optional

字符串或列表/数组,描述在聚合中使用的链接类型。 如果是字符串,它必须是以下之一:

  • 'ward'

    ward的聚类,只能与欧几里得亲和度一起使用

  • 'complete'

    完全链接

  • 'average'

    平均链接

  • 'single'

    单链接

  • 'all'

    考虑所有在 ['ward','complete','average','single'] 中的链接方式

如果是一个列表/数组,它必须是一个仅包含'ward'、'complete'、'average'和/或'single'的字符串列表/数组。

covariance_type{'full', 'tied', 'diag', 'spherical', 'all' (default)} , optional

描述要使用的协方差参数类型的字符串或列表/数组。 如果是字符串,它必须是以下之一:

  • 'full'

    每个组件都有自己的通用协方差矩阵

  • 'tied'

    所有组件共享相同的通用协方差矩阵

  • 'diag'

    每个组件都有其自己的对角协方差矩阵

  • 'spherical'

    每个组件都有其自己的单一方差

  • 'all'

    考虑所有协方差结构在['spherical', 'diag', 'tied', 'full']中

如果是一个列表/数组,它必须是一个仅包含 'spherical'、'tied'、'diag' 和/或 'spherical' 的字符串列表/数组。

random_stateint, RandomState instance or None, optional (default=None)

sklearn.mixture.GaussianMixture的k-means初始化中存在随机性。此参数传递给GaussianMixture以控制随机状态。 如果为整数,random_state用作随机数生成器的种子; 如果为RandomState实例,random_state是随机数生成器; 如果为None,随机数生成器是np.random使用的RandomState实例。

label_initarray-like, shape (n_samples,), optional (default=None)

如果可用,样本的标签列表。用于初始化模型。 如果提供了,min_components 和 max_components 必须与这里提供的唯一标签数量匹配。

kmeans_n_initint, optional (default = 1)

如果 kmeans_n_init 大于 1 且 label_init 为 None,将会执行额外的 kmeans_n_init-1 次 sklearn.mixture.GaussianMixture 使用 k-means 初始化的运行 针对 covariance_type 中的所有协方差参数。

max_iterint, optional (default = 100).

执行EM迭代的最大次数。

selection_criteriastr {"bic" or "aic"}, optional, (default="bic")

根据贝叶斯信息准则(bic)或赤池信息准则(aic)选择最佳模型

verboseint, optional (default = 0)

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

max_agglom_sizeint or None, optional (default = 2000)

用于进行凝聚聚类作为GMM初始化的最大数据点数。如果数据点数大于此值,则使用数据的随机子集进行凝聚初始化。如果为None,则所有数据都用于凝聚聚类进行初始化。

n_jobsint or None, optional (default = None)

用于计算的作业数量。这是通过并行计算每个初始化运行来实现的。None 表示 1,除非在 joblib.parallel_backend context 中。-1 表示使用所有处理器。更多详情请参见 https://scikit-learn.org/stable/glossary.html#term-n-jobs

Attributes:
results_pandas.DataFrame

包含所有聚类运行的详尽信息。 列包括:

'model'GaussianMixture object

GMM聚类拟合数据

'bic/aic'float

贝叶斯信息准则

'ari'float or nan

GMM分类与真实分类之间的调整兰德指数,如果未给出y则为nan

'n_components'int

集群数量

'affinity'{'euclidean','manhattan','cosine','none'}

在凝聚聚类中使用的亲和力

'linkage'{'ward','complete','average','single'}

在凝聚聚类中使用的链接

'covariance_type'{'full', 'tied', 'diag', 'spherical'}

GMM中使用的协方差类型

'reg_covar'float

GMM中使用的正则化

criter_the best (lowest) Bayesian Information Criterion
n_components_int

模型中具有最佳BIC/AIC的聚类数量

covariance_type_str

模型中具有最佳BIC/AIC的协方差类型

affinity_str

模型中使用的亲和力具有最佳的BIC/AIC

linkage_str

模型中使用的链接方式具有最佳的BIC/AIC

reg_covar_float

模型中用于最佳BIC/AIC的正则化

ari_float

来自具有最佳bic/aic的模型的ARI,如果没有给出y则为nan

model_sklearn.mixture.GaussianMixture

具有最佳bic/aic的对象

注释

该算法深受R语言中的聚类包mclust的启发

参考文献

[1]

杰弗里·D·班菲尔德和阿德里安·E·拉夫特里。基于模型的高斯和非高斯聚类。生物统计学,49:803–821,1993年。

[2]

阿比吉特·达斯古普塔和阿德里安·E·拉夫特里。通过基于模型的聚类检测带有杂波的空间点过程中的特征。美国统计协会杂志,93(441):294–302, 1998.

__init__(min_components=2, max_components=10, affinity='all', linkage='all', covariance_type='all', random_state=None, label_init=None, kmeans_n_init=1, max_iter=100, verbose=0, selection_criteria='bic', max_agglom_size=2000, n_jobs=None)[source]
Parameters:
  • min_components (int)

  • max_components (int | None)

  • affinity (str | ndarray | list[str])

  • linkage (str | ndarray | list[str])

  • covariance_type (str | ndarray | list[str])

  • random_state (int | RandomState | None)

  • label_init (ndarray | list[int] | None)

  • kmeans_n_init (int)

  • max_iter (int)

  • verbose (int)

  • selection_criteria (str)

  • max_agglom_size (int | None)

  • n_jobs (int | None)

fit(X, y=None)[source]

将高斯混合模型拟合到数据。 使用凝聚聚类进行初始化,然后 使用EM算法估计模型参数。

Parameters:
Xarray-like, shape (n_samples, n_features)

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

yarray-like, shape (n_samples,), optional (default=None)

如果可用,X的标签列表。用于计算ARI分数。

Returns:
selfobject

返回自身的实例。

Parameters:
  • X (ndarray)

  • y (ndarray | None)

Return type:

AutoGMMCluster

fit_predict(X, y=None)

拟合模型并根据最佳模型预测聚类。

Parameters:
Xarray-like, shape (n_samples, n_features)

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

yarray-like, shape (n_samples,), optional (default=None)

如果可用,X的标签列表。用于计算ARI分数。

Returns:
labelsarray, shape (n_samples,)

组件标签。

Parameters:
  • X (ndarray)

  • y (Any | None)

Return type:

ndarray

get_metadata_routing()

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

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

Returns:
routingMetadataRequest

一个MetadataRequest封装了路由信息。

get_params(deep=True)

获取此估计器的参数。

Parameters:
deepbool, default=True

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

Returns:
paramsdict

参数名称映射到它们的值。

predict(X, y=None)

基于最佳模型预测聚类。

Parameters:
Xarray-like, shape (n_samples, n_features)

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

yarray-like, shape (n_samples, ), optional (default=None)

如果可用,X的标签列表。用于计算ARI分数。

Returns:
labelsarray, shape (n_samples,)

组件标签。

Parameters:
  • X (ndarray)

  • y (Any | None)

Return type:

ndarray

set_params(**params)

设置此估计器的参数。

该方法适用于简单的估计器以及嵌套对象(如Pipeline)。后者具有形式为__的参数,以便可以更新嵌套对象的每个组件。

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。

层次聚类

class graspologic.cluster.DivisiveCluster[source]

递归地基于所选的聚类算法对数据进行聚类。 该算法实现了“分裂”或“自上而下”的方法。

Parameters:
cluster_methodstr {"gmm", "kmeans"}, defaults to "gmm".

要应用的基础聚类方法。如果选择“gmm”,将使用 AutoGMMCluster。如果选择“kmeans”,将使用 KMeansCluster

min_componentsint, defaults to 1.

如果选择“gmm”作为cluster_method,则为第一次分割考虑的最小混合组件/集群数;对于后续分割,设置为1。 如果cluster_method是“kmeans”,则对于所有分割都设置为2。

max_componentsint, defaults to 2.

每次分割时考虑的最大混合组件/集群数量。

min_splitint, defaults to 1.

集群的最小大小,以便再次考虑进行拆分。

max_levelint, defaults to 4.

递归聚类数据的最大次数。

delta_criterfloat, non-negative, defaults to 0.

新模型与当前模型的选择标准值之间的最小差异,这是接受新模型所必需的。仅当cluster_method为"gmm"时适用。

cluster_kwsdict, defaults to {}

所选聚类方法的关键字参数(除了 min_componentsmax_components)。

Attributes:
model_GaussianMixture or KMeans object

基于使用的cluster_method拟合的聚类对象。

注释

这个类继承自 anytree.node.nodemixin.NodeMixin,这是一个轻量级的类,用于在树上执行各种简单操作。

该算法受到了maggotcluster的强烈启发,maggotcluster是一种在https://github.com/neurodata/maggot_models中的分裂聚类算法,以及在[2]中提出的用于估计分层随机块模型的算法。

参考文献

[1]

Athey, T. L., & Vogelstein, J. T. (2019). AutoGMM: Python中的自动高斯混合建模。 arXiv预印本 arXiv:1909.02688.

[2]

Lyzinski, V., Tang, M., Athreya, A., Park, Y., & Priebe, C. E (2016). 层次随机块模型中的社区检测与分类. IEEE Transactions on Network Science and Engineering, 4(1), 13-26.

__init__(cluster_method='gmm', min_components=1, max_components=2, cluster_kws={}, min_split=1, max_level=4, delta_criter=0)[源代码]
Parameters:
fit(X)[来源]

将聚类模型拟合到数据以及生成的聚类

Parameters:
Xarray-like, shape (n_samples, n_features)
Returns:
selfobject

返回自身的实例。

Parameters:

X (ndarray)

Return type:

DivisiveCluster

fit_predict(X, fcluster=False, level=None)[源代码]

将聚类模型拟合到数据以及生成的聚类中,并使用拟合模型预测标签的层次结构

Parameters:
Xarray-like, shape (n_samples, n_features)
fcluster: bool, default=False

如果为True,返回的标签将被重新编号,以便每个标签列表示当前级别的平面聚类,并且每个标签对应于一个聚类,其索引与整体聚类树状图中的相应节点相同。

level: int, optional (default=None)

生成单个平面聚类的级别 仅在 fcluster 为 True 时可用

Returns:
labelsarray_label, shape (n_samples, n_levels)

如果没有指定级别;否则,形状为 (n_samples,)

Parameters:
  • X (ndarray)

  • fcluster (bool)

  • level (int | None)

Return type:

ndarray

predict(X, fcluster=False, level=None)[source]

基于拟合模型预测标签的层次结构

Parameters:
Xarray-like, shape (n_samples, n_features)
fcluster: bool, default=False

如果为True,返回的标签将被重新编号,以便每个标签列表示当前级别的平面聚类,并且每个标签对应于一个聚类,其索引与整体聚类树状图中的相应节点相同

level: int, optional (default=None)

生成单个平面聚类的级别 仅在 fcluster 为 True 时可用

Returns:
labelsarray-like, shape (n_samples, n_levels)

如果没有指定级别;否则,形状为 (n_samples,)

Parameters:
  • X (ndarray)

  • fcluster (bool)

  • level (int | None)

Return type:

ndarray

set_predict_request(*, fcluster='$UNCHANGED$', level='$UNCHANGED$')

传递给predict方法的请求元数据。

请注意,此方法仅在 enable_metadata_routing=True 时相关(参见 sklearn.set_config())。 请参阅 用户指南 了解路由机制的工作原理。

每个参数的选项是:

  • True: 请求元数据,并在提供时传递给 predict。如果未提供元数据,则忽略该请求。

  • False: 不请求元数据,元估计器不会将其传递给 predict

  • None: 不请求元数据,如果用户提供了元数据,元估计器将引发错误。

  • str: 元数据应使用此给定的别名传递给元估计器,而不是原始名称。

默认值(sklearn.utils.metadata_routing.UNCHANGED)保留现有的请求。这允许您更改某些参数的请求,而不更改其他参数。

在版本1.3中添加。

注意

此方法仅在此估计器用作元估计器的子估计器时相关,例如在Pipeline内部使用时。否则它没有效果。

Parameters:
fclusterstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

predictfcluster 参数的元数据路由。

levelstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

predictlevel 参数的元数据路由。

Returns:
selfobject

更新后的对象。

Parameters:
Return type:

DivisiveCluster