Кластеризація (k-означає або інше) з обмеженням мінімального розміру кластера


14

Мені потрібно об'єднати одиниці в кластери, щоб мінімізувати суму квадратів у межах групи (WSS), але мені потрібно забезпечити, щоб кожен кластер містив принаймні m одиниць. Будь-яка ідея, чи дозволяє будь-яка з кластеризуючих функцій R об'єднати в k кластери з обмеженням мінімального розміру кластера? kmeans (), здається, не пропонує варіант обмеження розміру.кмк

Відповіді:


5

Використовуйте кластеризацію ЕМ

У кластеризації ЕМ алгоритм ітеративно вдосконалює початкову модель кластера, щоб відповідати даним, та визначає ймовірність існування точки даних у кластері. Алгоритм закінчує процес, коли імовірнісна модель підходить до даних. Функція, що використовується для визначення придатності, - це ймовірність журналу даних, заданих моделлю.

Якщо під час процесу генеруються порожні кластери або якщо належність до одного або декількох кластерів опускається нижче заданого порогу, кластери з низькою сукупністю перезавантажуються в нових точках і алгоритм ЕМ повторюється.


Дякую, Маріанна. Я вважаю за краще рішення, яке менш покладається на (як правило, невиправдані) параметричні моделі, але, безумовно, вивчить це.
Cyrus S

4

Ця проблема розглянута в цій роботі:

Бредлі, ПС, КП Беннетт та Айхан Деміріз. "Обмежена k-означає кластеризація." Microsoft Research, Редмонд (2000) : 1-8.

У мене реалізація алгоритму в python.


Це ідеально, дякую! Я використовував rPythonпакет в R, щоб створити інтерфейс до цієї реалізації, до якого я отримав доступ зі свого сценарію R.
Michael Ohlrogge

@MichaelOhlrogge У вас є приклад десь (github?) В інтерфейсі, який ви написали, щоб викликати цей пакет python форми R? Дякую!
Матифу

Вибачте, я оглянув свій старий код, але більше не міг його знайти.
Michael Ohlrogge

3

Я думаю, було б просто запустити k засоби як частину циклу if з тестом на розміри кластера, тобто підрахунок n в кластері k - також пам’ятайте, що k засоби дадуть різні результати для кожного запуску на одних і тих же даних, тому вам, мабуть, слід запустити його як частину циклу для отримання найкращого результату


1
Спасибі, Алекс. Я бачу проблему з цим: що робити, якщо над циклами згенеровані рішення ніколи не задовольняють обмеження? Це може статися, якщо k засоби встановлені для запуску без обмеження розміру кластера. Я б хотів рішення, яке цього уникає. (Характер програми такий, що мені дійсно потрібно забезпечити кластери мінімального розміру.)
Сайрус S

1

Наскільки великий ваш набір даних? Можливо, ви можете спробувати запустити ієрархічну кластеризацію, а потім вирішити, які кластери зберігати на основі вашої дендрограми.

Якщо ваш набір даних величезний, ви також можете поєднати обидва способи кластеризації: початкову неієрархічну кластеризацію, а потім ієрархічну кластеризацію за допомогою груп з неієрархічного аналізу. Приклад такого підходу можна знайти в Martínez-Pastor et al (2005)


Спасибі, Мануель. Це насправді звучить як дуже інтригуюча можливість. Мені потрібно подумати про те, чи буде ієрархічний розподіл накладати певні обмеження, які б заважали алгоритму домогтися оптимального розподілу кластера безпосередньо під обмеженням розміру. Але інтуїтивно я бачу, що це може спрацювати.
Cyrus S

0

Цього можна досягти, змінивши крок присвоєння кластеру (E в ЕМ), сформулювавши його як проблему оптимізації лінійної мережі з мінімальною витратою (MCF).

Я написав пакет python, який використовує SimpleMinCostFlow інструментів Google для дослідження операцій, що є швидкою реалізацією C ++. У ньому є стандартний API-науковий інтерфейс.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.