Scikit-Learn DBSCAN кластеризация не дает кластеров - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть набор данных с дюжиной измерений (столбцы) и около 200 наблюдений (строки).Этот набор данных был нормализован с использованием quantile_transform_normalize.(Изменить: я попытался запустить кластеризацию без нормализации, но все же не повезло, поэтому я не верю, что это является причиной.) Теперь я хочу сгруппировать данные в несколько кластеров.До сих пор я использовал KMeans, но я читал, что он может быть неточным в больших измерениях и плохо обрабатывает выбросы, поэтому я хотел сравнить с DBSCAN, чтобы увидеть, получаю ли я другой результат.

Однако, когда я пытаюсь кластеризовать данные с помощью DBSCAN, используя метрику расстояния Махаланобиса, каждый элемент кластеризуется в -1.Согласно документации:

Шумным образцам присваивается метка -1.

Я не совсем уверен, что это значит, но я получал несколько ОК кластеров сKMeans, так что я знаю, что есть что-то для кластеризации - это не просто случайность.

Вот код, который я использую для кластеризации:

covariance = np.cov(data.values.astype("float32"), rowvar=False)
clusterer = sklearn.cluster.DBSCAN(min_samples=6, metric="mahalanobis", metric_params={"V": covariance})
clusterer.fit(data)

И это все.Я точно знаю, что data - это числовой Pandas DataFrame, поскольку я проверял его в отладчике.

Что может быть причиной этой проблемы?

1 Ответ

0 голосов
/ 13 ноября 2018

Вам также необходимо выбрать параметр eps.

Результаты DBSCAN очень сильно зависят от этого параметра. Вы можете найти некоторые методы для оценки этого в литературе.

ИМХО, sklearn должен не обеспечивать значение по умолчанию для этого параметра, потому что он редко когда-либо работает (на нормализованных данных игрушек это обычно нормально, но это все).

200 экземпляров, вероятно, слишком мало для надежного измерения плотности, в частности с дюжиной переменных.

...