# SMCLA Algorithm Documentation ## 🔍 Overview The Soft MCLA (sMCLA) is a consensus clustering algorithm that combines soft membership matrices by treating clusters as vectors and grouping them into meta-clusters. This is the soft version of the MCLA ensemble algorithm. --- ## ⚙️ Class Definition **Class Name:** `SMCLA` ```python class SMCLA: def __init__(self, n_clusters: int): self.n_clusters = n_clusters ``` Implements the soft MCLA algorithm that aggregates memberships by clustering cluster-vectors themselves and re-assigning to objects. --- ## 📋 Parameters | Parameter | Type | Default | Description | |---------------|-------|---------|------------------------------------------| | `n_clusters` | int | — | Number of consensus clusters to output | --- ## 🚀 Usage Examples ```python from soft_clustering._smcla._smcla import SMCLA import numpy as np # Simulate 3 soft clusterings soft1 = np.random.dirichlet(np.ones(3), size=100) soft2 = np.random.dirichlet(np.ones(3), size=100) soft3 = np.random.dirichlet(np.ones(3), size=100) model = SMCLA(n_clusters=3) labels = model.fit_predict([soft1, soft2, soft3]) print("Consensus Labels:", labels) ``` --- ### 📥 Input / 📤 Output - **Input to `fit_predict(soft_memberships)`**: - `soft_memberships (list of np.ndarray)`: List of soft clustering matrices (shape N x K) - **Returns**: - `labels (np.ndarray)`: Consensus clustering labels (length N) --- ### 🔧 Methods - `__init__(self, n_clusters: int)`: Initializes the model with number of consensus clusters. - `fit_predict(self, soft_memberships: List[np.ndarray])`: Transposes all cluster matrices, clusters the vectors, and aggregates to produce final labels. -- ### 🛠️ Implementation Notes - Clusters are treated as feature vectors for meta-clustering. - KMeans is applied to these vectors to create meta-clusters. - Each data point is re-assigned based on aggregated contributions from cluster-vectors. - Final assignment is the max-weighted cluster. --- ### 📚 Reference 1. Punera, K., & Ghosh, J. (2008). *Consensus-Based Ensembles of Soft Clusterings*.