Untitled

 avatar
unknown
python
a year ago
869 B
7
Indexable
from sklearn.cluster import DBSCAN
import numpy as np

def detect_outliner_by_DBSCAN(self, col1, col2, eps, min_samples=2):
    data = self.df[[col1, col2]].values.reshape(-1, 1)
    
    db = DBSCAN(eps=eps, min_samples=min_samples).fit(data)
    labels = db.labels_
    
    # Вычисление количества элементов в каждом кластере
    unique, counts = np.unique(labels, return_counts=True)
    clusters_counts = dict(zip(unique, counts))
    
    # Поиск кластеров с количеством элементов <= 2
    small_clusters = [cluster for cluster, count in clusters_counts.items() if count <= 2]
    
    # Возвращение индексов строк для этих кластеров
    outlier_indices = self.df.index[np.isin(labels, small_clusters)].tolist()
    
    return outlier_indices