FaissDBSCANClustering
FAISS-accelerated DBSCAN clustering model for the Models module.
Replaces sklearn DBSCAN's O(n²) epsilon-neighbourhood search with FAISS
IndexFlatL2.range_search, which uses BLAS-optimised distance
computation. The cluster-labelling step (core-point detection, BFS
expansion, noise assignment) is identical to the original algorithm and
is implemented in pure Python/NumPy.
Noise samples receive label -1, the same convention as sklearn DBSCAN
and sklearn HDBSCAN. The algorithm does not require specifying the number
of clusters in advance.
Key hyperparameters: eps (neighbourhood radius), min_samples
(core-point threshold). Only the Euclidean (L2) metric is supported
because FAISS IndexFlatL2 computes squared L2 distances.
References
- [1] Ester, M., Kriegel, H.-P., Sander, J., & Xu, X. (1996). "A density-based algorithm for discovering clusters in large spatial databases with noise."
- [2] Johnson, J., Douze, M., & Jégou, H. (2019). "Billion-scale similarity search with GPUs."
- [3] https://github.com/facebookresearch/faiss
Parameters
- eps : number, default=
0.5 - Maximum Euclidean distance between two samples to be considered neighbours.
- min_samples : integer, default=
5 - Minimum samples in a neighbourhood for a point to be a core point (including the point itself).
Methods
get_cluster_labels(self, x: 'DashAIDataset | None' = None) -> numpy.ndarray
FaissDBSCANClusteringReturn cluster labels from the fitted model.
Parameters
- x : DashAIDataset, optional
- If provided, must have the same number of rows as the training set.
Returns
- numpy.ndarray
- Cluster label per sample. Noise points are labelled
-1.
get_fit_attributes(self) -> dict
FaissDBSCANClusteringReturn FAISS-DBSCAN post-fit attributes for the converter report.
train(self, x_train: 'DashAIDataset') -> 'FaissDBSCANClustering'
FaissDBSCANClusteringFit FAISS-DBSCAN: build index, run range search, label clusters.
Parameters
- x_train : DashAIDataset
- Input feature matrix.
Returns
- FaissDBSCANClustering
- The fitted model instance.
calculate_metrics(self, split: DashAI.back.core.enums.metrics.SplitEnum = <SplitEnum.VALIDATION: 'validation'>, level: DashAI.back.core.enums.metrics.LevelEnum = <LevelEnum.LAST: 'last'>, log_index: int = None, x_data: 'DashAIDataset' = None, y_data: 'DashAIDataset' = None, fold_index: int = None, inner_fold_index: int = None)
BaseModelCalculate metrics for a data split and save them to the database.
Parameters
- split : SplitEnum
- The data split to evaluate (TRAIN, VALIDATION, or TEST). Defaults to SplitEnum.VALIDATION.
- level : LevelEnum
- The metric granularity level (LAST, TRIAL, STEP, or BATCH). Defaults to LevelEnum.LAST.
- log_index : int, optional
- Explicit step index for the metric entry. If None, the next step index is computed automatically. Defaults to None.
- x_data : DashAIDataset, optional
- Input features. If None, the dataset stored in the model for the given split is used. Defaults to None.
- y_data : DashAIDataset, optional
- Target labels. If None, the labels stored in the model for the given split are used. Defaults to None.
Returns
- Dict[str, float] or None
- What was written, so a caller that also wants the numbers does not have to score the same split twice.
Nonewhen nothing was written: no run to write against, or nothing to score.
compute_metrics(self, split: DashAI.back.core.enums.metrics.SplitEnum = <SplitEnum.VALIDATION: 'validation'>, x_data: 'DashAIDataset' = None, y_data: 'DashAIDataset' = None) -> Optional[Dict[str, float]]
BaseModelScore a data split with this model's metrics, without persisting.
Parameters
- split : SplitEnum
- The data split to evaluate. Defaults to
SplitEnum.VALIDATION. - x_data : DashAIDataset, optional
- Input features. Defaults to the split stored on the model.
- y_data : DashAIDataset, optional
- Target labels. Defaults to the split stored on the model.
Returns
- Dict[str, float] or None
- Metric name to score. A metric that scored a non-finite value is absent from the mapping rather than present with a NaN, so the mapping is empty when every metric returned one.
Nonewhen there is nothing to score at all: no metrics configured, or no data for this split. Callers that need a particular metric must therefore check that it is there.
get_credential(self, name: str)
ConfigObjectResolve a registered credential component by name.
Parameters
- name : str
- Credential component class name (e.g. "HuggingFaceCredential").
Returns
- BaseCredential
- An instance of the requested credential component.
get_metadata(cls) -> Dict[str, Any]
BaseModelGet metadata values for the current model.
Returns
- Dict[str, Any]
- Dictionary containing UI metadata such as the model icon used in the DashAI frontend.
get_registry(cls) -> Dict[str, Type[ForwardRef('ClusteringModel')]]
ClusteringModelReturn concrete clustering algorithm classes keyed by class name.
get_schema(cls) -> dict
ConfigObjectGenerates the component related Json Schema.
Returns
- dict
- Dictionary representing the Json Schema of the component.
load(filename: str) -> Any
FaissBaseModelRestore a fitted model from disk.
Parameters
- filename : str
- Path to a previously saved model file.
Returns
- Any
- The deserialised model instance.
predict_prepared(self, features: Any) -> Any
BaseModelPredict from data that is already in this model's feature space.
Parameters
- features : pandas.DataFrame or numpy.ndarray
- Feature matrix as returned by
prepare_dataset(..., is_fit=False). No further preparation is applied to it.
Returns
- Any
- The same kind of output as
predict: predicted values for regressors, class probabilities for DashAI classifiers.
predict_proba_prepared(self, features: Any) -> Any
BaseModelReturn class probabilities for data already in the feature space.
Parameters
- features : pandas.DataFrame or numpy.ndarray
- Feature matrix as returned by
prepare_dataset(..., is_fit=False).
Returns
- numpy.ndarray
- Array of shape
(n_samples, n_classes)with class probabilities.
prepare_dataset(self, dataset: 'DashAIDataset', is_fit: bool = False) -> 'DashAIDataset'
BaseModelHook for model specific preprocessing of input features.
Parameters
- dataset : DashAIDataset
- The input dataset to preprocess.
- is_fit : bool
- Whether the call is part of a fitting phase. Defaults to False.
Returns
- DashAIDataset
- The preprocessed dataset ready to be fed into the model.
prepare_output(self, dataset: 'DashAIDataset', is_fit: bool = False) -> 'DashAIDataset'
BaseModelHook for model-specific preprocessing of output targets.
Parameters
- dataset : DashAIDataset
- The output dataset (target labels) to preprocess.
- is_fit : bool
- Whether the call is part of a fitting phase. Defaults to False.
Returns
- DashAIDataset
- The preprocessed output dataset.
save(self, filename: str) -> None
FaissBaseModelSave the fitted model to disk using joblib.
Parameters
- filename : str
- Destination path for the serialised model.
validate_and_transform(self, raw_data: dict) -> dict
ConfigObjectIt takes the data given by the user to initialize the model and returns it with all the objects that the model needs to work.
Parameters
- raw_data : dict
- A dictionary with the data provided by the user to initialize the model.
Returns
- dict
- A validated dictionary with the necessary objects.