# 4. Домашнє завдання (написання програми) > **Джерело завдання.** Завдання **доповнює матеріали курсу** (у вихідному архіві > домашнє завдання для теми 13 відсутнє). Готового коду тут **немає** — це > індивідуальне завдання; техніку обчислень показано на інших даних у > [2method.md](2method.md) та [3classroom.md](3classroom.md). ## Постановка Реалізувати метод головних компонент (PCA): центрування даних, обчислення коваріаційної матриці, власних векторів/значень, проєкція на головні компоненти. На вхід — CSV з числовими ознаками; звести дані до 2 компонент і візуалізувати; вивести частку поясненої дисперсії. **Мову програмування студент обирає самостійно.** Обчислення власних значень і векторів дозволено виконувати бібліотечною функцією (зокрема `numpy.linalg.eig` / `numpy.linalg.eigh`); центрування, коваріаційну матрицю, проєкцію та частку поясненої дисперсії реалізуйте **самостійно**. ## Вхід і вихід - **Вхід:** шлях до файлу CSV з числовими ознаками (рядки — об'єкти, стовпці — ознаки; можливі заголовок і нечислові стовпці-мітки, які слід відкинути або використати лише для розфарбування графіка). - **Вихід:** - коваріаційна (або кореляційна — для стандартизованих даних) матриця; - власні значення (за спаданням) і **частки поясненої дисперсії**; - нові координати об'єктів у перших **двох** головних компонентах; - **візуалізація** — діаграма розсіювання об'єктів у координатах PC1–PC2. ## Рівні складності Оцінка відповідає найвищому **повністю й правильно** виконаному рівню. ### Базовий рівень — 60–74 балів 1. Прочитати числові ознаки з файлу CSV; **центрувати** дані (відняти середнє кожної ознаки). 2. Обчислити **коваріаційну матрицю** та її **власні значення й вектори**; упорядкувати компоненти за спаданням власних значень. 3. Спроєктувати дані на **дві** перші головні компоненти й **побудувати діаграму розсіювання** PC1–PC2. 4. Вивести **частку поясненої дисперсії** кожної з двох компонент і їх суму. ### Середній рівень — 75–89 балів Додатково до базового: 5. Передбачити **стандартизацію** ознак (поділ на СКВ) як опцію; пояснити у звіті, коли вона потрібна, і показати різницю результату з нею та без неї. 6. Побудувати **scree-графік** (стовпчики власних значень) і вивести **накопичену** пояснену дисперсію для всіх компонент. 7. Дати змогу обрати число компонент $k$ за **порогом** накопиченої дисперсії (напр., $0.90$) і вивести обране $k$. ### Високий рівень — 90–100 балів Додатково до середнього: 8. Застосувати **метод $k$-середніх** ([Лабораторна 9](../Laboratory9/main.md)) до даних **до** зменшення розмірності (усі ознаки) та **після** проєкції на 2 компоненти; **порівняти** отримані розбиття (напр., за узгодженістю міток або значенням SSE) і за часом виконання. 9. Візуалізувати кластери на площині PC1–PC2 (розфарбувати точки за кластерами) і прокоментувати, чи стала структура даних видимою після зменшення розмірності. 10. Передбачити **перевірку коректності** вводу (порожній файл, нечислові значення, пропуски, один стовпець) з інформативним повідомленням. ## Що здавати - Вихідний код програми (з коротким `README`: як запустити, який формат входу). - Приклад запуску на **тестовому** файлі. Обов'язково перевірте програму на даних [Задач 1–3](3classroom.md) (п'ять точок $(2,3),(3,6),(4,5),(5,4),(6,7)$) — очікувано коваріаційна матриця з діагоналлю $2.5$ і коваріацією $1.5$, власні значення $4$ та $1$, частка поясненої дисперсії 1-ї компоненти $0.8$. - Візуалізацію PC1–PC2 та (для середнього рівня й вище) scree-графік. - Оформлення звіту — за [5report.md](5report.md); перелік запитань до захисту — у [6questions.md](6questions.md).