Взвешенная кластеризация в склеарне - PullRequest
0 голосов
/ 27 апреля 2020

Предполагая, что у меня есть набор точек (x, y и размер). Я хочу найти кластеры в моих данных, используя sklearn.cluster.DBSCAN и их центры. Это не проблема, если я отношусь ко всем пунктам одинаково. Но на самом деле я хочу, чтобы взвешенные центры вместо геометрических центров (то есть точку большего размера следует считать больше, чем меньшую).

Я сталкивался с sample_weight, но я не совсем понимаю, если это это то, что мне нужно Когда я использую sample_weight (правая сторона), я получаю совершенно разные кластеры, если не использую его (левая сторона):

enter image description here

Во-вторых, я подумал об использовании np.repeat(x,w), где x - это мои данные, а w - размер каждой точки, поэтому я получаю несколько копий точек, пропорциональных их весам. Но это, вероятно, не умное решение, так как я получаю много данных, верно?

Является ли sample_weight полезным в моем случае, или есть предложения по лучшим решениям, чем использование np.repeat? Я знаю, что уже есть некоторые вопросы по поводу sample_weight, но я не мог прочитать, как именно его использовать.

Спасибо!

1 Ответ

0 голосов
/ 27 апреля 2020

Самое важное для DBSCAN - это настройка параметров. Есть 2 параметра, epsilon и minPts (= min_samples). Параметр epsilon - это радиус вокруг ваших точек, и minPts считает ваши точки частью кластера, если выполнено minPts. Поэтому вместо использования np.repeat я бы предложил настроить параметры для этого набора данных.

В соответствии с документацией DBSCAN , sample_weight является параметром настройки для вашей среды выполнения:

Еще один способ уменьшить память и время вычислений - это удалить (почти) дублируйте баллы и используйте вместо этого sample_weight.

Я думаю, что вы хотите обратиться к качеству своего результата, прежде чем настраивать время выполнения.

Я не уверен, что вы среднее значение для взвешенных центров, вероятно, вы используете другой алгоритм кластеризации, такой как модель гауссовой смеси .

...