3. Аудиторні задачі з розв’язаннями
Ці задачі розбирають в аудиторії «руками». Вони показують ті самі кроки, які потім автоматизує домашня програма (4task.md). Теорія й псевдокод — у методичних вказівках. Щоб побачити, що FP-Growth дає той самий результат, що й Apriori, ми беремо ту саму базу, на якій виконували Apriori у Задачі 2 Лабораторної 11, і наприкінці звіряємо часті набори. Дані задач відрізняються від демонстраційного прикладу у 2method.md.
Наскрізна база задач — транзакційна база фруктової лавки (), та сама, що в Задачі 2 Лабораторної 11:
| Транзакція | Елементи |
|---|---|
| Яблуко, Банан | |
| Яблуко, Банан, Виноград | |
| Яблуко, Виноград | |
| Банан, Виноград | |
| Яблуко, Банан, Виноград, Апельсин | |
| Банан, Апельсин |
Поріг усюди — (набір частий, коли він є принаймні у з транзакцій, лічильник ).
Задача 1. Побудова FP-дерева
Знайти -список, упорядковані транзакції, FP-дерево й заголовну таблицю для бази фруктової лавки за .
Розв’язання. 1-й прохід — частоти елементів.
| Елемент | Транзакції | Лічильник | Частий? |
|---|---|---|---|
| Яблуко | 4 | так | |
| Банан | 5 | так | |
| Виноград | 4 | так | |
| Апельсин | 2 | ні |
Апельсин відпадає (). Решту впорядковуємо за спаданням частоти; за рівних частот (Яблуко й Виноград — обидва ) зберігаємо початковий порядок елементів. -список:
2-й прохід — упорядковані транзакції (викидаємо Апельсин, сортуємо за -списком):
| Транзакція | Початково | За -списком |
|---|---|---|
| Яблуко, Банан | Банан, Яблуко | |
| Яблуко, Банан, Виноград | Банан, Яблуко, Виноград | |
| Яблуко, Виноград | Яблуко, Виноград | |
| Банан, Виноград | Банан, Виноград | |
| Яблуко, Банан, Виноград, Апельсин | Банан, Яблуко, Виноград | |
| Банан, Апельсин | Банан |
Вставлення шляхів. створює Банан→Яблуко. подовжує його до
Банан→Яблуко→Виноград. починається з Яблуко (не з Банан) — спільного
префікса немає, з’являється нова гілка Яблуко→Виноград під коренем.
ділить корінь-вузол Банан і додає під ним Виноград. лягає вздовж наявної
гілки Банан→Яблуко→Виноград, нарощуючи лічильники. — лише Банан. Остаточне
FP-дерево:
null
├─ Банан:5
│ ├─ Яблуко:3
│ │ └─ Виноград:2
│ └─ Виноград:1
└─ Яблуко:1
└─ Виноград:1

Заголовна таблиця (частота + вузли за зв’язками):
| Елемент | Частота | Вузли дерева (за зв’язками) |
|---|---|---|
| Банан | 5 | Банан:5 |
| Яблуко | 4 | Яблуко:3 → Яблуко:1 |
| Виноград | 4 | Виноград:2 → Виноград:1 → Виноград:1 |
Перевірка (сума лічильників вузлів = частота): Яблуко ; Виноград ; Банан — усе збігається з 1-м проходом.
Відповідь: -список ; FP-дерево наведено вище (шість вузлів проти входжень частих елементів окремими шляхами — стиснення завдяки спільним префіксам).
Задача 2. Умовна база образів та умовне FP-дерево
Для елемента Виноград (найрідший у -списку — з нього починають видобуток) побудувати умовну базу образів і умовне FP-дерево.
Розв’язання. За заголовною таблицею у Винограду три вузли; для кожного беремо префіксний шлях від кореня (без самого Винограду) з лічильником цього вузла:
- Виноград:2 — під
Банан→Яблуко: шлях з лічильником ; - Виноград:1 — під
Банан: шлях з лічильником ; - Виноград:1 — під
Яблуко(гілка від кореня): шлях з лічильником .
Умовна база образів Винограду:
Частоти в цій базі: Банан , Яблуко — обидва часті (), нічого не відкидаємо. Вставивши три шляхи (за порядком ), дістаємо умовне FP-дерево Винограду:
null
├─ Банан:3
│ └─ Яблуко:2
└─ Яблуко:1 (умовне дерево для Виноград)

Це дерево не є єдиним шляхом (Яблуко трапляється і під Банан, і під коренем), тож із нього часті набори видобувають рекурсивно — знизу вгору за його заголовною таблицею :
- Яблуко в умовному дереві Винограду: дає набір з підтримкою . Його умовна база тут — ; Банан має лічильник , відпадає — далі порожньо.
- Банан в умовному дереві Винограду: дає набір з підтримкою . Банан — під коренем, умовна база порожня.
Відповідь: умовна база образів Винограду —
; умовне
FP-дерево — гілки Банан:3→Яблуко:2 та Яблуко:1. З нього виходять часті набори
і .
Набір не частий: Банан
всередині під-бази Яблуко має лічильник лише .
Задача 3. Повний видобуток і звірка з Apriori
Видобути всі часті набори алгоритмом FP-Growth і звірити їх із результатом Apriori із Задачі 2 Лабораторної 11 (мають збігтися).
Розв’язання. Обходимо заголовну таблицю Задачі 1 знизу вгору: Виноград, Яблуко, Банан.
- Виноград (Задача 2): , а з умовного дерева — і .
- Яблуко: . Умовна база образів —
(у Яблука два вузли:
Яблуко:3під Банан дає ;Яблуко:1під коренем дає порожній шлях). Банан частий (), умовне дерево — єдиний вузолБанан:3, звідки . - Банан: ; найчастіший, завжди під коренем — умовна база порожня.
Усі часті набори й звірка з Apriori (Задача 2 Лабораторної 11):
| Частий набір | Лічильник | Підтримка | Звідки у FP-Growth | Apriori (Л11) |
|---|---|---|---|---|
| 5 | заголовна таблиця | так | ||
| 4 | заголовна таблиця | так | ||
| 4 | заголовна таблиця | так | ||
| 3 | умовне дерево Яблуко | так | ||
| 3 | умовне дерево Виноград | так | ||
| 3 | умовне дерево Виноград | так |
Частих наборів розміру немає: єдиний кандидат-трійка трапляється лише в (підтримка ), і FP-Growth його не породив — саме тому, що Банан відсіявся всередині умовної під-бази (Задача 2).
Відповідь: FP-Growth знаходить три часті 1-набори () і три часті 2-набори (, усі з підтримкою ); частих наборів розміру немає. Це точно той самий список, що дав Apriori у Задачі 2 Лабораторної 11 — але без генерації кандидатів і лише за два проходи по базі. З цих частих 2-наборів далі генерують правила так само, як у Задачі 2 Лабораторної 11 (з проходять чотири правила з достовірністю ).
Зв’язок із домашнім завданням. Саме ці кроки — порахувати частоти й скласти -список, побудувати FP-дерево, для кожного елемента утворити умовну базу образів та умовне дерево й рекурсивно видобути часті набори — виконуватиме ваша програма для довільного файлу транзакцій (4task.md). База фруктової лавки — зручний тест: подайте ці шість транзакцій на вхід за й переконайтесь, що програма повертає ті самі три часті 1-набори та три часті 2-набори, а її результат збігається з Apriori з Лабораторної 11.