Skip to content

neurostatx.clustering.fuzzy

Classes

NameDescription
FuzzyCMeansFuzzy C-Means clustering.

Functions

NameDescription
fuzzyCmeansDeprecated wrapper around
search_fuzzy_cmeansFit Fuzzy C-Means for each k in [min_clusters, max_clusters].

FuzzyCMeansclass#

class FuzzyCMeans(n_clusters=2, m=2.0, max_iter=1000, tol=1e-06, metric='euclidean', init=None, random_state=None)

Bases: ClusterMixin, BaseEstimator

Fuzzy C-Means clustering.

Soft clustering estimator with a sklearn-compatible API. Fits a single number of clusters; use search_fuzzy_cmeans to evaluate a range of k. Based on scikit-fuzzy cmeans / cmeans_predict.

Parameters

NameTypeDefaultDescription
n_clustersint2Number of clusters to form. Defaults to 2.
mfloat2.0Fuzziness exponent applied to the membership function. m=1 yields crisp clusters; larger values increase fuzziness. Defaults to 2.
max_iterint1000Maximum number of iterations. Defaults to 1000.
tolfloat1e-06Convergence tolerance (stopping criterion). Defaults to 1e-6.
metricstr'euclidean'Distance metric passed to scikit-fuzzy. Defaults to "euclidean".
initarray-like of shape (n_clusters, n_samples)NoneInitial fuzzy c-partitioned matrix. Defaults to None (random init).
random_stateint, numpy.RandomState instance or NoneNoneSeed used for centroid initialization. Defaults to None.

Attributes

NameTypeDescription
cluster_centers_ndarray of shape (n_clusters, n_features)Coordinates of cluster centroids.
u_ndarray of shape (n_clusters, n_samples)Fuzzy membership matrix (scikit-fuzzy layout).
labels_ndarray of shape (n_samples,)Hard cluster labels (argmax of membership).
fpc_floatFuzzy partition coefficient.
n_iter_intNumber of iterations run until convergence.
inertia_floatWithin-cluster sum of squared errors (WSS).
n_features_in_intNumber of features seen during fit.

Examples

>>> import numpy as np
>>> from neurostatx.clustering.fuzzy import FuzzyCMeans
>>> X = np.array([[0.0, 0.0], [0.1, 0.0], [1.0, 1.0], [0.9, 1.0]])
>>> fcm = FuzzyCMeans(n_clusters=2, random_state=0).fit(X)
>>> fcm.labels_.shape
(4,)

initattributeinstance attribute#

init = init

mattributeinstance attribute#

m = m

max_iterattributeinstance attribute#

max_iter = max_iter

metricattributeinstance attribute#

metric = metric

n_clustersattributeinstance attribute#

n_clusters = n_clusters

random_stateattributeinstance attribute#

random_state = random_state

tolattributeinstance attribute#

tol = tol

fitmethod#

def fit(X, y=None)

Fit the fuzzy C-Means model.

Parameters

NameTypeDefaultDescription
Xarray-like of shape (n_samples, n_features)requiredTraining data.
yIgnoredNoneNot used, present for sklearn API compatibility.

Returns

selfFuzzyCMeans
Fitted estimator.

Examples

>>> import numpy as np
>>> from neurostatx.clustering.fuzzy import FuzzyCMeans
>>> X = np.array([[0.0, 0.0], [0.1, 0.0], [1.0, 1.0], [0.9, 1.0]])
>>> fcm = FuzzyCMeans(n_clusters=2, random_state=0).fit(X)
>>> fcm.n_features_in_
2

predictmethod#

def predict(X)

Predict hard cluster labels for X.

Parameters

NameTypeDescription
Xarray-like of shape (n_samples, n_features)New data to predict.

Returns

labelsndarray of shape (n_samples,)
Hard cluster labels.

Examples

>>> import numpy as np
>>> from neurostatx.clustering.fuzzy import FuzzyCMeans
>>> X = np.array([[0.0, 0.0], [0.1, 0.0], [1.0, 1.0], [0.9, 1.0]])
>>> fcm = FuzzyCMeans(n_clusters=2, random_state=0).fit(X)
>>> fcm.predict(X).shape
(4,)

predict_probamethod#

def predict_proba(X)

Predict fuzzy membership for X.

Parameters

NameTypeDescription
Xarray-like of shape (n_samples, n_features)New data to predict.

Returns

membershipndarray of shape (n_samples, n_clusters)
Membership degree of each sample to each cluster. Rows sum to 1.

Examples

