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