2. Методичні вказівки
Цей розділ самодостатній: у ньому зібрано теорію кластеризації, функцій відстані та методу -середніх, потрібну для аудиторних задач (3classroom.md) і домашньої програми (4task.md). Ширше ту саму теорію викладено в Лекції 9.
2.1 Задача кластеризації
Кластеризація — розбиття вибірки об’єктів на групи (кластери) так, щоб об’єкти одного кластера були схожі, а різних — несхожі. Мітки груп невідомі наперед (навчання без учителя) — на відміну від класифікації, де класи задані. Розбиття покриває всю вибірку, кластери не перетинаються й непорожні.
2.2 Функції відстані
«Схожість» задають відстанню: близькі об’єкти схожі. Для векторів і уживають окремі випадки відстані Мінковського :
| Назва | Формула |
|---|---|
| Манхеттенська () | $\sum_i |
| Евклідова () | |
| Чебишова () | $\max_i |
Метод -середніх використовує евклідову відстань. Оскільки корінь — монотонна функція, для віднесення точки до найближчого центроїда можна порівнювати квадрати відстаней (без обчислення кореня).
2.3 Метод -середніх та SSE
Кожен кластер представлений центроїдом — середнім своїх об’єктів:
Якість розбиття вимірюють сумою квадратів помилок (англ. sum of squared errors):
Мета — знайти розбиття з найменшою SSE. Точний перебір неможливий (число розбиттів — Стірлінга — росте надзвичайно швидко), тому -середніх шукає локальний мінімум ітераційно:
kMeans(точки X, число кластерів k):
1. обрати k псевдовипадкових центроїдів
повторювати:
2. ВІДНЕСЕННЯ: кожну точку -> до кластера з найближчим центроїдом
3. ПЕРЕРАХУНОК: центроїд кожного кластера = середнє його точок
4. якщо центроїди не змістилися -> СТОП, інакше -> крок 2
2.4 Критерій збіжності
Алгоритм зупиняється, коли центроїди перестають зміщуватися — рівносильно, коли не змінюється жодне віднесення точок і SSE перестає спадати. Кожна ітерація не збільшує SSE (крок віднесення зменшує її вибором найближчого центра, крок перерахунку — тим, що середнє мінімізує суму квадратів), а розбиттів скінченне число, тож алгоритм завжди збігається за скінченну кількість кроків. Результат залежить від початкових центроїдів (можливий локальний мінімум).
2.5 Нормалізація ознак
Якщо ознаки мають різні масштаби, евклідова відстань визначається переважно ознакою з більшим діапазоном. Тому перед кластеризацією ознаки нормалізують. Дві поширені схеми:
- -нормування (стандартизація): — нульове середнє й одинична дисперсія кожної ознаки;
- min–max масштабування: — усі значення в .
2.6 Вибір числа кластерів
— вхідний параметр; «правильне» підбирають, порівнюючи розбиття:
- Метод ліктя (англ. elbow). Для кількох будують графік SSE$(k)$: зі зростанням SSE спадає, але з певного — вже повільно. Точку «зламу» (лікоть), після якої виграш малий, беруть за розумне .
- Силуетний коефіцієнт (англ. silhouette). Для об’єкта нехай —
середня відстань до об’єктів свого кластера, а — найменша середня
відстань до об’єктів іншого кластера. Тоді
Середнє по всіх об’єктах — силует розбиття; що ближче до , то краще розділені кластери. Обирають з найбільшим силуетом.
2.7 Демонстраційний приклад (на інших даних, ніж у задачах)
Кластеризуємо точок на площині у кластери:
Точки утворюють два згустки (вгорі-ліворуч і внизу-праворуч). Візьмемо невдалі початкові центроїди — обидва у верхньому згустку: , .
Ітерація 1. Евклідові відстані до центрів і віднесення:
| Точка | Кластер | ||
|---|---|---|---|
Розбиття: , . Нові центроїди:
.
Ітерація 2. З новими центрами , :
| Точка | Кластер | ||
|---|---|---|---|
Точка перейшла до : розбиття стало , — правильний поділ згустків. Нові центроїди:
.
Ітерація 3. Віднесення не змінюється, центроїди не зміщуються — збіжність. SSE монотонно спадала: . Фінальне розбиття , , .
2.8 Робочий контрольний список
- Спершу зафіксуйте і початкові центроїди (перші точок, випадкові точки або -means++).
- На кроці віднесення для кожної точки рахуйте відстань до всіх центрів і беріть найближчий (порівнюйте квадрати відстаней — швидше).
- На кроці перерахунку новий центр — це покоординатне середнє точок кластера; порожній кластер лишіть зі старим центром (або переініціалізуйте).
- Зупиняйтесь, коли центроїди не змістилися (або зсув менший за поріг / досягнуто максимуму ітерацій).
- SSE має не зростати між ітераціями — якщо зросла, шукайте помилку в обчисленнях.
- Для порівняння розбиттів різних запусків беріть те, у якого найменша SSE.