SlideShare a Scribd company logo
1 of 82
Download to read offline
Поиск паттернов
Константин Игнатов
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

What's hot

Лекция 3: Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 3: Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 3: Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 3: Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Mikhail Kurnosov
 
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"Yandex
 
Лекция 4. Строки, байты, файлы и ввод/вывод.
 Лекция 4. Строки, байты, файлы и ввод/вывод. Лекция 4. Строки, байты, файлы и ввод/вывод.
Лекция 4. Строки, байты, файлы и ввод/вывод.Roman Brovko
 
Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?Магия в Python: Дескрипторы. Что это?
Магия в Python: Дескрипторы. Что это?PyNSK
 
Лекция 5
Лекция 5Лекция 5
Лекция 5itc73
 

What's hot (8)

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

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

Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоCodeFest
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Ontico
 
Лекция 1. Начало.
Лекция 1. Начало.Лекция 1. Начало.
Лекция 1. Начало.Roman Brovko
 
Стажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализа
Стажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализаСтажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализа
Стажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализаSmartTools
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20DefconRussia
 
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python Meetup
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''DneprCiklumEvents
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''DneprCiklumEvents
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машинRoman Dvornov
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозитElena Kotina
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Mikhail Kurnosov
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agencyit-people
 
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studioчто пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studiocorehard_by
 
ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3it-people
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотекPyNSK
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
C++ refelection and cats
C++ refelection and catsC++ refelection and cats
C++ refelection and catscorehard_by
 
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSUlarhat
 

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

Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
 
Лекция 1. Начало.
Лекция 1. Начало.Лекция 1. Начало.
Лекция 1. Начало.
 
Стажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализа
Стажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализаСтажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализа
Стажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализа
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20
 
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]
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''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''
 
04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''04 net saturday eugene sukhikh ''the basic performance questions''
04 net saturday eugene sukhikh ''the basic performance questions''
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
 
Android: Как написать приложение, которое не тормозит
Android: Как  написать приложение, которое не тормозитAndroid: Как  написать приложение, которое не тормозит
Android: Как написать приложение, которое не тормозит
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
View как чистая функция от состояния базы данных  - Илья Беда, bro.agencyView как чистая функция от состояния базы данных  - Илья Беда, bro.agency
View как чистая функция от состояния базы данных - Илья Беда, bro.agency
 
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studioчто пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
 
ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотек
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
C++ refelection and cats
C++ refelection and catsC++ refelection and cats
C++ refelection and cats
 
CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSU
 

More from Ontico

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

More from Ontico (20)

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