# 4. Домашнє завдання (написання програми) > **Джерело завдання.** Формулювання постановки взято **з методичних матеріалів > курсу** й наведено дослівно. Готового коду тут **немає** — це індивідуальне > завдання; техніку обчислень показано на інших даних у [2method.md](2method.md) > та [3classroom.md](3classroom.md). ## Постановка (дослівно) > Реалізувати алгоритм побудови дерева рішень за допомогою Байєсівського > класифікатору. На вхід додатку передається CSV файл з навчальною вибіркою. > Побудоване дерево виводиться на екран. Порівняти результати з результатами > побудови за допомогою алгоритму ID3. > **Зауваження до постановки.** Під «Байєсівським класифікатором» тут розуміють > **наївний баєсів класифікатор** з [Лекції 8](../../Lectures/DA-L08.md). На > відміну від ID3, він **не будує дерева** у вигляді ієрархії вузлів — він оцінює > ймовірності й видає **прогнозований клас** для кожного об'єкта. Тому «порівняти > результати побудови» означає: прогнати наївний баєсів класифікатор і дерево > **ID3** ([Лабораторна 7](../Laboratory7/main.md)) на **тій самій** навчальній > вибірці й **зіставити їхні прогнози** (та точність). Реалізовувати сам ID3 > **заново не потрібно** — скористайтеся деревом із Лабораторної 7 (його > прогнозами) або, для повноти, увімкніть його як окремий модуль. ## Вхід і вихід - **Вхід:** шлях до файлу **CSV** із навчальною вибіркою. Перший рядок — заголовок з іменами атрибутів; **останній стовпець** — цільовий клас, решта — категоріальні предиктори. Кожен наступний рядок — один об'єкт. (Формат збігається з домашнім завданням [Лабораторної 7](../Laboratory7/main.md), тож той самий файл годиться для обох робіт.) - **Вихід:** для кожного об'єкта (або для заданого об'єкта із запиту) — **прогнозований клас**; на середньому й високому рівнях — ще й **апостеріорні ймовірності** класів та **порівняння** з прогнозами ID3. Приклад вхідного CSV (вибірка «Спортивний канал»): ```text Стать,Дохід,Студент,СпортивнийКанал Ч,Високий,Так,Так Ж,Середній,Ні,Ні Ч,Низький,Так,Ні Ж,Низький,Ні,Ні Ч,Середній,Ні,Так Ж,Високий,Ні,Так Ж,Середній,Так,Так Ч,Середній,Так,Так Ж,Низький,Так,Ні Ж,Середній,Ні,Ні ``` ## Рівні складності Оцінка відповідає найвищому **повністю й правильно** виконаному рівню. ### Базовий рівень — 60–74 балів 1. Прочитати навчальну вибірку з файлу CSV (категоріальні атрибути; останній стовпець — клас). 2. **Навчити** наївний баєсів класифікатор: оцінити апріорні ймовірності $P(C) = N_C/N$ та умовні ймовірності $P(x_j = v \mid C) = N_{C,\,j=v}/N_C$ частотами. 3. **Класифікувати** об'єкти за правилом максимальної апостеріорної ймовірності $\hat{C} = \arg\max_C P(C)\prod_j P(x_j \mid C)$ і вивести прогнозований клас. 4. Формули реалізувати **самостійно** (не викликати готовий `naive_bayes` як основне обчислення). ### Середній рівень — 75–89 балів Додатково до базового: 5. Реалізувати **згладжування Лапласа** $P(x_j = v \mid C) = \dfrac{N_{C,\,j=v} + 1}{N_C + m_j}$ (де $m_j$ — число значень ознаки) і показати, що воно усуває **нульові ймовірності**. 6. Виводити **апостеріорні ймовірності** кожного класу (знормовані, у сумі $1$), а не лише клас-переможець. 7. Коректно опрацьовувати файл із **заголовком** і довільним числом категоріальних атрибутів; передбачити **класифікацію нового об'єкта**, заданого з клавіатури або окремим файлом. ### Високий рівень — 90–100 балів Додатково до середнього: 8. **Порівняти** прогнози наївного баєсового класифікатора з прогнозами дерева **ID3** ([Лабораторна 7](../Laboratory7/main.md)) на **тій самій** вибірці: обчислити **точність** обох (частку правильних прогнозів щодо справжнього класу). 9. Побудувати й вивести **матрицю невідповідності** — таблицю, що показує, на скількох об'єктах два методи дали однаковий/різний клас (див. Задачу 3 у [3classroom.md](3classroom.md)); за наявності розбіжностей — перелічити об'єкти, де методи не збіглися. 10. Передбачити **перевірку коректності** вводу (порожній файл, невідоме значення ознаки у новому об'єкті, пропуски) з інформативним повідомленням; для стійкості до переповнення вести обчислення в **логарифмах**. ## Що здавати - Вихідний код програми (з коротким `README`: як запустити, формат вхідного CSV). - Приклад запуску на **тестовому** файлі. Обов'язково перевірте програму на вибірці «Спортивний канал»: очікувані апостеріорні ймовірності $P(\text{Так} \mid x)$ та прогнози наведено в [Задачі 3](3classroom.md) (усі $10$ об'єктів класифікуються правильно, точність $100\,\%$, повний збіг з ID3). - Оформлення звіту — за [5report.md](5report.md); перелік запитань до захисту — у [6questions.md](6questions.md).