4. Домашнє завдання (написання програми)
Джерело завдання. Формулювання взято з методичних матеріалів курсу. Готового коду тут немає — це індивідуальне завдання; техніку обчислень показано на інших даних у 2method.md та 3classroom.md.
Постановка
Реалізувати алгоритм -means. На вхід додатку передається CSV файл з даними. Результати категоризації записуються у файл.
Мову програмування студент обирає самостійно. Значення ознак вважати числовими; кожен рядок файлу — окремий об’єкт, стовпці — його ознаки (координати в просторі ознак). Кластеризацію виконують методом -середніх (евклідова відстань).
Вхід і вихід
- Вхід: шлях до файлу CSV з даними — рядки-об’єкти, числові стовпці-ознаки (можлива наявність заголовка та стовпця-ідентифікатора, які до кластеризації не входять). Число кластерів задають параметром.
- Вихід: файл із результатом категоризації — для кожного об’єкта його мітка кластера (номер ). Додатково рекомендовано вивести координати фінальних центроїдів та досягнуту SSE.
Рівні складності
Оцінка відповідає найвищому повністю й правильно виконаному рівню.
Базовий рівень — 60–74 балів
- Прочитати дані з файлу CSV (числові ознаки об’єктів).
- Реалізувати метод -середніх із фіксованим (задається параметром):
- ініціалізація центроїдів (напр., перші об’єктів або випадкові);
- віднесення кожного об’єкта до найближчого центроїда за евклідовою відстанню;
- перерахунок центроїдів як середніх кластерів;
- повторення до збіжності (центроїди не зміщуються) або досягнення максимуму ітерацій.
- Записати у вихідний файл мітки кластерів для всіх об’єктів.
- Формули відстані та перерахунку центрів реалізувати самостійно (не
викликати готовий
KMeansяк основне обчислення).
Середній рівень — 75–89 балів
Додатково до базового:
- Нормалізувати ознаки перед кластеризацією (-нормування або min–max) і пояснити, навіщо це потрібно за несумірних масштабів ознак.
- Обчислювати SSE отриманого розбиття й виводити її.
- Виконувати кілька запусків алгоритму з різною (випадковою) ініціалізацією центроїдів і обирати найкраще розбиття — з найменшою SSE (боротьба з чутливістю до ініціалізації).
Високий рівень — 90–100 балів
Додатково до середнього:
- Реалізувати автоматичний вибір одним зі способів:
- метод ліктя (elbow) — побудувати залежність SSE$(k)$ для діапазону і визначити точку «зламу»; або
- силуетний коефіцієнт — обчислити середній силует для кожного і обрати з найбільшим значенням.
- Передбачити перевірку коректності вводу (порожній файл, нечислові значення, пропуски, більше за число об’єктів) з інформативним повідомленням.
- Опрацьовувати порожні кластери (коли до центроїда не віднесено жодної точки) — переініціалізацією центра чи іншою розумною стратегією.
Що здавати
- Вихідний код програми (з коротким
README: як запустити, формат входу й виходу). - Приклад запуску на тестовому файлі. Обов’язково перевірте програму на даних Задачі 2 ( точок, ) — очікувані кластери та і .
- Оформлення звіту — за 5report.md; перелік запитань до захисту — у 6questions.md.