>>> import numpy as np
>>> from neurostatx.clustering.fuzzy import FuzzyCMeans
>>> X = np.array([[0.0, 0.0], [0.1, 0.0], [1.0, 1.0], [0.9, 1.0]])
>>> fcm = FuzzyCMeans(n_clusters=2, random_state=0).fit(X)
>>> proba = fcm.predict_proba(X)
>>> proba.shape
(4, 2)

fuzzyCmeansfunction#

def fuzzyCmeans(X, max_cluster=10, m=2, error=1e-06, maxiter=1000, init=None, metric='euclidean', output='./', processes=1, verbose=False)

Deprecated wrapper around search_fuzzy_cmeans.

Parameters

NameTypeDefaultDescription
Xnp.arrayrequiredArray of data to cluster (subjects x features).
max_clusterint10Maximum number of clusters to fit a model for. Defaults to 10.
mfloat2Exponentiation value to apply on the membership function. Defaults to 2.
errorfloat1e-06Stopping criterion. Defaults to 1e-6.
maxiterint1000Maximum number of iterations. Defaults to 1000.
init2d arrayNoneInitial fuzzy c-partitioned matrix. Defaults to None.
metricstr'euclidean'Distance metric used for intra/inter subject and cluster distance. Defaults to "euclidean".
outputstr'./'Output folder for the visualization. Defaults to "./".
processesint1Number of processes to use. Defaults to 1.
verboseboolFalseIf True, produce verbose output. Defaults to False.

Returns

cntrlist
Cluster centroids for each k.
ulist
Membership matrices for each k.
wsslist
Within-cluster sum of squared errors.
fpclist
Fuzzy partition coefficients.
sslist
Silhouette scores.
chilist
Calinski-Harabasz indices.
dbilist
Davies-Bouldin indices.
gaplist
GAP statistics.
sklist
GAP standard errors.

Examples

>>> import numpy as np
>>> from neurostatx.clustering.fuzzy import fuzzyCmeans
>>> X = np.random.RandomState(0).rand(20, 3)
>>> cntr, u, wss, fpc, ss, chi, dbi, gap, sk = fuzzyCmeans(
... X, max_cluster=3, processes=1, output=None
... )
>>> len(cntr)
2

search_fuzzy_cmeansfunction#

def search_fuzzy_cmeans(X, min_clusters=2, max_clusters=10, n_jobs=1, compute_gap=True, output=None, verbose=False, m=2.0, max_iter=1000, tol=1e-06, metric='euclidean', init=None, random_state=None)

Fit Fuzzy C-Means for each k in [min_clusters, max_clusters].

Parallelizes over k and optionally writes a multi-panel visualization of all solutions.

Parameters

NameTypeDefaultDescription
Xarray-like of shape (n_samples, n_features)requiredData to cluster.
min_clustersint2Smallest number of clusters to fit. Defaults to 2.
max_clustersint10Largest number of clusters to fit. Defaults to 10.
n_jobsint1Number of parallel jobs. Defaults to 1.
compute_gapboolTrueIf True, compute GAP statistics (expensive). Defaults to True.
outputstrNoneFolder in which to save viz_multiple_cluster_nb.png. If None, no figure is written. Defaults to None.
verboseboolFalseVerbosity flag forwarded to sklearn Parallel. Defaults to False.
mfloat2.0Fuzziness exponent. Defaults to 2.
max_iterint1000Maximum iterations per model. Defaults to 1000.
tolfloat1e-06Convergence tolerance. Defaults to 1e-6.
metricstr'euclidean'Distance metric. Defaults to "euclidean".
initlist of array-likeNoneInitial membership matrices, one per k from min_clusters to max_clusters. Defaults to None.
random_stateint, numpy.RandomState instance or NoneNoneSeed forwarded to each FuzzyCMeans fit. Defaults to None.

Returns

cntrtuple of ndarray
Cluster centroids for each k.
utuple of ndarray
Membership matrices for each k.
wsstuple of float
Within-cluster sum of squared errors.
fpctuple of float
Fuzzy partition coefficients.
sstuple of float
Silhouette scores.
chituple of float
Calinski-Harabasz indices.
dbituple of float
Davies-Bouldin indices.
gaptuple of float
GAP statistics (or None if compute_gap is False).
sktuple of float
GAP standard errors (or None if compute_gap is False).

Examples

>>> import numpy as np
>>> from neurostatx.clustering.fuzzy import search_fuzzy_cmeans
>>> X = np.random.RandomState(0).rand(30, 4)
>>> cntr, u, wss, fpc, ss, chi, dbi, gap, sk = search_fuzzy_cmeans(
... X, min_clusters=2, max_clusters=3, compute_gap=False, n_jobs=1
... )
>>> len(cntr)
2