cvi.CONN

class cvi.CONN(rho: float = 0.9, alpha: float = 1e-10, beta: float = 1.0, match_tracking: str = 'MT+', normalize_batch: bool = True, check_incremental_normalized: bool = True, model_type: Literal['Fuzzy', 'KMeans', 'MiniBatchKMeans'] = 'MiniBatchKMeans', kmeans_k: int | Dict[int, int] = 8, kmeans_kwargs: dict | None = None)

Bases: CVI

CONN Cluster Validity Index.

Incremental mode uses a FuzzyART/SimpleARTMAP model. Batch mode can use FuzzyART or fit class-owned KMeans/MiniBatchKMeans prototypes.

References

    1. Merényi, “A new cluster validity index for prototype based clustering algorithms based on inter-and intra-cluster density,” 2007 International Joint Conference on Neural Networks, 2007.

    1. Tasdemir and E. Merényi, “A validity index for prototype-based clustering of data sets with complex cluster structures,” IEEE Transactions on Systems, Man, and Cybernetics, Part B (Cybernetics), vol. 41, no. 4, pp. 1039-1053, 2011.

      1. Brito da Silva, N. M. Melton, and D. C. Wunsch II, “Incremental cluster validity indices for online learning of hard partitions: Extensions and comparative study,” IEEE Access, vol. 8, pp. 22025-22047, 2020.

__init__(rho: float = 0.9, alpha: float = 1e-10, beta: float = 1.0, match_tracking: str = 'MT+', normalize_batch: bool = True, check_incremental_normalized: bool = True, model_type: Literal['Fuzzy', 'KMeans', 'MiniBatchKMeans'] = 'MiniBatchKMeans', kmeans_k: int | Dict[int, int] = 8, kmeans_kwargs: dict | None = None)

CONN initialization routine.

Parameters:
  • rho (float, default=0.9) – FuzzyART vigilance parameter.

  • alpha (float, default=1e-10) – FuzzyART choice parameter.

  • beta (float, default=1.0) – FuzzyART learning rate.

  • match_tracking (str, default="MT+") – Match-tracking mode passed to SimpleARTMAP.

  • normalize_batch (bool, default=True) – If True, batch data are min-max normalized before prototype fitting. Incremental data are not normalized online.

  • check_incremental_normalized (bool, default=True) – If True, incremental samples are checked to ensure values lie in [0, 1].

  • model_type ({"Fuzzy", "KMeans", "MiniBatchKMeans"}, default="MiniBatchKMeans") – Prototype backend. KMeans backends support batch mode only.

  • kmeans_k (int or dict[int, int], default=8) – Number of KMeans prototypes per input label. Dictionary values are keyed by the original input labels. Counts are capped at the number of samples carrying each label.

  • kmeans_kwargs (dict, optional) – Keyword arguments forwarded to the selected scikit-learn KMeans estimator. n_clusters must be configured through kmeans_k.

Methods

__init__([rho, alpha, beta, match_tracking, ...])

CONN initialization routine.

get_cvi(data, label)

Update the CVI and return its criterion value.

merge(target_label, source_label)

Merge a source cluster into a target cluster.

remove(sample, label)

Remove a sample from an initialized CVI.

Attributes

info

get_cvi(data: ndarray, label: int | ndarray) float

Update the CVI and return its criterion value.

Pass a one-dimensional sample and scalar integer label for an incremental update, or a two-dimensional batch and label vector for batch initialization. The object is mutated in both modes. A batch may be followed by incremental updates, but a second batch is not supported.

Parameters:
  • data (np.ndarray) – The sample(s) of features used for clustering.

  • label (Union[int, np.ndarray]) – The label(s) prescribed to the sample(s) by the clustering algorithm.

Returns:

The CVI’s criterion value.

Return type:

float

Raises:

ValueError – If the input dimensionality is invalid, feature dimensionality changes after initialization, batch labels contain fewer than two distinct values, or a second batch update is requested.

merge(target_label: int, source_label: int) float

Merge a source cluster into a target cluster.

The target external label is retained and the source label is removed.

Parameters:
  • target_label (int) – External label of the cluster that remains after the merge.

  • source_label (int) – External label of the cluster merged into the target.

Returns:

The updated CVI criterion value.

Return type:

float

Raises:
  • NotImplementedError – If this index does not implement cluster merging.

  • ValueError – If the index is uninitialized, either label is unknown, or the two labels are equal.

remove(sample: ndarray, label: int) float

Remove a sample from an initialized CVI.

The caller is responsible for ensuring that the sample belongs to the supplied cluster label. If the sample is the cluster’s final member, the empty cluster and its label are removed.

Parameters:
  • sample (numpy.ndarray) – One sample vector of features.

  • label (int) – External label of the cluster containing the sample.

Returns:

The updated CVI criterion value.

Return type:

float

Raises:
  • NotImplementedError – If this index does not implement removal.

  • ValueError – If the index is uninitialized, the label is unknown, the sample has the wrong shape, or the sample is inconsistent with the stored sufficient statistics.