SlideShare a Scribd company logo
Поиск паттернов
Константин Игнатов
7 ноября 2017
2017-11-07
Поиск паттернов
∙ Паттерн — это...
Типы паттернов
2
∙
Паттерн — это...
2017-11-07
Поиск паттернов
Что такое паттерны
Примеры
Типы паттернов
1. Паттерн — это что-то повторяющееся в данных.
2. То есть: некоторая структура, которая
представляет для нас интерес.
3. Как правило, это означает, что она должна
встречаться чаще заданного числа раз (в
абсолютном или относительном измерении). Это
число называется ≪поддержка≫.
∙ Интересный паттерн должен...
∙
встречаться часто в данных — поддержка
(support),
∙ удовлетворять другим критериям.
Типы паттернов
2
∙ Интересный паттерн должен...
∙ встречаться часто в данных — поддержка
(support),
∙
удовлетворять другим критериям.
2017-11-07
Поиск паттернов
Что такое паттерны
Примеры
Типы паттернов
1. То есть: некоторая структура, которая
представляет для нас интерес.
2. Как правило, это означает, что она должна
встречаться чаще заданного числа раз (в
абсолютном или относительном измерении). Это
число называется ≪поддержка≫.
Типы паттернов
2
2017-11-07
Поиск паттернов
Что такое паттерны
Примеры
Типы паттернов
1. Магазины хотят ставить рядом товары, которые
часто покупают вместе.
2. ... То есть, которые часто появляются в одном
чеке друг с другом.
3. ... По крайней мере так было когда-то —
исторические корни задачи: байка про
подгузники и пиво.
4. ... Сейчас-то они наоборот делают и самое нужное прячут в самом потаённом углу,
чтобы я прошёлся до касс/выхода через весь магазин и купил ещё что-нибудь лишнего
(шутка).
Типы паттернов
2
2017-11-07
Поиск паттернов
Что такое паттерны
Примеры
Типы паттернов
1. Веб-аналитикам интересно понимать, какую
последовательность действий пользователи
чаще всего делают на сайте.
2. При этом может быть некоторая вариативность в
промежуточных действиях, которая не
представляет интереса: например, важно только,
что человек нажал на иконку с товаром, а потом
— на кнопку ≪В корзину≫.
Mozilla /5.0 ( Windows NT 6 . 1 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e
Gecko ) Chrome /43.0.2357.81 S a f a r i /537.36 OPR/30.0.1835.59
Mozilla /5.0 ( Windows NT 6 . 1 ; Win64 ; x64 ) AppleWebKit /537.36 (KHTML,
l i k e Gecko ) Chrome /61.0.3163.100 S a f a r i /537.36
Dalvik /2.1.0 ( Linux ; U; Android 5 . 1 ; E5533 Build /29.1.B. 0 . 8 7 )
Mozilla /5.0 ( Windows NT 1 0 . 0 ; WOW64; Trident / 7 . 0 ; rv : 1 1 . 0 ) l i k e
Gecko
Mozilla /5.0 ( Windows NT 5.1) AppleWebKit /537.36 (KHTML, l i k e Gecko )
Chrome /49.0.2623.112 S a f a r i /537.36 OPR/36.0.2130.80
Dalvik /2.1.0 ( Linux ; U; Android 7 . 0 ; SM−J530FM Build /NRD90M)
Mozilla /5.0 ( Linux ; Android 4 . 4 . 2 ; GT−P5200 Build /KOT49H)
AppleWebKit /537.36 (KHTML, l i k e Gecko ) Chrome /61.0.3163.98
S a f a r i /537.36
Dalvik /2.1.0 ( Linux ; U; Android 5 . 0 . 2 ; C6903 Build /14.5.A. 0 . 2 4 2 )
Mozilla /5.0 ( Windows NT 1 0 . 0 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e
Gecko ) Chrome /60.0.3112.113
Паттерны в строках
3
Mozilla /5.0 ( Windows NT 6 . 1 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e
Gecko ) Chrome /43.0.2357.81 S a f a r i /537.36 OPR/30.0.1835.59
Mozilla /5.0 ( Windows NT 6 . 1 ; Win64 ; x64 ) AppleWebKit /537.36 (KHTML,
l i k e Gecko ) Chrome /61.0.3163.100 S a f a r i /537.36
Dalvik /2.1.0 ( Linux ; U; Android 5 . 1 ; E5533 Build /29.1.B. 0 . 8 7 )
Mozilla /5.0 ( Windows NT 1 0 . 0 ; WOW64; Trident / 7 . 0 ; rv : 1 1 . 0 ) l i k e
Gecko
Mozilla /5.0 ( Windows NT 5.1) AppleWebKit /537.36 (KHTML, l i k e Gecko )
Chrome /49.0.2623.112 S a f a r i /537.36 OPR/36.0.2130.80
Dalvik /2.1.0 ( Linux ; U; Android 7 . 0 ; SM−J530FM Build /NRD90M)
Mozilla /5.0 ( Linux ; Android 4 . 4 . 2 ; GT−P5200 Build /KOT49H)
AppleWebKit /537.36 (KHTML, l i k e Gecko ) Chrome /61.0.3163.98
S a f a r i /537.36
Dalvik /2. 1.0 ( Linux ; U; Android 5 . 0 . 2 ; C6903 Build /14.5.A. 0 . 2 4 2 )
Mozilla /5.0 ( Windows NT 1 0 . 0 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e
Gecko ) Chrome /60.0.3112.113
2017-11-07
Поиск паттернов
Что такое паттерны
Примеры
Паттерны в строках
1. Здесь можно искать подстроки, или
подпоследовательности символов, или
подпоследовательности токенов.
2. browscap или RFC2616 можно использовать для
проверки.
3. А теперь опишем эти три задачи более
формально..
∙
Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
Типы паттернов: абстракции
4
∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
2017-11-07
Поиск паттернов
Что такое паттерны
Абстракции
Типы паттернов: абстракции
1. Примеры подмножеств: товары в чеке, свойства
объектов, иногда бинарные флаги
конвертируются в множества.
∙
Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙
подстроки ”abc” ∈ ”blablabcblabla”;
Типы паттернов: абстракции
4
∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙ подстроки ”abc” ∈ ”blablabcblabla”;
2017-11-07
Поиск паттернов
Что такое паттерны
Абстракции
Типы паттернов: абстракции
1. Не стоит путать с задачей поиска максимальной
общей подстроки среди k строк, наши паттерны
не обязательно являются подстроками для всех
исходных строк, они просто достаточно часто
встречаются.
∙
Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙
подстроки ”abc” ∈ ”blablabcblabla”;
∙ подпоследовательности:
[a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a];
Типы паттернов: абстракции
4
∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙ подстроки ”abc” ∈ ”blablabcblabla”;
∙
подпоследовательности:
[a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a];
2017-11-07
Поиск паттернов
Что такое паттерны
Абстракции
Типы паттернов: абстракции
1. Последовательности от строк отличаются тем,
что строка должна совпасть без разрывов, а
последовательность может быть ≪разорвана≫.
∙
Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙
подстроки ”abc” ∈ ”blablabcblabla”;
∙ подпоследовательности:
[a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a];
∙
подграфы (веб, ДНК, набор HTTP-сессий);
Типы паттернов: абстракции
4
∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙ подстроки ”abc” ∈ ”blablabcblabla”;
∙
подпоследовательности:
[a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a];
∙ подграфы (веб, ДНК, набор HTTP-сессий);
2017-11-07
Поиск паттернов
Что такое паттерны
Абстракции
Типы паттернов: абстракции
1. Два основных варианта:
2. ... большой граф (например, представление
ДНК) и в нём ищем подграфы, которые часто
встречаются внутри него,
3. ... большой набор графов (например,
HTTP-сессии как графы переходов), ищем такие
графы, что они являются подграфами для
многих графов из этого набора.
∙
Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙
подстроки ”abc” ∈ ”blablabcblabla”;
∙ подпоследовательности:
[a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a];
∙
подграфы (веб, ДНК, набор HTTP-сессий);
∙ элементы изображений, временных рядов,
структур данных, регулярные выражения, графы
переходов, сети Петри и прочее.
Типы паттернов: абстракции
4
∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f };
∙ подстроки ”abc” ∈ ”blablabcblabla”;
∙
подпоследовательности:
[a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a];
∙ подграфы (веб, ДНК, набор HTTP-сессий);
∙ элементы изображений, временных рядов,
структур данных, регулярные выражения, графы
переходов, сети Петри и прочее.
2017-11-07
Поиск паттернов
Что такое паттерны
Абстракции
Типы паттернов: абстракции
1. Лучше всего это работает для автоматически
сгенерированных данных, где даже ≪шум≫ носит
≪структурный≫ характер. Например,
≪похожие≫ элементы изображений найти так
очень трудно, легче — абсолютно идентичные.
2. Рассмотрим пример с
паттернами-подмножествами.
id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
Пример: ECLAT
5
id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
2017-11-07
Поиск паттернов
Примеры
Пример вертикального поиска паттернов
Пример: ECLAT
1. Рассмотрим пример. Дана таблица
Номер Чека → Список товаров в этом чеке.
2. Попробуем найти все паттерны, встретившиеся
больше одного раза, то есть минимум 2.
3. Название алгоритма историческое (equivalence
class & bottom-up). В 2017 году этому алгоритму
20 лет исполняется...
id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
element row_ids
a {2, 4}
b {1, 2}
c {1}
d {1, 2, 3}
e {1, 2, 3, 4}
g {3, 4}
h {3, 4}
Пример: ECLAT
5
id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
element row_ids
a {2, 4}
b {1, 2}
c {1}
d {1, 2, 3}
e {1, 2, 3, 4}
g {3, 4}
h {3, 4}
2017-11-07
Поиск паттернов
Примеры
Пример вертикального поиска паттернов
Пример: ECLAT
1. Построим обратную таблицу —
Товар → В каких чеках он появлялся.
id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
elements row_ids
{a} {2, 4}
{b} {1, 2}
{d} {1, 2, 3}
{e} {1, 2, 3, 4}
{g} {3, 4}
{h} {3, 4}
Пример: ECLAT
5
id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
elements row_ids
{a} {2, 4}
{b} {1, 2}
{d} {1, 2, 3}
{e} {1, 2, 3, 4}
{g} {3, 4}
{h} {3, 4}
2017-11-07
Поиск паттернов
Примеры
Пример вертикального поиска паттернов
Пример: ECLAT
1. Это уже часть ответа. Нужно только удалить {c},
потому что этот элемент (товар) был только в
одном чеке, а у нас поддержка — 2.
id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
elements row_ids
{a,e} {2, 4}
{b,d} {1, 2}
{b,e} {1, 2}
{d,e} {1, 2, 3}
{e,g} {3, 4}
{e,h} {3, 4}
{g,h} {3, 4}
Пример: ECLAT
5
id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
elements row_ids
{a,e} {2, 4}
{b,d} {1, 2}
{b,e} {1, 2}
{d,e} {1, 2, 3}
{e,g} {3, 4}
{e,h} {3, 4}
{g,h} {3, 4}
2017-11-07
Поиск паттернов
Примеры
Пример вертикального поиска паттернов
Пример: ECLAT
1. Self-join предыдущей таблицы (комбинации)
позволяет найти паттерны длины 2, то есть,
например, два товара, которые покупают вместе.
Например, у {a} были id 2, 4, у {e} — 1, 2, 3, 4
пересечение этих двух множеств даёт {2, 4}.
id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
elements row_ids
{b,d,e} {1, 2}
{e,g,h} {3, 4}
Пример: ECLAT
5
id elements
1 b, c, d, e
2 a, b, d, e
3 d, e, g, h
4 a, e, g, h
elements row_ids
{b,d,e} {1, 2}
{e,g,h} {3, 4}
2017-11-07
Поиск паттернов
Примеры
Пример вертикального поиска паттернов
Пример: ECLAT
1. Делаем ещё раз то же самое, склеивая первый и
последний символы паттернов, и находим
паттерны длины 3.
2. Паттернов длины 4, встретившихся более чем в
одном чеке, у нас нет.
elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
Пример: ECLAT
5
elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
2017-11-07
Поиск паттернов
Примеры
Пример вертикального поиска паттернов
Пример: ECLAT
1. Формально задачу мы решили, но это несколько
избыточный результат. Чуть позже обсудим, что
не так.
{ae} {eg}{eh} {gh}
{ }
{a} {b} {d} {e} {g} {h}
2 4
1 22 4 1 2
3 4
3 4 3 4
{egh}
3 4
{bde}
1 2
3 41 2 3
3 41 2 3 4
{bd}{be} {de}
1 2 31 2
Дерево найденных паттернов
6
{ae} {eg}{eh} {gh}
{ }
{a} {b} {d} {e} {g} {h}
2 4
1 22 4 1 2
3 4
3 4 3 4
{egh}
3 4
{bde}
1 2
3 41 2 3
3 41 2 3 4
{bd}{be} {de}
1 2 31 2
2017-11-07
Поиск паттернов
Примеры
Пример вертикального поиска паттернов
Дерево найденных паттернов
1. Наглядное изображение того, что мы только что
сделали. Главное: мы избегали повторений
операций. Это ключ.
{bd}{ae} {be} {de} {eg} {eh} {gh}
{ }
{a} {b} {d} {e} {g} {h}
{egh}{bde}
COUNT=2 COUNT=2
COUNT=2 COUNT=2 COUNT=2 COUNT=2
COUNT=2
COUNT=2
COUNT=2
COUNT=2
COUNT=2 COUNT=2COUNT=3
COUNT=3
COUNT=4
Дерево найденных паттернов
6
{bd}{ae} {be} {de} {eg} {eh} {gh}
{ }
{a} {b} {d} {e} {g} {h}
{egh}{bde}
COUNT=2 COUNT=2
COUNT=2 COUNT=2 COUNT=2 COUNT=2
COUNT=2
COUNT=2
COUNT=2
COUNT=2
COUNT=2 COUNT=2COUNT=3
COUNT=3
COUNT=4
2017-11-07
Поиск паттернов
Примеры
Пример вертикального поиска паттернов
Дерево найденных паттернов
1. Количество паттернов для разных уровней
поддержки наглядно. При поддержке 3 мы
обошли бы только 5 узлов, 3 паттерна попали бы
в ответ.
2. По сути, мы перечисляли все возможные
паттерны, пока не остались только заведомо
редкие.
∙ Ищем подмножества.
∙
В исходных данных встречались элементы
a, b, c, d.
∙ Какие возможны паттерны?
Перечислить все паттерны
7
∙
Ищем подмножества.
∙ В исходных данных встречались элементы
a, b, c, d.
∙ Какие возможны паттерны?
2017-11-07
Поиск паттернов
Пространство паттернов
Конечные множества паттернов
Перечислить все паттерны
1. Рассмотрим даже ещё более простую задачу —
поиск паттернов-подмножеств из четырёх
базовых элементов.
∙ В случае с подмножествами их конечное число:
∙ ∅;
∙ {a}, {b}, {c}, {d};
∙ {ab}, {ac}, {ad}, {bc}, {bd}, {cd};
∙ {abc}, {abd}, {acd}, {bcd};
∙ {abcd}.
Перечислить все паттерны
7
∙ В случае с подмножествами их конечное число:
∙
∅;
∙
{a}, {b}, {c}, {d};
∙
{ab}, {ac}, {ad}, {bc}, {bd}, {cd};
∙
{abc}, {abd}, {acd}, {bcd};
∙
{abcd}.
2017-11-07
Поиск паттернов
Пространство паттернов
Конечные множества паттернов
Перечислить все паттерны
1. Для того, чтобы все их перечислить, мы
воспользовались трюком — отсортировали
элементы по алфавиту.
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
adcd{ }
Перечислить все паттерны
7
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
adcd{ }
2017-11-07
Поиск паттернов
Пространство паттернов
Конечные множества паттернов
Перечислить все паттерны
1. Благодаря сортировке, мы можем построить
дерево паттернов, в котором каждый паттерн
встречается ровно один раз, и мы можем даже
сопоставить каждому паттерну номер.
2. В результате, хоть у длинных паттернов есть
много подпаттернов, нам будет нужен только
один из них — первый.
3. Сортировка по алфавиту не всегда возможна, но
всегда можно определить правило, по которому
один элемент должен идти перед другим.
∙ Ищем простые подпоследовательности.
∙
В исходных данных встречались элементы
a, b, c, d.
∙ Какие возможны паттерны?
Перечислить все паттерны-2
8
∙
Ищем простые подпоследовательности.
∙ В исходных данных встречались элементы
a, b, c, d.
∙ Какие возможны паттерны?
2017-11-07
Поиск паттернов
Пространство паттернов
Счётные множества паттернов
Перечислить все паттерны-2
1. Много ли поменяется, если мы будем искать не
подмножества, а подпоследовательности?
2. (Со строками — то же самое.)
∙ Теперь паттернов счётное множество:
∙ [];
∙ [a], [b], [c], [d];
∙ [a, a], [a, b], [a, c], [a, d], [b, a], ... , [c, a], ...[d, d];
∙ [a, a, a], [a, a, b], [a, a, c], [a, a, d], ...,[d, d, d];
∙
...
Перечислить все паттерны-2
8
∙ Теперь паттернов счётное множество:
∙ [];
∙ [a], [b], [c], [d];
∙ [a, a], [a, b], [a, c], [a, d], [b, a], ... , [c, a], ...[d, d];
∙ [a, a, a], [a, a, b], [a, a, c], [a, a, d], ...,[d, d, d];
∙ ...
2017-11-07
Поиск паттернов
Пространство паттернов
Счётные множества паттернов
Перечислить все паттерны-2
1. То есть паттернов бесконечно много, но мы
можем их перечислять.
2. Так, например. мы знаем, сколько их в каждой
строке.
3. Упорядочивание нам снова помогло, но уже не
так сильно, как в прошлый раз.
[aa] [ab] [ac] [ad] [ba] [bb] [bc] ... ...
...... ...[aaa] [aab] [aac] [aad] [aba] [abc] [abd]
[ ]
[a] [b] [c] [d]
Перечислить все паттерны-2
8
[aa] [ab] [ac] [ad] [ba] [bb] [bc] ... ...
...... ...[aaa] [aab] [aac] [aad] [aba] [abc] [abd]
[ ]
[a] [b] [c] [d]
2017-11-07
Поиск паттернов
Пространство паттернов
Счётные множества паттернов
Перечислить все паттерны-2
1. То есть первый этап (почти) любого алгоритма
поиска паттернов — упорядочить паттерны и
придумать подобное дерево.
2. Бывают и б´oльшие пространства, иногда с ними
что-то можно придумать, а иногда уровни дерева
начинают разрастаться ≪слишком
экспоненциально≫.
3. Данных у нас конечное количество, + могут быть
дополнительные ограничения ⇒на практике
пространство паттернов всегда конечно.
a b c d
a b
a
cb
a
db
a
dc
b
dc
a c a d b c b d c d
ba
dc
Перечислить все паттерны-2
8
a b c d
a b
a
cb
a
db
a
dc
b
dc
a c a d b c b d c d
ba
dc
2017-11-07
Поиск паттернов
Пространство паттернов
Счётные множества паттернов
Перечислить все паттерны-2
1. Множества можно рассматривать как
полносвязные графы без повторяющихся узлов.
ba
dc
ba
dc
ba
dc
a d b d c d
ba
d
c
ba d
c
ba
d
c
a b
d
a b
d
a b
d
...... ... ...... ... ...
...... ... ...... ... ...
a b
a b
c
a b
c
a b
c
a b c d
a c b c
...... ... ...... ... ...
Перечислить все паттерны-2
8
ba
dc
ba
dc
ba
dc
a d b d c d
ba
d
c
ba d
c
ba
d
c
a b
d
a b
d
a b
d
...... ... ...... ... ...
...... ... ...... ... ...
a b
a b
c
a b
c
a b
c
a b c d
a c b c
...... ... ...... ... ...
2017-11-07
Поиск паттернов
Пространство паттернов
Счётные множества паттернов
Перечислить все паттерны-2
1. Это можно расширить для ненаправленных
графов на конечном множестве вершин.
2. Пространство очень быстро разрастается.
3. И да, это именно пространства в том смысле,
что можно определить расстояние между
паттернами, для которого будет выполняться
правило треугольника.
∙ Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙
... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙ Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
Основная идея
9
∙
Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙ ... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙
Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Основная идея алгоритмов
Основная идея
1. Почти все алгоритмы поиска паттернов, так или
иначе, занимаются обходом дерева паттернов.
Они отличаются только тем, в каком порядке они
перебирают паттерны, какую информацию
хранят в узлах, и когда и как считывают данные.
∙ Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙
... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙ Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
Основная идея
9
∙
Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙ ... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙
Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Основная идея алгоритмов
Основная идея
1. В ECLAT — это дерево подмножеств.
∙ Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙
... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙ Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
Основная идея
9
∙
Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙ ... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙
Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Основная идея алгоритмов
Основная идея
1. В ECLAT — каждый уровень дерева описан
отдельной таблицей. JOIN этой таблицы с собой
даёт следующий уровень.
∙ Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙
... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙ Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
Основная идея
9
∙
Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙ ... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙
Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Основная идея алгоритмов
Основная идея
1. В ECLAT — разновидность обхода в ширину.
∙ Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙
... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙ Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
Основная идея
9
∙
Как строить дерево паттернов?
∙ Как обходить это дерево?
∙ Использовать стандартные алгоритмы обхода
дерева...
∙ ... но нам не всегда нужно обойти всё дерево
(модифицируем стандартные алгоритмы).
∙
Избавляться от лишних обходов данных!
∙ Применять ограничения как можно раньше.
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Основная идея алгоритмов
Основная идея
1. В ECLAT мы прочитали таблицу с исходными
данными один раз.
2. В узлах (при помощи вспомогательной таблицы)
хранятся так называемые проекции данных
(списки идентификаторов строк/чеков).
3. Размер вспомогательной таблицы уменьшается
от уровня к уровню.
4. Рассмотрим основные проблемы, с которыми
приходится сталкиваться при разработке
алгоритма или его реализации.
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{?} {?} {?} {?}
Продолжая перечислять паттерны
11
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{?} {?} {?} {?}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. Даже просто перечислять паттерны может быть
сложно, дорого и долго.
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {?} {?} {?}
Продолжая перечислять паттерны
11
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {?} {?} {?}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. Например, если мы идём по пространству
паттернов, построенному ≪в отрыве от данных≫.
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {?} {?}
Продолжая перечислять паттерны
11
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {?} {?}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. То есть для каждого паттерна считаем,
присутствует ли он в данных...
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {?}
Продолжая перечислять паттерны
11
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {?}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. ... и сколько раз встречается.
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. Но даже если представить, что подсчёт частоты
как-то даётся нам за O (1)...
{ab} { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. ... нам всё равно нужно cгенерировать огромное
количество паттернов.
{ab} {ac} { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} {ac} { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. Представим, например, что базовых элементов
— потенциальных паттернов длины 1 сто штук.
{ab} {ac} {ad} { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} {ac} {ad} { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. Сколько потенциальных паттернов длины 2?
{ab} {ac} {ad} {bc} { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} {ac} {ad} {bc} { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. А сколько всего?
{ab} {ac} {ad} {bc} {bd} { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} {ac} {ad} {bc} {bd} { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. А если мы не с множествами будем работать, а с
последовательностями или строками?
{ab} {ac} {ad} {bc} {bd} {cd}
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} {ac} {ad} {bc} {bd} {cd}
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. Естественно, на практике это можно и нужно
оптимизировать.
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. Во-первых, можно посещать только те узлы
дерева, которые соответствуют паттернам, хотя
бы потенциально присутствующим в данных.
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} { ? } { ? }
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. А желательно, чтобы они не просто
≪потенциально присутствовали≫, но и
потенциально были интересными для нас (часто
встречающимися, например).
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} { ? }
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. Во-вторых, можно вообще не генерировать
паттерны (кандидатов в паттерны), а
использовать хитрое представление исходных
и/или промежуточных данных.
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
Продолжая перечислять паттерны
11
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Продолжая перечислять паттерны
1. Но в любом случае, чисто формально, мы
обходим всё пространство паттернов, даже если
≪чисто виртуально≫.
{ }
{{ ##
b : 1

a : 2
{{ 
c : 1

b : 1

e : 1

d : 1

d : 1

g : 1

e : 1 e : 1 h : 1
FP-tree
12
{ }
{{ ##
b : 1

a : 2
{{ 
c : 1

b : 1

e : 1

d : 1

d : 1

g : 1

e : 1 e : 1 h : 1
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
FP-tree
1. Одно из возможных решений этой проблемы —
преобразование исходной таблицы в особую
структуру данных, которая позволяет избежать
генерирования паттернов.
2. На базе этой структуры построены два
популярных алгоритма — FP-growth и PrefixSpan.
3. В узлах дерева паттернов тогда хранится такая
структура, и из неё мы можем выделить
(≪вырастить≫) подпаттерны и соответствующую
проекцию данных для этих подпаттернов.
Проблема с длинными паттернами
13
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Проблема с длинными паттернами
1. Что будет, если все данные у нас одинаковые?
Есть только один длинный паттерн.
2. В ответе тогда будет слишком много избыточных
данных.
elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
Проблема с длинными паттернами
13
elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Проблема с длинными паттернами
1. Мы уже сталкивались с похожей ситуацией в
нашем простом примере.
elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
Проблема с длинными паттернами
13
elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Проблема с длинными паттернами
1. Зная, что есть паттерн {b, d, e} с поддержкой 2,
мы сразу получаем, что есть и {b, e} и {b, e} и
{d, e} с такой же поддержкой или больше.
elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
Проблема с длинными паттернами
13
elements count elements count elements count
{a} 2 {a,e} 2 {b,d,e} 2
{b} 2 {b,d} 2 {e,g,h} 2
{d} 3 {b,e} 2
{e} 4 {d,e} 3
{g} 2 {e,g} 2
{h} 2 {e,h} 2
{g,h} 2
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Проблема с длинными паттернами
1. То есть, если бы мы в ответе удалили
подсвеченные паттерны, мы бы не потеряли
информацию.
2. Если бы мы удалили выделенные жирным, мы
бы потеряли информацию о том, сколько раз
паттерн встретился в данных, но не информацию
о том, удовлетворяет ли он нашим критериям
поиска (ДА или НЕТ).
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Обход дерева в ECLAT
14
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Обход дерева в ECLAT
1. Да, нам не нужно сканировать исходные данные
много раз.
{ab} {ac} {ad} {bc} {bd} {cd}
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Обход дерева в ECLAT
14
{ab} {ac} {ad} {bc} {bd} {cd}
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Обход дерева в ECLAT
1. Но значительную часть этих данных мы храним в
памяти.
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
Обход дерева в ECLAT
14
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Обход дерева в ECLAT
1. Можно ли уменьшить потребление памяти?
{ae} {eg}{eh} {gh}
{ }
{a} {b} {d} {e} {g} {h}
1 3 1 2
3 41 3 3 4
1 2
1 2 1 2
{egh}
1 2
{bde}
3 4
1 24
1 2
1 2 3 4
{bd}{be} {de}
1 4
Обход дерева в ECLAT
14
{ae} {eg}{eh} {gh}
{ }
{a} {b} {d} {e} {g} {h}
1 3 1 2
3 41 3 3 4
1 2
1 2 1 2
{egh}
1 2
{bde}
3 4
1 24
1 2
1 2 3 4
{bd}{be} {de}
1 4
2017-11-07
Поиск паттернов
Путешествия в пространстве паттернов
Сложности
Обход дерева в ECLAT
1. Можно хранить не сами множества
идентификаторов, а их разницу с универсальным
множеством (или со множеством на предыдущем
уровне).
2. ...и проще работа: нужно считать объединение
множеств, а не пересечение — это можно делать
(𝜀, 𝛿)-аппроксимировано (но осторожно).
3. Чем больше данных, тем заметнее результат.
Обход дерева определён через рекурсию
15
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Обход дерева определён через рекурсию
∙ Обход дерева обычно делают рекурсивно.
∙ Уйдя от рекурсии, можно управлять стеком
вручную.
∙ В том числе превратить его в очередь задач.
∙
Но нам потребуются дополнительные средства
модификации стека — чтобы избежать
упомянутых проблем.
Стек работы алгоритма
16
∙
Обход дерева обычно делают рекурсивно.
∙ Уйдя от рекурсии, можно управлять стеком
вручную.
∙
В том числе превратить его в очередь задач.
∙ Но нам потребуются дополнительные средства
модификации стека — чтобы избежать
упомянутых проблем.
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Стек работы алгоритма
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{?} {?} {?} {?}
Работа со стеком
17
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{?} {?} {?} {?}
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Работа со стеком
1. Сначала в стеке-очереди исходное состояние.
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Работа со стеком
17
{ ? } { ? } { ? } { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Работа со стеком
1. Эту ≪задачу≫ мы ≪забрали≫ и положили 4 новые,
попутно обнаружив 4 паттерна.
{ab} {ac} {ad} { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Работа со стеком
17
{ab} {ac} {ad} { ? } { ? } { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Работа со стеком
1. Обработали ≪задачу≫ {a}, ещё лежат {b}, {c},
{d}, ещё три добавили
{ab} {ac} {ad} {bc} {bd} { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Работа со стеком
17
{ab} {ac} {ad} {bc} {bd} { ? }
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Работа со стеком
1. Минус одна, плюс две.
{ab} {ac} {ad} {bc} {bd} {cd}
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
Работа со стеком
17
{ab} {ac} {ad} {bc} {bd} {cd}
{ ? } { ? } { ? } { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Работа со стеком
1. Когда остаётся только последний ряд, при
извлечении задач из стека новые уже не
добавляются.
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} { ? }
{ }
{a} {b} {c} {d}
{ ? }
Работа со стеком
17
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} { ? }
{ }
{a} {b} {c} {d}
{ ? }
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Работа со стеком
1. Но, в зависимости от типа алгоритма, могут
производиться довольно тяжёлые операции...
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} { ? }
{ }
{a} {b} {c} {d}
Работа со стеком
17
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} { ? }
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Работа со стеком
1. ...включая сканирование исходных данных.
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
Работа со стеком
17
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Уходим от рекурсии
Работа со стеком
1. В том числе поэтому, часто нужно
модифицировать стек в процессе работы
алгоритма — так, чтобы уменьшить количество
узлов, которые нужно обойти.
Модификация стека
18
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Модификация стека
1. Благодаря упорядоченности паттернов, мы
можем быть уверены, что {b, c} не появится
правее в дереве.
Модификация стека
18
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Модификация стека
1. |Если при обходе в глубину обнаружится, что
поддержка первого упоминания {b, c} такая же
как у самого этого паттерна во втором ряду, то
мы можем отменить все задачи, связанные с
{b, c}.
2. При этом существенно уменьшается количество
паттернов, которые нужно будет обойти.
Модификация стека
18
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Модификация стека
1. Тоже самое с паттерном {c, d}.
Модификация стека
18
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Модификация стека
1. И со всеми остальными паттернами...
Модификация стека
18
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Модификация стека
1. В результате, если в данных есть только один
длинный паттерн, нам нужно будет сделать
единственный проход в глубину.
Модификация стека
18
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Модификация стека
1. Поэтому существует эвристика — упорядочивать
элементы не по алфавиту или ≪абы как≫, а по
оценке их частоты.
∙ Кроме естественного требования частоты, могут
быть и другие ограничения, например:
∙ суммарная стоимость товаров  x,
∙
максимальная длина строки (при
конкатенации)  x,
∙ некоторая произвольная функция
F (паттерн, данные) x.
Применение ограничений
19
∙ Кроме естественного требования частоты, могут
быть и другие ограничения, например:
∙ суммарная стоимость товаров  x,
∙ максимальная длина строки (при
конкатенации)  x,
∙
некоторая произвольная функция
F (паттерн, данные) x.
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Применение ограничений
1. Можем ли мы сказать что-то про F ({a, b, c})
если мы знаем F ({a, b})?
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
adcd{ }
COST=3 COST=2 COST=3 COST=2
COST=5 COST=6 COST=5 COST=5 COST=4 COST=5
COST=8 COST=7 COST=8 COST=7
COST=7
COST6
Применение ограничений
19
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
adcd{ }
COST=3 COST=2 COST=3 COST=2
COST=5 COST=6 COST=5 COST=5 COST=4 COST=5
COST=8 COST=7 COST=8 COST=7
COST=7
COST6
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Применение ограничений
1. В самом простом случае, практически нет
отличий от работы с поддержкой. Добавление
элемента в паттерн увеличивает суммарную
≪стоимость≫, так что достигнув предельного
значения, вниз по дереву идти не нужно.
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
adcd{ }
COST=3 COST=2 COST=3 COST=2
COST=5 COST=6 COST=5 COST=5 COST=4 COST=5
COST=8 COST=7 COST=8 COST=7
COST=7
COST6
Применение ограничений
19
{ab} {ac} {ad} {bc} {bd} {cd}
{abc} {adb} {acd} {bcd}
{ }
{a} {b} {c} {d}
adcd{ }
COST=3 COST=2 COST=3 COST=2
COST=5 COST=6 COST=5 COST=5 COST=4 COST=5
COST=8 COST=7 COST=8 COST=7
COST=7
COST6
2017-11-07
Поиск паттернов
Стек алгоритмов обхода дерева
Ломаем стек
Применение ограничений
1. В данном случае, мы смогли обойти только
половину узлов. На практике бывает, конечно, и
лучше.
2. Тип таких ограничений подсказывает нам какой
алгоритм использовать, какую информацию
держать в каждом узле дерева.
∙ Строки → последовательность токенов:
 Mozilla /5.0 ( Windows NT 6 . 1 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e
Gecko ) 
 Mozilla /5.0  , ( Windows  , NT  ,  6 . 1 ;  , WOW64)  , AppleWebKit
/537.36  , (KHTML,  ,  l i k e  , Gecko ) 
∙
Последовательности с малым числом базовых
элементов → множества.
∙ И восстанавливаем последовательности после
ещё одного прохода.
∙
Последовательности → графы переходов.
∙ (борьба с циклами).
Эвристика: упрощение модели
20
∙ Строки → последовательность токенов:
 Mozilla /5.0 ( Windows NT 6 . 1 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e
Gecko ) 
 Mozilla /5.0  , ( Windows  , NT  ,  6 . 1 ;  , WOW64)  , AppleWebKit
/537.36  , (KHTML,  ,  l i k e  , Gecko ) 
∙ Последовательности с малым числом базовых
элементов → множества.
∙ И восстанавливаем последовательности после
ещё одного прохода.
∙ Последовательности → графы переходов.
∙
(борьба с циклами).
2017-11-07
Поиск паттернов
На уровне модели данных и паттернов
Данные
Эвристика: упрощение модели
∙ По популярности:
∙
Не нужно ничего считать, чтобы узнать, что в
русском языке ≪й≫ будет идти после ≪о≫.
∙
По составленному вручную каталогу:
∙ Часто элементы относятся к нескольким
категориям (например, товары или символы)
∙
Нам нужно сделать так, чтобы из этих
категорий получилась строгая иерархия.
Выбор метода упорядочивания паттернов
21
∙
По популярности:
∙ Не нужно ничего считать, чтобы узнать, что в
русском языке ≪й≫ будет идти после ≪о≫.
∙ По составленному вручную каталогу:
∙
Часто элементы относятся к нескольким
категориям (например, товары или символы)
∙ Нам нужно сделать так, чтобы из этих
категорий получилась строгая иерархия.
2017-11-07
Поиск паттернов
На уровне модели данных и паттернов
Паттерны
Выбор метода упорядочивания паттернов
∙ Если известно, что паттерны в данных очень
длинные (или очень многомерные), то всё дерево
паттернов будет слишком трудно обойти.
Эвристический обход дерева
22
∙
Если известно, что паттерны в данных очень
длинные (или очень многомерные), то всё дерево
паттернов будет слишком трудно обойти.
2017-11-07
Поиск паттернов
На уровне работы алгоритмов
Эвристический обход дерева
1 Вместо этого можно попробовать найти
некоторые длинные паттерны при помощи
сэмплинга.
2 Оказавшись где-то в середине и в глубине дерева,
поднимаемся наверх, обнаруживая более
короткие паттерны.
3 Короткие паттерны перемешиваем, получая
кандидатов в длинные паттерны, проверяем их.
4 Повторяем.
Эвристический обход дерева
22
1 Вместо этого можно попробовать найти
некоторые длинные паттерны при помощи
сэмплинга.
2 Оказавшись где-то в середине и в глубине дерева,
поднимаемся наверх, обнаруживая более
короткие паттерны.
3 Короткие паттерны перемешиваем, получая
кандидатов в длинные паттерны, проверяем их.
4 Повторяем.
2017-11-07
Поиск паттернов
На уровне работы алгоритмов
Эвристический обход дерева
∙ Spark
∙
Weka (Java, GUI)
∙ arules (R)
∙ pyarules (Python)
∙ ProM
∙
python-snakes
∙ re2
∙
hyperscan
Что есть в open-source
23
∙
Spark
∙ Weka (Java, GUI)
∙ arules (R)
∙ pyarules (Python)
∙ ProM
∙ python-snakes
∙
re2
∙ hyperscan
2017-11-07
Поиск паттернов
Что есть в open-source
Спасибо
Константин Игнатов
@podshumok
kv@qrator.net
Спасибо
Константин Игнатов
@podshumok
kv@qrator.net
2017-11-07
Поиск паттернов

More Related Content

PDF
Chanbot
PPTX
Tomita одесса
PPT
веселов
PDF
TechTrain 2019 - (Не)адекватное техническое интервью
PDF
Devclub 01/2017 - (Не)адекватное Java-интервью
PPTX
[Skolkovo Robotics 2015 Day 2] Владимир Веселов Bot and humans "Взаимодействи...
PDF
Groovy jug-moscow-part 1
PPT
Код как низкоуровневая документация
Chanbot
Tomita одесса
веселов
TechTrain 2019 - (Не)адекватное техническое интервью
Devclub 01/2017 - (Не)адекватное Java-интервью
[Skolkovo Robotics 2015 Day 2] Владимир Веселов Bot and humans "Взаимодействи...
Groovy jug-moscow-part 1
Код как низкоуровневая документация

What's hot (8)

PPTX
Tomita 4марта
PPT
Rgsu04
PDF
Лекция 3: Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
PPT
ф@н@т футбол@. Ребусы
PDF
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
PDF
Лекция 4. Строки, байты, файлы и ввод/вывод.
PDF
Магия в Python: Дескрипторы. Что это?
PPT
Лекция 5
Tomita 4марта
Rgsu04
Лекция 3: Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
ф@н@т футбол@. Ребусы
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Лекция 4. Строки, байты, файлы и ввод/вывод.
Магия в Python: Дескрипторы. Что это?
Лекция 5
Ad

Similar to Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator Labs) (20)

PDF
Олег Бартунов и Иван Панченко
PPT
Rgsu04
PDF
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
PDF
Лекция 1. Начало.
PPTX
Python-for-Data-Analysis, Pandas, Numpy,Seaborn
PDF
Стажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализа
PDF
20130429 dynamic c_c++_program_analysis-alexey_samsonov
PDF
static - defcon russia 20
PPTX
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
PPTX
04 net saturday eugene sukhikh ''the basic performance questions''
PPTX
04 net saturday eugene sukhikh ''the basic performance questions''
PDF
CSS глазами машин
PDF
Android: Как написать приложение, которое не тормозит
PDF
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
PDF
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
PPTX
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
PDF
ekbpy'2012 - Михаил Коробов - Python 3
PDF
Мир Python функционалим с помощью библиотек
PDF
Web осень 2013 лекция 6
PDF
C++ refelection and cats
Олег Бартунов и Иван Панченко
Rgsu04
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Лекция 1. Начало.
Python-for-Data-Analysis, Pandas, Numpy,Seaborn
Стажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализа
20130429 dynamic c_c++_program_analysis-alexey_samsonov
static - defcon russia 20
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''
CSS глазами машин
Android: Как написать приложение, которое не тормозит
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
ekbpy'2012 - Михаил Коробов - Python 3
Мир Python функционалим с помощью библиотек
Web осень 2013 лекция 6
C++ refelection and cats
Ad

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...

Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator Labs)

  • 1. Поиск паттернов Константин Игнатов 7 ноября 2017 2017-11-07 Поиск паттернов
  • 2. ∙ Паттерн — это... Типы паттернов 2 ∙ Паттерн — это... 2017-11-07 Поиск паттернов Что такое паттерны Примеры Типы паттернов 1. Паттерн — это что-то повторяющееся в данных. 2. То есть: некоторая структура, которая представляет для нас интерес. 3. Как правило, это означает, что она должна встречаться чаще заданного числа раз (в абсолютном или относительном измерении). Это число называется ≪поддержка≫.
  • 3. ∙ Интересный паттерн должен... ∙ встречаться часто в данных — поддержка (support), ∙ удовлетворять другим критериям. Типы паттернов 2 ∙ Интересный паттерн должен... ∙ встречаться часто в данных — поддержка (support), ∙ удовлетворять другим критериям. 2017-11-07 Поиск паттернов Что такое паттерны Примеры Типы паттернов 1. То есть: некоторая структура, которая представляет для нас интерес. 2. Как правило, это означает, что она должна встречаться чаще заданного числа раз (в абсолютном или относительном измерении). Это число называется ≪поддержка≫.
  • 4. Типы паттернов 2 2017-11-07 Поиск паттернов Что такое паттерны Примеры Типы паттернов 1. Магазины хотят ставить рядом товары, которые часто покупают вместе. 2. ... То есть, которые часто появляются в одном чеке друг с другом. 3. ... По крайней мере так было когда-то — исторические корни задачи: байка про подгузники и пиво. 4. ... Сейчас-то они наоборот делают и самое нужное прячут в самом потаённом углу, чтобы я прошёлся до касс/выхода через весь магазин и купил ещё что-нибудь лишнего (шутка).
  • 5. Типы паттернов 2 2017-11-07 Поиск паттернов Что такое паттерны Примеры Типы паттернов 1. Веб-аналитикам интересно понимать, какую последовательность действий пользователи чаще всего делают на сайте. 2. При этом может быть некоторая вариативность в промежуточных действиях, которая не представляет интереса: например, важно только, что человек нажал на иконку с товаром, а потом — на кнопку ≪В корзину≫.
  • 6. Mozilla /5.0 ( Windows NT 6 . 1 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e Gecko ) Chrome /43.0.2357.81 S a f a r i /537.36 OPR/30.0.1835.59 Mozilla /5.0 ( Windows NT 6 . 1 ; Win64 ; x64 ) AppleWebKit /537.36 (KHTML, l i k e Gecko ) Chrome /61.0.3163.100 S a f a r i /537.36 Dalvik /2.1.0 ( Linux ; U; Android 5 . 1 ; E5533 Build /29.1.B. 0 . 8 7 ) Mozilla /5.0 ( Windows NT 1 0 . 0 ; WOW64; Trident / 7 . 0 ; rv : 1 1 . 0 ) l i k e Gecko Mozilla /5.0 ( Windows NT 5.1) AppleWebKit /537.36 (KHTML, l i k e Gecko ) Chrome /49.0.2623.112 S a f a r i /537.36 OPR/36.0.2130.80 Dalvik /2.1.0 ( Linux ; U; Android 7 . 0 ; SM−J530FM Build /NRD90M) Mozilla /5.0 ( Linux ; Android 4 . 4 . 2 ; GT−P5200 Build /KOT49H) AppleWebKit /537.36 (KHTML, l i k e Gecko ) Chrome /61.0.3163.98 S a f a r i /537.36 Dalvik /2.1.0 ( Linux ; U; Android 5 . 0 . 2 ; C6903 Build /14.5.A. 0 . 2 4 2 ) Mozilla /5.0 ( Windows NT 1 0 . 0 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e Gecko ) Chrome /60.0.3112.113 Паттерны в строках 3 Mozilla /5.0 ( Windows NT 6 . 1 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e Gecko ) Chrome /43.0.2357.81 S a f a r i /537.36 OPR/30.0.1835.59 Mozilla /5.0 ( Windows NT 6 . 1 ; Win64 ; x64 ) AppleWebKit /537.36 (KHTML, l i k e Gecko ) Chrome /61.0.3163.100 S a f a r i /537.36 Dalvik /2.1.0 ( Linux ; U; Android 5 . 1 ; E5533 Build /29.1.B. 0 . 8 7 ) Mozilla /5.0 ( Windows NT 1 0 . 0 ; WOW64; Trident / 7 . 0 ; rv : 1 1 . 0 ) l i k e Gecko Mozilla /5.0 ( Windows NT 5.1) AppleWebKit /537.36 (KHTML, l i k e Gecko ) Chrome /49.0.2623.112 S a f a r i /537.36 OPR/36.0.2130.80 Dalvik /2.1.0 ( Linux ; U; Android 7 . 0 ; SM−J530FM Build /NRD90M) Mozilla /5.0 ( Linux ; Android 4 . 4 . 2 ; GT−P5200 Build /KOT49H) AppleWebKit /537.36 (KHTML, l i k e Gecko ) Chrome /61.0.3163.98 S a f a r i /537.36 Dalvik /2. 1.0 ( Linux ; U; Android 5 . 0 . 2 ; C6903 Build /14.5.A. 0 . 2 4 2 ) Mozilla /5.0 ( Windows NT 1 0 . 0 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e Gecko ) Chrome /60.0.3112.113 2017-11-07 Поиск паттернов Что такое паттерны Примеры Паттерны в строках 1. Здесь можно искать подстроки, или подпоследовательности символов, или подпоследовательности токенов. 2. browscap или RFC2616 можно использовать для проверки. 3. А теперь опишем эти три задачи более формально..
  • 7. ∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f }; Типы паттернов: абстракции 4 ∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f }; 2017-11-07 Поиск паттернов Что такое паттерны Абстракции Типы паттернов: абстракции 1. Примеры подмножеств: товары в чеке, свойства объектов, иногда бинарные флаги конвертируются в множества.
  • 8. ∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f }; ∙ подстроки ”abc” ∈ ”blablabcblabla”; Типы паттернов: абстракции 4 ∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f }; ∙ подстроки ”abc” ∈ ”blablabcblabla”; 2017-11-07 Поиск паттернов Что такое паттерны Абстракции Типы паттернов: абстракции 1. Не стоит путать с задачей поиска максимальной общей подстроки среди k строк, наши паттерны не обязательно являются подстроками для всех исходных строк, они просто достаточно часто встречаются.
  • 9. ∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f }; ∙ подстроки ”abc” ∈ ”blablabcblabla”; ∙ подпоследовательности: [a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a]; Типы паттернов: абстракции 4 ∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f }; ∙ подстроки ”abc” ∈ ”blablabcblabla”; ∙ подпоследовательности: [a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a]; 2017-11-07 Поиск паттернов Что такое паттерны Абстракции Типы паттернов: абстракции 1. Последовательности от строк отличаются тем, что строка должна совпасть без разрывов, а последовательность может быть ≪разорвана≫.
  • 10. ∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f }; ∙ подстроки ”abc” ∈ ”blablabcblabla”; ∙ подпоследовательности: [a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a]; ∙ подграфы (веб, ДНК, набор HTTP-сессий); Типы паттернов: абстракции 4 ∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f }; ∙ подстроки ”abc” ∈ ”blablabcblabla”; ∙ подпоследовательности: [a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a]; ∙ подграфы (веб, ДНК, набор HTTP-сессий); 2017-11-07 Поиск паттернов Что такое паттерны Абстракции Типы паттернов: абстракции 1. Два основных варианта: 2. ... большой граф (например, представление ДНК) и в нём ищем подграфы, которые часто встречаются внутри него, 3. ... большой набор графов (например, HTTP-сессии как графы переходов), ищем такие графы, что они являются подграфами для многих графов из этого набора.
  • 11. ∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f }; ∙ подстроки ”abc” ∈ ”blablabcblabla”; ∙ подпоследовательности: [a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a]; ∙ подграфы (веб, ДНК, набор HTTP-сессий); ∙ элементы изображений, временных рядов, структур данных, регулярные выражения, графы переходов, сети Петри и прочее. Типы паттернов: абстракции 4 ∙ Подмножества: {a, b, f } ∈ {a, b, c, d, e, f }; ∙ подстроки ”abc” ∈ ”blablabcblabla”; ∙ подпоследовательности: [a, {b, c} , a, b] ∈ [a, c, d, {b, c}, {e, f , g} , a, b, a]; ∙ подграфы (веб, ДНК, набор HTTP-сессий); ∙ элементы изображений, временных рядов, структур данных, регулярные выражения, графы переходов, сети Петри и прочее. 2017-11-07 Поиск паттернов Что такое паттерны Абстракции Типы паттернов: абстракции 1. Лучше всего это работает для автоматически сгенерированных данных, где даже ≪шум≫ носит ≪структурный≫ характер. Например, ≪похожие≫ элементы изображений найти так очень трудно, легче — абсолютно идентичные. 2. Рассмотрим пример с паттернами-подмножествами.
  • 12. id elements 1 b, c, d, e 2 a, b, d, e 3 d, e, g, h 4 a, e, g, h Пример: ECLAT 5 id elements 1 b, c, d, e 2 a, b, d, e 3 d, e, g, h 4 a, e, g, h 2017-11-07 Поиск паттернов Примеры Пример вертикального поиска паттернов Пример: ECLAT 1. Рассмотрим пример. Дана таблица Номер Чека → Список товаров в этом чеке. 2. Попробуем найти все паттерны, встретившиеся больше одного раза, то есть минимум 2. 3. Название алгоритма историческое (equivalence class & bottom-up). В 2017 году этому алгоритму 20 лет исполняется...
  • 13. id elements 1 b, c, d, e 2 a, b, d, e 3 d, e, g, h 4 a, e, g, h element row_ids a {2, 4} b {1, 2} c {1} d {1, 2, 3} e {1, 2, 3, 4} g {3, 4} h {3, 4} Пример: ECLAT 5 id elements 1 b, c, d, e 2 a, b, d, e 3 d, e, g, h 4 a, e, g, h element row_ids a {2, 4} b {1, 2} c {1} d {1, 2, 3} e {1, 2, 3, 4} g {3, 4} h {3, 4} 2017-11-07 Поиск паттернов Примеры Пример вертикального поиска паттернов Пример: ECLAT 1. Построим обратную таблицу — Товар → В каких чеках он появлялся.
  • 14. id elements 1 b, c, d, e 2 a, b, d, e 3 d, e, g, h 4 a, e, g, h elements row_ids {a} {2, 4} {b} {1, 2} {d} {1, 2, 3} {e} {1, 2, 3, 4} {g} {3, 4} {h} {3, 4} Пример: ECLAT 5 id elements 1 b, c, d, e 2 a, b, d, e 3 d, e, g, h 4 a, e, g, h elements row_ids {a} {2, 4} {b} {1, 2} {d} {1, 2, 3} {e} {1, 2, 3, 4} {g} {3, 4} {h} {3, 4} 2017-11-07 Поиск паттернов Примеры Пример вертикального поиска паттернов Пример: ECLAT 1. Это уже часть ответа. Нужно только удалить {c}, потому что этот элемент (товар) был только в одном чеке, а у нас поддержка — 2.
  • 15. id elements 1 b, c, d, e 2 a, b, d, e 3 d, e, g, h 4 a, e, g, h elements row_ids {a,e} {2, 4} {b,d} {1, 2} {b,e} {1, 2} {d,e} {1, 2, 3} {e,g} {3, 4} {e,h} {3, 4} {g,h} {3, 4} Пример: ECLAT 5 id elements 1 b, c, d, e 2 a, b, d, e 3 d, e, g, h 4 a, e, g, h elements row_ids {a,e} {2, 4} {b,d} {1, 2} {b,e} {1, 2} {d,e} {1, 2, 3} {e,g} {3, 4} {e,h} {3, 4} {g,h} {3, 4} 2017-11-07 Поиск паттернов Примеры Пример вертикального поиска паттернов Пример: ECLAT 1. Self-join предыдущей таблицы (комбинации) позволяет найти паттерны длины 2, то есть, например, два товара, которые покупают вместе. Например, у {a} были id 2, 4, у {e} — 1, 2, 3, 4 пересечение этих двух множеств даёт {2, 4}.
  • 16. id elements 1 b, c, d, e 2 a, b, d, e 3 d, e, g, h 4 a, e, g, h elements row_ids {b,d,e} {1, 2} {e,g,h} {3, 4} Пример: ECLAT 5 id elements 1 b, c, d, e 2 a, b, d, e 3 d, e, g, h 4 a, e, g, h elements row_ids {b,d,e} {1, 2} {e,g,h} {3, 4} 2017-11-07 Поиск паттернов Примеры Пример вертикального поиска паттернов Пример: ECLAT 1. Делаем ещё раз то же самое, склеивая первый и последний символы паттернов, и находим паттерны длины 3. 2. Паттернов длины 4, встретившихся более чем в одном чеке, у нас нет.
  • 17. elements count elements count elements count {a} 2 {a,e} 2 {b,d,e} 2 {b} 2 {b,d} 2 {e,g,h} 2 {d} 3 {b,e} 2 {e} 4 {d,e} 3 {g} 2 {e,g} 2 {h} 2 {e,h} 2 {g,h} 2 Пример: ECLAT 5 elements count elements count elements count {a} 2 {a,e} 2 {b,d,e} 2 {b} 2 {b,d} 2 {e,g,h} 2 {d} 3 {b,e} 2 {e} 4 {d,e} 3 {g} 2 {e,g} 2 {h} 2 {e,h} 2 {g,h} 2 2017-11-07 Поиск паттернов Примеры Пример вертикального поиска паттернов Пример: ECLAT 1. Формально задачу мы решили, но это несколько избыточный результат. Чуть позже обсудим, что не так.
  • 18. {ae} {eg}{eh} {gh} { } {a} {b} {d} {e} {g} {h} 2 4 1 22 4 1 2 3 4 3 4 3 4 {egh} 3 4 {bde} 1 2 3 41 2 3 3 41 2 3 4 {bd}{be} {de} 1 2 31 2 Дерево найденных паттернов 6 {ae} {eg}{eh} {gh} { } {a} {b} {d} {e} {g} {h} 2 4 1 22 4 1 2 3 4 3 4 3 4 {egh} 3 4 {bde} 1 2 3 41 2 3 3 41 2 3 4 {bd}{be} {de} 1 2 31 2 2017-11-07 Поиск паттернов Примеры Пример вертикального поиска паттернов Дерево найденных паттернов 1. Наглядное изображение того, что мы только что сделали. Главное: мы избегали повторений операций. Это ключ.
  • 19. {bd}{ae} {be} {de} {eg} {eh} {gh} { } {a} {b} {d} {e} {g} {h} {egh}{bde} COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2COUNT=3 COUNT=3 COUNT=4 Дерево найденных паттернов 6 {bd}{ae} {be} {de} {eg} {eh} {gh} { } {a} {b} {d} {e} {g} {h} {egh}{bde} COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2 COUNT=2COUNT=3 COUNT=3 COUNT=4 2017-11-07 Поиск паттернов Примеры Пример вертикального поиска паттернов Дерево найденных паттернов 1. Количество паттернов для разных уровней поддержки наглядно. При поддержке 3 мы обошли бы только 5 узлов, 3 паттерна попали бы в ответ. 2. По сути, мы перечисляли все возможные паттерны, пока не остались только заведомо редкие.
  • 20. ∙ Ищем подмножества. ∙ В исходных данных встречались элементы a, b, c, d. ∙ Какие возможны паттерны? Перечислить все паттерны 7 ∙ Ищем подмножества. ∙ В исходных данных встречались элементы a, b, c, d. ∙ Какие возможны паттерны? 2017-11-07 Поиск паттернов Пространство паттернов Конечные множества паттернов Перечислить все паттерны 1. Рассмотрим даже ещё более простую задачу — поиск паттернов-подмножеств из четырёх базовых элементов.
  • 21. ∙ В случае с подмножествами их конечное число: ∙ ∅; ∙ {a}, {b}, {c}, {d}; ∙ {ab}, {ac}, {ad}, {bc}, {bd}, {cd}; ∙ {abc}, {abd}, {acd}, {bcd}; ∙ {abcd}. Перечислить все паттерны 7 ∙ В случае с подмножествами их конечное число: ∙ ∅; ∙ {a}, {b}, {c}, {d}; ∙ {ab}, {ac}, {ad}, {bc}, {bd}, {cd}; ∙ {abc}, {abd}, {acd}, {bcd}; ∙ {abcd}. 2017-11-07 Поиск паттернов Пространство паттернов Конечные множества паттернов Перечислить все паттерны 1. Для того, чтобы все их перечислить, мы воспользовались трюком — отсортировали элементы по алфавиту.
  • 22. {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} {bcd} { } {a} {b} {c} {d} adcd{ } Перечислить все паттерны 7 {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} {bcd} { } {a} {b} {c} {d} adcd{ } 2017-11-07 Поиск паттернов Пространство паттернов Конечные множества паттернов Перечислить все паттерны 1. Благодаря сортировке, мы можем построить дерево паттернов, в котором каждый паттерн встречается ровно один раз, и мы можем даже сопоставить каждому паттерну номер. 2. В результате, хоть у длинных паттернов есть много подпаттернов, нам будет нужен только один из них — первый. 3. Сортировка по алфавиту не всегда возможна, но всегда можно определить правило, по которому один элемент должен идти перед другим.
  • 23. ∙ Ищем простые подпоследовательности. ∙ В исходных данных встречались элементы a, b, c, d. ∙ Какие возможны паттерны? Перечислить все паттерны-2 8 ∙ Ищем простые подпоследовательности. ∙ В исходных данных встречались элементы a, b, c, d. ∙ Какие возможны паттерны? 2017-11-07 Поиск паттернов Пространство паттернов Счётные множества паттернов Перечислить все паттерны-2 1. Много ли поменяется, если мы будем искать не подмножества, а подпоследовательности? 2. (Со строками — то же самое.)
  • 24. ∙ Теперь паттернов счётное множество: ∙ []; ∙ [a], [b], [c], [d]; ∙ [a, a], [a, b], [a, c], [a, d], [b, a], ... , [c, a], ...[d, d]; ∙ [a, a, a], [a, a, b], [a, a, c], [a, a, d], ...,[d, d, d]; ∙ ... Перечислить все паттерны-2 8 ∙ Теперь паттернов счётное множество: ∙ []; ∙ [a], [b], [c], [d]; ∙ [a, a], [a, b], [a, c], [a, d], [b, a], ... , [c, a], ...[d, d]; ∙ [a, a, a], [a, a, b], [a, a, c], [a, a, d], ...,[d, d, d]; ∙ ... 2017-11-07 Поиск паттернов Пространство паттернов Счётные множества паттернов Перечислить все паттерны-2 1. То есть паттернов бесконечно много, но мы можем их перечислять. 2. Так, например. мы знаем, сколько их в каждой строке. 3. Упорядочивание нам снова помогло, но уже не так сильно, как в прошлый раз.
  • 25. [aa] [ab] [ac] [ad] [ba] [bb] [bc] ... ... ...... ...[aaa] [aab] [aac] [aad] [aba] [abc] [abd] [ ] [a] [b] [c] [d] Перечислить все паттерны-2 8 [aa] [ab] [ac] [ad] [ba] [bb] [bc] ... ... ...... ...[aaa] [aab] [aac] [aad] [aba] [abc] [abd] [ ] [a] [b] [c] [d] 2017-11-07 Поиск паттернов Пространство паттернов Счётные множества паттернов Перечислить все паттерны-2 1. То есть первый этап (почти) любого алгоритма поиска паттернов — упорядочить паттерны и придумать подобное дерево. 2. Бывают и б´oльшие пространства, иногда с ними что-то можно придумать, а иногда уровни дерева начинают разрастаться ≪слишком экспоненциально≫. 3. Данных у нас конечное количество, + могут быть дополнительные ограничения ⇒на практике пространство паттернов всегда конечно.
  • 26. a b c d a b a cb a db a dc b dc a c a d b c b d c d ba dc Перечислить все паттерны-2 8 a b c d a b a cb a db a dc b dc a c a d b c b d c d ba dc 2017-11-07 Поиск паттернов Пространство паттернов Счётные множества паттернов Перечислить все паттерны-2 1. Множества можно рассматривать как полносвязные графы без повторяющихся узлов.
  • 27. ba dc ba dc ba dc a d b d c d ba d c ba d c ba d c a b d a b d a b d ...... ... ...... ... ... ...... ... ...... ... ... a b a b c a b c a b c a b c d a c b c ...... ... ...... ... ... Перечислить все паттерны-2 8 ba dc ba dc ba dc a d b d c d ba d c ba d c ba d c a b d a b d a b d ...... ... ...... ... ... ...... ... ...... ... ... a b a b c a b c a b c a b c d a c b c ...... ... ...... ... ... 2017-11-07 Поиск паттернов Пространство паттернов Счётные множества паттернов Перечислить все паттерны-2 1. Это можно расширить для ненаправленных графов на конечном множестве вершин. 2. Пространство очень быстро разрастается. 3. И да, это именно пространства в том смысле, что можно определить расстояние между паттернами, для которого будет выполняться правило треугольника.
  • 28. ∙ Как строить дерево паттернов? ∙ Как обходить это дерево? ∙ Использовать стандартные алгоритмы обхода дерева... ∙ ... но нам не всегда нужно обойти всё дерево (модифицируем стандартные алгоритмы). ∙ Избавляться от лишних обходов данных! ∙ Применять ограничения как можно раньше. Основная идея 9 ∙ Как строить дерево паттернов? ∙ Как обходить это дерево? ∙ Использовать стандартные алгоритмы обхода дерева... ∙ ... но нам не всегда нужно обойти всё дерево (модифицируем стандартные алгоритмы). ∙ Избавляться от лишних обходов данных! ∙ Применять ограничения как можно раньше. 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Основная идея алгоритмов Основная идея 1. Почти все алгоритмы поиска паттернов, так или иначе, занимаются обходом дерева паттернов. Они отличаются только тем, в каком порядке они перебирают паттерны, какую информацию хранят в узлах, и когда и как считывают данные.
  • 29. ∙ Как строить дерево паттернов? ∙ Как обходить это дерево? ∙ Использовать стандартные алгоритмы обхода дерева... ∙ ... но нам не всегда нужно обойти всё дерево (модифицируем стандартные алгоритмы). ∙ Избавляться от лишних обходов данных! ∙ Применять ограничения как можно раньше. Основная идея 9 ∙ Как строить дерево паттернов? ∙ Как обходить это дерево? ∙ Использовать стандартные алгоритмы обхода дерева... ∙ ... но нам не всегда нужно обойти всё дерево (модифицируем стандартные алгоритмы). ∙ Избавляться от лишних обходов данных! ∙ Применять ограничения как можно раньше. 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Основная идея алгоритмов Основная идея 1. В ECLAT — это дерево подмножеств.
  • 30. ∙ Как строить дерево паттернов? ∙ Как обходить это дерево? ∙ Использовать стандартные алгоритмы обхода дерева... ∙ ... но нам не всегда нужно обойти всё дерево (модифицируем стандартные алгоритмы). ∙ Избавляться от лишних обходов данных! ∙ Применять ограничения как можно раньше. Основная идея 9 ∙ Как строить дерево паттернов? ∙ Как обходить это дерево? ∙ Использовать стандартные алгоритмы обхода дерева... ∙ ... но нам не всегда нужно обойти всё дерево (модифицируем стандартные алгоритмы). ∙ Избавляться от лишних обходов данных! ∙ Применять ограничения как можно раньше. 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Основная идея алгоритмов Основная идея 1. В ECLAT — каждый уровень дерева описан отдельной таблицей. JOIN этой таблицы с собой даёт следующий уровень.
  • 31. ∙ Как строить дерево паттернов? ∙ Как обходить это дерево? ∙ Использовать стандартные алгоритмы обхода дерева... ∙ ... но нам не всегда нужно обойти всё дерево (модифицируем стандартные алгоритмы). ∙ Избавляться от лишних обходов данных! ∙ Применять ограничения как можно раньше. Основная идея 9 ∙ Как строить дерево паттернов? ∙ Как обходить это дерево? ∙ Использовать стандартные алгоритмы обхода дерева... ∙ ... но нам не всегда нужно обойти всё дерево (модифицируем стандартные алгоритмы). ∙ Избавляться от лишних обходов данных! ∙ Применять ограничения как можно раньше. 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Основная идея алгоритмов Основная идея 1. В ECLAT — разновидность обхода в ширину.
  • 32. ∙ Как строить дерево паттернов? ∙ Как обходить это дерево? ∙ Использовать стандартные алгоритмы обхода дерева... ∙ ... но нам не всегда нужно обойти всё дерево (модифицируем стандартные алгоритмы). ∙ Избавляться от лишних обходов данных! ∙ Применять ограничения как можно раньше. Основная идея 9 ∙ Как строить дерево паттернов? ∙ Как обходить это дерево? ∙ Использовать стандартные алгоритмы обхода дерева... ∙ ... но нам не всегда нужно обойти всё дерево (модифицируем стандартные алгоритмы). ∙ Избавляться от лишних обходов данных! ∙ Применять ограничения как можно раньше. 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Основная идея алгоритмов Основная идея 1. В ECLAT мы прочитали таблицу с исходными данными один раз. 2. В узлах (при помощи вспомогательной таблицы) хранятся так называемые проекции данных (списки идентификаторов строк/чеков). 3. Размер вспомогательной таблицы уменьшается от уровня к уровню. 4. Рассмотрим основные проблемы, с которыми приходится сталкиваться при разработке алгоритма или его реализации.
  • 33. 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности
  • 34. { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {?} {?} {?} {?} Продолжая перечислять паттерны 11 { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {?} {?} {?} {?} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Продолжая перечислять паттерны 1. Даже просто перечислять паттерны может быть сложно, дорого и долго.
  • 35. { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {?} {?} {?} Продолжая перечислять паттерны 11 { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {?} {?} {?} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Продолжая перечислять паттерны 1. Например, если мы идём по пространству паттернов, построенному ≪в отрыве от данных≫.
  • 36. { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {?} {?} Продолжая перечислять паттерны 11 { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {?} {?} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Продолжая перечислять паттерны 1. То есть для каждого паттерна считаем, присутствует ли он в данных...
  • 37. { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {?} Продолжая перечислять паттерны 11 { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {?} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Продолжая перечислять паттерны 1. ... и сколько раз встречается.
  • 38. { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} Продолжая перечислять паттерны 11 { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Продолжая перечислять паттерны 1. Но даже если представить, что подсчёт частоты как-то даётся нам за O (1)...
  • 39. {ab} { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} Продолжая перечислять паттерны 11 {ab} { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Продолжая перечислять паттерны 1. ... нам всё равно нужно cгенерировать огромное количество паттернов.
  • 40. {ab} {ac} { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} Продолжая перечислять паттерны 11 {ab} {ac} { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Продолжая перечислять паттерны 1. Представим, например, что базовых элементов — потенциальных паттернов длины 1 сто штук.
  • 41. {ab} {ac} {ad} { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} Продолжая перечислять паттерны 11 {ab} {ac} {ad} { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Продолжая перечислять паттерны 1. Сколько потенциальных паттернов длины 2?
  • 42. {ab} {ac} {ad} {bc} { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} Продолжая перечислять паттерны 11 {ab} {ac} {ad} {bc} { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Продолжая перечислять паттерны 1. А сколько всего?
  • 43. {ab} {ac} {ad} {bc} {bd} { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} Продолжая перечислять паттерны 11 {ab} {ac} {ad} {bc} {bd} { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Продолжая перечислять паттерны 1. А если мы не с множествами будем работать, а с последовательностями или строками?
  • 44. {ab} {ac} {ad} {bc} {bd} {cd} { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} Продолжая перечислять паттерны 11 {ab} {ac} {ad} {bc} {bd} {cd} { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Продолжая перечислять паттерны 1. Естественно, на практике это можно и нужно оптимизировать.
  • 45. {ab} {ac} {ad} {bc} {bd} {cd} {abc} { ? } { ? } { ? } { } {a} {b} {c} {d} Продолжая перечислять паттерны 11 {ab} {ac} {ad} {bc} {bd} {cd} {abc} { ? } { ? } { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Продолжая перечислять паттерны 1. Во-первых, можно посещать только те узлы дерева, которые соответствуют паттернам, хотя бы потенциально присутствующим в данных.
  • 46. {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} { ? } { ? } { } {a} {b} {c} {d} Продолжая перечислять паттерны 11 {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} { ? } { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Продолжая перечислять паттерны 1. А желательно, чтобы они не просто ≪потенциально присутствовали≫, но и потенциально были интересными для нас (часто встречающимися, например).
  • 47. {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} { ? } { } {a} {b} {c} {d} Продолжая перечислять паттерны 11 {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Продолжая перечислять паттерны 1. Во-вторых, можно вообще не генерировать паттерны (кандидатов в паттерны), а использовать хитрое представление исходных и/или промежуточных данных.
  • 48. {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} {bcd} { } {a} {b} {c} {d} Продолжая перечислять паттерны 11 {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} {bcd} { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Продолжая перечислять паттерны 1. Но в любом случае, чисто формально, мы обходим всё пространство паттернов, даже если ≪чисто виртуально≫.
  • 49. { } {{ ## b : 1 a : 2 {{ c : 1 b : 1 e : 1 d : 1 d : 1 g : 1 e : 1 e : 1 h : 1 FP-tree 12 { } {{ ## b : 1 a : 2 {{ c : 1 b : 1 e : 1 d : 1 d : 1 g : 1 e : 1 e : 1 h : 1 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности FP-tree 1. Одно из возможных решений этой проблемы — преобразование исходной таблицы в особую структуру данных, которая позволяет избежать генерирования паттернов. 2. На базе этой структуры построены два популярных алгоритма — FP-growth и PrefixSpan. 3. В узлах дерева паттернов тогда хранится такая структура, и из неё мы можем выделить (≪вырастить≫) подпаттерны и соответствующую проекцию данных для этих подпаттернов.
  • 50. Проблема с длинными паттернами 13 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Проблема с длинными паттернами 1. Что будет, если все данные у нас одинаковые? Есть только один длинный паттерн. 2. В ответе тогда будет слишком много избыточных данных.
  • 51. elements count elements count elements count {a} 2 {a,e} 2 {b,d,e} 2 {b} 2 {b,d} 2 {e,g,h} 2 {d} 3 {b,e} 2 {e} 4 {d,e} 3 {g} 2 {e,g} 2 {h} 2 {e,h} 2 {g,h} 2 Проблема с длинными паттернами 13 elements count elements count elements count {a} 2 {a,e} 2 {b,d,e} 2 {b} 2 {b,d} 2 {e,g,h} 2 {d} 3 {b,e} 2 {e} 4 {d,e} 3 {g} 2 {e,g} 2 {h} 2 {e,h} 2 {g,h} 2 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Проблема с длинными паттернами 1. Мы уже сталкивались с похожей ситуацией в нашем простом примере.
  • 52. elements count elements count elements count {a} 2 {a,e} 2 {b,d,e} 2 {b} 2 {b,d} 2 {e,g,h} 2 {d} 3 {b,e} 2 {e} 4 {d,e} 3 {g} 2 {e,g} 2 {h} 2 {e,h} 2 {g,h} 2 Проблема с длинными паттернами 13 elements count elements count elements count {a} 2 {a,e} 2 {b,d,e} 2 {b} 2 {b,d} 2 {e,g,h} 2 {d} 3 {b,e} 2 {e} 4 {d,e} 3 {g} 2 {e,g} 2 {h} 2 {e,h} 2 {g,h} 2 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Проблема с длинными паттернами 1. Зная, что есть паттерн {b, d, e} с поддержкой 2, мы сразу получаем, что есть и {b, e} и {b, e} и {d, e} с такой же поддержкой или больше.
  • 53. elements count elements count elements count {a} 2 {a,e} 2 {b,d,e} 2 {b} 2 {b,d} 2 {e,g,h} 2 {d} 3 {b,e} 2 {e} 4 {d,e} 3 {g} 2 {e,g} 2 {h} 2 {e,h} 2 {g,h} 2 Проблема с длинными паттернами 13 elements count elements count elements count {a} 2 {a,e} 2 {b,d,e} 2 {b} 2 {b,d} 2 {e,g,h} 2 {d} 3 {b,e} 2 {e} 4 {d,e} 3 {g} 2 {e,g} 2 {h} 2 {e,h} 2 {g,h} 2 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Проблема с длинными паттернами 1. То есть, если бы мы в ответе удалили подсвеченные паттерны, мы бы не потеряли информацию. 2. Если бы мы удалили выделенные жирным, мы бы потеряли информацию о том, сколько раз паттерн встретился в данных, но не информацию о том, удовлетворяет ли он нашим критериям поиска (ДА или НЕТ).
  • 54. { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} Обход дерева в ECLAT 14 { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Обход дерева в ECLAT 1. Да, нам не нужно сканировать исходные данные много раз.
  • 55. {ab} {ac} {ad} {bc} {bd} {cd} { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} Обход дерева в ECLAT 14 {ab} {ac} {ad} {bc} {bd} {cd} { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Обход дерева в ECLAT 1. Но значительную часть этих данных мы храним в памяти.
  • 56. {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} {bcd} { } {a} {b} {c} {d} Обход дерева в ECLAT 14 {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} {bcd} { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Обход дерева в ECLAT 1. Можно ли уменьшить потребление памяти?
  • 57. {ae} {eg}{eh} {gh} { } {a} {b} {d} {e} {g} {h} 1 3 1 2 3 41 3 3 4 1 2 1 2 1 2 {egh} 1 2 {bde} 3 4 1 24 1 2 1 2 3 4 {bd}{be} {de} 1 4 Обход дерева в ECLAT 14 {ae} {eg}{eh} {gh} { } {a} {b} {d} {e} {g} {h} 1 3 1 2 3 41 3 3 4 1 2 1 2 1 2 {egh} 1 2 {bde} 3 4 1 24 1 2 1 2 3 4 {bd}{be} {de} 1 4 2017-11-07 Поиск паттернов Путешествия в пространстве паттернов Сложности Обход дерева в ECLAT 1. Можно хранить не сами множества идентификаторов, а их разницу с универсальным множеством (или со множеством на предыдущем уровне). 2. ...и проще работа: нужно считать объединение множеств, а не пересечение — это можно делать (𝜀, 𝛿)-аппроксимировано (но осторожно). 3. Чем больше данных, тем заметнее результат.
  • 58. Обход дерева определён через рекурсию 15 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Уходим от рекурсии Обход дерева определён через рекурсию
  • 59. ∙ Обход дерева обычно делают рекурсивно. ∙ Уйдя от рекурсии, можно управлять стеком вручную. ∙ В том числе превратить его в очередь задач. ∙ Но нам потребуются дополнительные средства модификации стека — чтобы избежать упомянутых проблем. Стек работы алгоритма 16 ∙ Обход дерева обычно делают рекурсивно. ∙ Уйдя от рекурсии, можно управлять стеком вручную. ∙ В том числе превратить его в очередь задач. ∙ Но нам потребуются дополнительные средства модификации стека — чтобы избежать упомянутых проблем. 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Уходим от рекурсии Стек работы алгоритма
  • 60. { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {?} {?} {?} {?} Работа со стеком 17 { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {?} {?} {?} {?} 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Уходим от рекурсии Работа со стеком 1. Сначала в стеке-очереди исходное состояние.
  • 61. { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} Работа со стеком 17 { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Уходим от рекурсии Работа со стеком 1. Эту ≪задачу≫ мы ≪забрали≫ и положили 4 новые, попутно обнаружив 4 паттерна.
  • 62. {ab} {ac} {ad} { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} Работа со стеком 17 {ab} {ac} {ad} { ? } { ? } { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Уходим от рекурсии Работа со стеком 1. Обработали ≪задачу≫ {a}, ещё лежат {b}, {c}, {d}, ещё три добавили
  • 63. {ab} {ac} {ad} {bc} {bd} { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} Работа со стеком 17 {ab} {ac} {ad} {bc} {bd} { ? } { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Уходим от рекурсии Работа со стеком 1. Минус одна, плюс две.
  • 64. {ab} {ac} {ad} {bc} {bd} {cd} { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} Работа со стеком 17 {ab} {ac} {ad} {bc} {bd} {cd} { ? } { ? } { ? } { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Уходим от рекурсии Работа со стеком 1. Когда остаётся только последний ряд, при извлечении задач из стека новые уже не добавляются.
  • 65. {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} { ? } { } {a} {b} {c} {d} { ? } Работа со стеком 17 {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} { ? } { } {a} {b} {c} {d} { ? } 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Уходим от рекурсии Работа со стеком 1. Но, в зависимости от типа алгоритма, могут производиться довольно тяжёлые операции...
  • 66. {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} { ? } { } {a} {b} {c} {d} Работа со стеком 17 {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} { ? } { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Уходим от рекурсии Работа со стеком 1. ...включая сканирование исходных данных.
  • 67. {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} {bcd} { } {a} {b} {c} {d} Работа со стеком 17 {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} {bcd} { } {a} {b} {c} {d} 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Уходим от рекурсии Работа со стеком 1. В том числе поэтому, часто нужно модифицировать стек в процессе работы алгоритма — так, чтобы уменьшить количество узлов, которые нужно обойти.
  • 68. Модификация стека 18 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Ломаем стек Модификация стека 1. Благодаря упорядоченности паттернов, мы можем быть уверены, что {b, c} не появится правее в дереве.
  • 69. Модификация стека 18 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Ломаем стек Модификация стека 1. |Если при обходе в глубину обнаружится, что поддержка первого упоминания {b, c} такая же как у самого этого паттерна во втором ряду, то мы можем отменить все задачи, связанные с {b, c}. 2. При этом существенно уменьшается количество паттернов, которые нужно будет обойти.
  • 70. Модификация стека 18 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Ломаем стек Модификация стека 1. Тоже самое с паттерном {c, d}.
  • 71. Модификация стека 18 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Ломаем стек Модификация стека 1. И со всеми остальными паттернами...
  • 72. Модификация стека 18 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Ломаем стек Модификация стека 1. В результате, если в данных есть только один длинный паттерн, нам нужно будет сделать единственный проход в глубину.
  • 73. Модификация стека 18 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Ломаем стек Модификация стека 1. Поэтому существует эвристика — упорядочивать элементы не по алфавиту или ≪абы как≫, а по оценке их частоты.
  • 74. ∙ Кроме естественного требования частоты, могут быть и другие ограничения, например: ∙ суммарная стоимость товаров x, ∙ максимальная длина строки (при конкатенации) x, ∙ некоторая произвольная функция F (паттерн, данные) x. Применение ограничений 19 ∙ Кроме естественного требования частоты, могут быть и другие ограничения, например: ∙ суммарная стоимость товаров x, ∙ максимальная длина строки (при конкатенации) x, ∙ некоторая произвольная функция F (паттерн, данные) x. 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Ломаем стек Применение ограничений 1. Можем ли мы сказать что-то про F ({a, b, c}) если мы знаем F ({a, b})?
  • 75. {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} {bcd} { } {a} {b} {c} {d} adcd{ } COST=3 COST=2 COST=3 COST=2 COST=5 COST=6 COST=5 COST=5 COST=4 COST=5 COST=8 COST=7 COST=8 COST=7 COST=7 COST6 Применение ограничений 19 {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} {bcd} { } {a} {b} {c} {d} adcd{ } COST=3 COST=2 COST=3 COST=2 COST=5 COST=6 COST=5 COST=5 COST=4 COST=5 COST=8 COST=7 COST=8 COST=7 COST=7 COST6 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Ломаем стек Применение ограничений 1. В самом простом случае, практически нет отличий от работы с поддержкой. Добавление элемента в паттерн увеличивает суммарную ≪стоимость≫, так что достигнув предельного значения, вниз по дереву идти не нужно.
  • 76. {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} {bcd} { } {a} {b} {c} {d} adcd{ } COST=3 COST=2 COST=3 COST=2 COST=5 COST=6 COST=5 COST=5 COST=4 COST=5 COST=8 COST=7 COST=8 COST=7 COST=7 COST6 Применение ограничений 19 {ab} {ac} {ad} {bc} {bd} {cd} {abc} {adb} {acd} {bcd} { } {a} {b} {c} {d} adcd{ } COST=3 COST=2 COST=3 COST=2 COST=5 COST=6 COST=5 COST=5 COST=4 COST=5 COST=8 COST=7 COST=8 COST=7 COST=7 COST6 2017-11-07 Поиск паттернов Стек алгоритмов обхода дерева Ломаем стек Применение ограничений 1. В данном случае, мы смогли обойти только половину узлов. На практике бывает, конечно, и лучше. 2. Тип таких ограничений подсказывает нам какой алгоритм использовать, какую информацию держать в каждом узле дерева.
  • 77. ∙ Строки → последовательность токенов: Mozilla /5.0 ( Windows NT 6 . 1 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e Gecko ) Mozilla /5.0 , ( Windows , NT , 6 . 1 ; , WOW64) , AppleWebKit /537.36 , (KHTML, , l i k e , Gecko ) ∙ Последовательности с малым числом базовых элементов → множества. ∙ И восстанавливаем последовательности после ещё одного прохода. ∙ Последовательности → графы переходов. ∙ (борьба с циклами). Эвристика: упрощение модели 20 ∙ Строки → последовательность токенов: Mozilla /5.0 ( Windows NT 6 . 1 ; WOW64) AppleWebKit /537.36 (KHTML, l i k e Gecko ) Mozilla /5.0 , ( Windows , NT , 6 . 1 ; , WOW64) , AppleWebKit /537.36 , (KHTML, , l i k e , Gecko ) ∙ Последовательности с малым числом базовых элементов → множества. ∙ И восстанавливаем последовательности после ещё одного прохода. ∙ Последовательности → графы переходов. ∙ (борьба с циклами). 2017-11-07 Поиск паттернов На уровне модели данных и паттернов Данные Эвристика: упрощение модели
  • 78. ∙ По популярности: ∙ Не нужно ничего считать, чтобы узнать, что в русском языке ≪й≫ будет идти после ≪о≫. ∙ По составленному вручную каталогу: ∙ Часто элементы относятся к нескольким категориям (например, товары или символы) ∙ Нам нужно сделать так, чтобы из этих категорий получилась строгая иерархия. Выбор метода упорядочивания паттернов 21 ∙ По популярности: ∙ Не нужно ничего считать, чтобы узнать, что в русском языке ≪й≫ будет идти после ≪о≫. ∙ По составленному вручную каталогу: ∙ Часто элементы относятся к нескольким категориям (например, товары или символы) ∙ Нам нужно сделать так, чтобы из этих категорий получилась строгая иерархия. 2017-11-07 Поиск паттернов На уровне модели данных и паттернов Паттерны Выбор метода упорядочивания паттернов
  • 79. ∙ Если известно, что паттерны в данных очень длинные (или очень многомерные), то всё дерево паттернов будет слишком трудно обойти. Эвристический обход дерева 22 ∙ Если известно, что паттерны в данных очень длинные (или очень многомерные), то всё дерево паттернов будет слишком трудно обойти. 2017-11-07 Поиск паттернов На уровне работы алгоритмов Эвристический обход дерева
  • 80. 1 Вместо этого можно попробовать найти некоторые длинные паттерны при помощи сэмплинга. 2 Оказавшись где-то в середине и в глубине дерева, поднимаемся наверх, обнаруживая более короткие паттерны. 3 Короткие паттерны перемешиваем, получая кандидатов в длинные паттерны, проверяем их. 4 Повторяем. Эвристический обход дерева 22 1 Вместо этого можно попробовать найти некоторые длинные паттерны при помощи сэмплинга. 2 Оказавшись где-то в середине и в глубине дерева, поднимаемся наверх, обнаруживая более короткие паттерны. 3 Короткие паттерны перемешиваем, получая кандидатов в длинные паттерны, проверяем их. 4 Повторяем. 2017-11-07 Поиск паттернов На уровне работы алгоритмов Эвристический обход дерева
  • 81. ∙ Spark ∙ Weka (Java, GUI) ∙ arules (R) ∙ pyarules (Python) ∙ ProM ∙ python-snakes ∙ re2 ∙ hyperscan Что есть в open-source 23 ∙ Spark ∙ Weka (Java, GUI) ∙ arules (R) ∙ pyarules (Python) ∙ ProM ∙ python-snakes ∙ re2 ∙ hyperscan 2017-11-07 Поиск паттернов Что есть в open-source