4. Домашнє завдання (написання програми)
Джерело завдання. Завдання доповнює матеріали курсу (у вихідному архіві домашнє завдання для теми 12 відсутнє). Постановку сформульовано природно для теми — реалізація алгоритму FP-Growth. Готового коду тут немає — це індивідуальне завдання; техніку обчислень показано на інших даних у 2method.md та 3classroom.md.
Постановка
Реалізувати алгоритм FP-Growth: побудова FP-дерева й рекурсивний видобуток частих наборів. На вхід — транзакції з файлу (CSV/текст, одна транзакція на рядок). Вивести всі часті набори з підтримкою не меншою за заданий поріг.
Вхід і вихід
- Вхід: шлях до файлу транзакцій — по одній транзакції на рядок, елементи
розділені комою (або пробілом). Приклад рядка:
Яблуко,Банан,Виноград. Порядок елементів у рядку несуттєвий; повтори в межах транзакції ігнорують. Також на вхід подають мінімальну підтримку (аргумент командного рядка, параметр або запит); для середнього рівня — ще й мінімальну достовірність . - Вихід: щонайменше — перелік частих наборів із їхньою підтримкою, згрупований за розміром. Формат виводу (консоль/файл) — на розсуд студента; підтримку подавайте як частку (можна й у відсотках), числа округлюйте розумно (напр., 3–4 значущі цифри).
Рівні складності
Оцінка відповідає найвищому повністю й правильно виконаному рівню.
Базовий рівень — 60–74 балів
- Прочитати транзакції з файлу; побудувати множину елементів і кількість транзакцій .
- 1-й прохід: порахувати частоти елементів, відкинути нечасті () і скласти -список (за спаданням частоти; за рівних частот — сталий порядок).
- 2-й прохід: для кожної транзакції лишити часті елементи, відсортувати за -списком і вставити як шлях у FP-дерево; вести лічильники у вузлах і заголовну таблицю зі зв’язками між вузлами (node-links).
- Видобути всі часті набори рекурсивним FP-Growth (умовна база образів умовне FP-дерево рекурсія; поріг застосовувати наново в кожній умовній базі) і вивести їх згруповано за розміром із підтримкою.
Середній рівень — 75–89 балів
Додатково до базового:
- Згенерувати асоціативні правила з кожного частого набору: розбити набір на і усіма способами й лишити правила з (усі потрібні підтримки вже пораховано на етапі видобутку).
- Для кожного правила вивести підтримку та достовірність.
- Коректно опрацьовувати файл із різною довжиною транзакцій, зайвими пробілами та порожніми рядками; пороги , задавати ззовні.
Високий рівень — 90–100 балів
Додатково до середнього виконати щонайменше один із пунктів (краще — обидва):
- Порівняти з Apriori. Реалізувати (або взяти свою реалізацію з Лабораторної 11) алгоритм Apriori і на одній і тій самій базі звірити множини частих наборів обох алгоритмів — вони мають повністю збігатися. Додатково виміряти й порівняти час роботи FP-Growth і Apriori на дедалі більших базах (напр., випадково згенерованих транзакціях), побудувати таблицю або графік «час vs розмір бази» й прокоментувати, на яких даних (щільних/розріджених) який алгоритм швидший.
- Дослідити пороги. Запустити FP-Growth на кількох порогах для однієї бази, показати, як змінюється кількість частих наборів і розмір FP-дерева, і прокоментувати компроміс (низький поріг — лавина наборів; високий — втрата рідкісних, але цінних).
- Передбачити перевірку коректності вводу (порожній файл, некоректний поріг поза , рядки без елементів, дублікати елементів у рядку) з інформативним повідомленням.
Що здавати
- Вихідний код програми (з коротким
README: як запустити, формат входу, як задають пороги). - Приклад запуску на тестовому файлі. Обов’язково перевірте програму на даних Задачі 1–3 (фруктова лавка) за — очікувано три часті 1-набори ( з підтримкою , і з підтримкою ) і три часті 2-набори (, , , усі з підтримкою ); частих наборів розміру немає. Для високого рівня — звірте цей результат зі своєю реалізацією Apriori (мають збігтися).
- Оформлення звіту — за 5report.md; перелік запитань до захисту — у 6questions.md.