
CURE () або кластеризація з використанням представників — ефективний алгоритм кластеризації даних для великих баз даних. Порівняно з кластеризацією k-середніх, він більш стійкий до викидів і здатний ідентифікувати кластери, які мають несферичні форми та різноманітні розміри.

Недоліки традиційних алгоритмів
Популярний алгоритм кластеризації k-середніх мінімізує критерій суми квадратів помилок:
: ,
де  — число кластерів,  — отримані кластери, ,  — центроїди векторів .

Враховуючи великі відмінності в розмірах або геометрії різних кластерів, метод квадратичної помилки може розділити великі кластери, щоб мінімізувати квадратичну помилку, що не завжди правильно. Крім того, ці проблеми існують з ієрархічними алгоритмами кластеризації, оскільки жоден із показників відстані між кластерами () зазвичай не працює у випадку коли кластери мають різні форми. Крім того, при великому  час роботи алгоритму є високим.

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

Алгоритм кластеризації CURE
Щоб уникнути проблем із кластерами неоднорідного розміру чи форми, CURE використовує ієрархічний алгоритм кластеризації, який приймає середину між центроїдом і всіма крайніми точками. У CURE вибирається постійне число , яке відповідає за розсіяні точки кластера, і вони звужуються до центроїда кластера на частку . Розсіяні точки після стиснення використовуються як представники кластера. Кластери з найближчою парою представників є кластерами, які об'єднуються на кожному кроці ієрархічного алгоритму кластеризації CURE. Це дозволяє CURE правильно ідентифікувати кластери та робить його менш чутливим до викидів.

Обчислювальна складність алгоритму дорівнює O(n 2 log n), що робить його обчислювально витратним, а просторова складність дорівнює O(n).

Алгоритм не можна безпосередньо застосувати до великих баз даних через високу обчислювальну складність. Наступні вдосконалення покликані розв'язати цю проблему:

* Випадкова вибірка: випадкова вибірка підтримує великі набори даних. Як правило, випадкова вибірка поміщається в основну пам'ять. Випадкова вибірка передбачає компроміс між точністю та ефективністю.
* Перегородка: Основна ідея полягає в тому, щоб розділити простір зразка на p розділів. Кожен розділ містить n/p елементів. Перший прохід частково кластеризує кожну секцію, поки кінцева кількість кластерів не зменшиться до n/pq для деякої константи q ≥ 1. Другий прохід кластеризації на n/q частково кластеризує розділи. Для другого проходу зберігаються лише репрезентативні точки, оскільки процедура злиття вимагає лише репрезентативних точок попередніх кластерів перед обчисленням репрезентативних точок для об'єднаного кластера. Розбиття вхідних даних зменшує час виконання.
* Позначення даних на диску: враховуючи лише репрезентативні точки для k кластерів, решта точок даних також призначаються кластерам. Для цього вибирається частка випадково вибраних репрезентативних точок для кожного з k кластерів, а точка даних призначається кластеру, що містить найближчу до нього репрезентативну точку.

Опис алгоритму
CURE (кількість точок, k)

Вхід: Множина точок 

Вихід: k кластерів

* Для кожного кластера  (кожної вхідної точки) в .mean і .rep зберігається середнє значення точок у кластері та набір c репрезентативних точок кластера (спочатку c = 1, оскільки кожен кластер має одну точку даних). Також .closest зберігає кластер, найближчий до .
* Усі вхідні точки вставляються в kd-дерево 
* Розглядайте кожну вхідну точку як окремий кластер, обчислюйте .closest для кожного , а потім вставляйте кожен кластер у купу . (кластери розташовані в порядку збільшення відстані між  та .closest).
* Доки розмір 
** Видаліть верхній елемент  (скажімо ) і об'єднайте його з найближчим кластером .closest (скажімо ) і обчисліть нові репрезентативні точки для об'єднаного кластера .
** Вилучіть  і  з  і .
** Для всіх кластерів  у  оновіть .closest і перемістіть 
** вставте  у 
** повторяйте, доки виконується нерівність

Доступність

* Бібліотека з відкритим кодом  pyclustering включає реалізацію алгоритму CURE на Python і C++.

Дивитися також

* Кластеризація методом k-середніх
* 

Список літератури

* 
* 
* 
