2. Методичні вказівки
Цей розділ самодостатній: у ньому зібрано теорію алгоритму FP-Growth — FP-дерево, умовну базу образів, умовне FP-дерево й рекурсивний видобуток — потрібну для аудиторних задач (3classroom.md) і домашньої програми (4task.md). Ширше цю саму теорію викладено в Лекції 12; означення асоціативних правил і мір інтересовності — у Лекції 11 та методичних вказівках Лабораторної 11.
2.1 Транзакційна база та часті набори (нагадування)
Транзакційна база — множина транзакцій над множиною елементів ; кожна транзакція — набір елементів. Набір частий, якщо його підтримка
Зручно тримати лічильник і порівнювати його з . Пошук асоціативних правил зводиться до пошуку всіх частих наборів (решта — генерація правил — дешева); саме цю важку частину й розв’язує FP-Growth.
2.2 Навіщо FP-Growth
Apriori (Лабораторна 11) породжує кандидатів і сканує базу на кожному рівні — на щільних базах кандидатів стає надто багато, а повторні проходи дорогі. FP-Growth уникає обох вад:
Ідея FP-Growth. Стиснути всю базу в компактне FP-дерево за два проходи, а тоді видобувати часті набори прямо з дерева, не породжуючи кандидатів.
2.3 FP-дерево та його побудова
FP-дерево — префіксне дерево транзакцій. Корінь — null; кожен інший вузол
зберігає елемент і лічильник (скільки транзакцій проходить крізь нього);
транзакція, обмежена частими елементами й упорядкована за спільним порядком, —
шлях від кореня. Вузли того самого елемента сполучено у список зв’язків між
вузлами (node-links).
Дерево будують за два проходи:
- 1-й прохід — частоти й порядок. Порахувати підтримку кожного елемента, відкинути нечасті, а решту впорядкувати за спаданням частоти. Цей упорядкований список частих елементів — -список; за рівних частот зберігають сталий (початковий) порядок.
- 2-й прохід — вставлення. Для кожної транзакції лишити часті елементи, відсортувати за -списком і вставити як шлях: спільний префікс нарощує лічильники наявних вузлів, розбіжний «хвіст» додає нові.
Заголовна таблиця зберігає для кожного частого елемента його сумарну частоту й покажчик на перший вузол; усі вузли елемента сполучено node-links. Найпоширеніші елементи стоять близько до кореня — звідси стиснення.
2.4 Умовна база образів та умовне FP-дерево
Видобуток іде знизу вгору заголовною таблицею (від найрідшого елемента).
- Умовна база образів (англ. conditional pattern base) елемента — множина префіксних шляхів усіх вузлів : для кожного вузла беруть шлях від кореня до нього, без самого , із лічильником цього вузла .
- Умовне FP-дерево елемента — FP-дерево, побудоване з його умовної бази образів, у якому лишено лише елементи, часті вже в межах цієї бази (їхня сумарна частота ).
2.5 Рекурсивний видобуток (FP-Growth)
FP-Growth(Дерево, α):
якщо Дерево — єдиний шлях P:
для кожної непорожньої підмножини β вузлів шляху P:
вивести β ∪ α з підтримкою = найменший лічильник вузлів у β
інакше:
для кожного елемента i заголовної таблиці (знизу вгору):
β <- α ∪ { i }
вивести β з підтримкою = сумарний лічильник i
побудувати умовну базу образів i та умовне FP-дерево Дерево_i
якщо Дерево_i не порожнє:
FP-Growth(Дерево_i, β)
Спершу викликають FP-Growth(усе_дерево, ∅). Гілка «єдиний шлях» — важлива
оптимізація: із ланцюжка одразу виписують усі комбінації його вузлів
(підтримка комбінації — найменший лічильник). Поріг застосовують
наново в кожному умовному дереві — це відсіює несправжні набори.
2.6 Apriori / Eclat / FP-Growth
Усі три знаходять той самий набір частих наборів; різниця — у способі:
| Ознака | Apriori | Eclat | FP-Growth |
|---|---|---|---|
| Генерація кандидатів | так | немає | немає |
| Проходів по базі | (по рівнях) | 2 | |
| Пам’ять | мала | tid-множини | FP-дерево |
| Найкращий на | малих/розріджених | розріджених | щільних |
2.7 Демонстраційний приклад (на інших даних, ніж у задачах)
Розгляньмо ту саму базу невеликої чайної крамниці, що й у Лабораторній 11 () над елементами — і застосуймо до неї FP-Growth за тим самим порогом (лічильник ):
| Транзакція | Елементи |
|---|---|
| Чай, Цукор | |
| Чай, Цукор, Лимон | |
| Чай, Цукор, Мед | |
| Чай, Лимон | |
| Лимон, Мед |
(а) 1-й прохід — -список. Частоти: Чай , Цукор , Лимон , Мед — усі часті (). За спаданням частоти (рівні Цукор і Лимон — у початковому порядку):
(б) 2-й прохід — упорядковані транзакції й дерево.
| Транзакція | За -списком |
|---|---|
| Чай, Цукор | |
| Чай, Цукор, Лимон | |
| Чай, Цукор, Мед | |
| Чай, Лимон | |
| Лимон, Мед |
Вставивши шляхи (транзакція починається з Лимон і дає нову гілку під коренем), дістаємо:
null
├─ Чай:4
│ ├─ Цукор:3
│ │ ├─ Лимон:1
│ │ └─ Мед:1
│ └─ Лимон:1
└─ Лимон:1
└─ Мед:1

Заголовна таблиця: Чай(): Чай:4; Цукор(): Цукор:3; Лимон():
Лимон:1 → Лимон:1 → Лимон:1; Мед(): Мед:1 → Мед:1. Перевірка сум: Лимон
, Мед — збігається з частотами.
(в) Видобуток (знизу вгору: Мед, Лимон, Цукор, Чай).
- Мед — . Умовна база образів: і . Частоти в базі: Чай , Цукор , Лимон — усі , тож умовне дерево порожнє. Жодної частої пари з Мед немає.
- Лимон — . Умовна база: і
. Частоти: Чай , Цукор — Цукор відпадає. Умовне дерево —
єдиний вузол
Чай:2, звідки . - Цукор — . Умовна база: ; умовне дерево
Чай:3, звідки . - Чай — ; під коренем, умовна база порожня.
Часті набори: 1-набори — Чай(), Цукор(), Лимон(), Мед(); 2-набори — () і (); частих наборів розміру немає. Це точно той самий результат, що дав Apriori на цій базі в Лабораторній 11 (§2.8) — але без кандидатів.
2.8 Робочий контрольний список
- Спершу зафіксуйте поріг і переведіть його в лічильник .
- 1-й прохід: порахуйте частоти, відкиньте нечасті, складіть -список (за спаданням частоти; рівні — у сталому порядку).
- 2-й прохід: кожну транзакцію відсортуйте за -списком перед вставленням — інакше спільні префікси не зіллються.
- Перевіряйте дерево: сума лічильників вузлів елемента його частота.
- Видобуток ведіть знизу вгору заголовною таблицею; для кожного елемента — умовна база образів умовне дерево рекурсія; єдиний шлях — одразу всі комбінації.
- Поріг перевіряйте наново в кожній умовній базі.
- Наприкінці звірте список частих наборів із Apriori/Eclat — вони мають збігтися.