Есть ли способ использовать найденные последовательные шаблоны в качестве входных данных для алгоритма кластеризации - PullRequest
0 голосов
/ 07 мая 2019

Я делаю проект по классификации пользователей на основе их шаблонов серфинга на сайте.

Для этого мне нужно найти шаблоны в данных и затем кластеризовать их, но кластеризация является проблемой, так как алгоритмы кластеризации, которые я пробовал (k-means, agglomerative и DBSCAN), не допускают списки в качестве входных данных.

У меня есть списки посещенных страниц, разделенные сессией.

Пример:

data = [[1, 2, 5],
        [2, 4],
        [2, 3],
        [1, 2, 4],
        [1, 3],
        [2, 3],
        [1, 3],
        [7, 8, 9],
        [9, 8, 7],
        [1, 2, 3, 5],
        [1, 2, 3]]

Каждый список представляет сеанс с посещенными страницами. Каждый номер представляет собой часть URL.

Пример:

1 = '/home'
2 = '/blog'
3 = '/about-us'
...

Я помещаю данные через скрипт интеллектуального анализа.

Код:

import pyfpgrowth # pip install pyfpgrowth

data = [[1, 2, 5],
        [2, 4],
        [2, 3],
        [1, 2, 4],
        [1, 3],
        [2, 3],
        [1, 3],
        [7, 8, 9],
        [9, 8, 7],
        [1, 2, 3, 5],
        [1, 2, 3]]

patterns = pyfpgrowth.find_frequent_patterns(data, 2)
print(patterns)

rules = pyfpgrowth.generate_association_rules(patterns, 0.7)
print(rules)

Результат:

# print(patterns)

{(1,): 6,
 (1, 2): 4,
 (1, 2, 3): 2,
 (1, 2, 5): 2,
 (1, 3): 4,
 (1, 5): 2,
 (2,): 7,
 (2, 3): 4,
 (2, 4): 2,
 (2, 5): 2,
 (4,): 2,
 (5,): 2,
 (7,): 2,
 (8,): 2,
 (9,): 2}

# print(rules)

{(1, 5): ((2,), 1.0),
 (2, 5): ((1,), 1.0),
 (4,): ((2,), 1.0),
 (5,): ((1, 2), 1.0)}

Согласно статье я использую следующий шаг - использование найденных шаблонов в качестве входных данных для алгоритма кластеризации (стр. 118, глава 4.3), но насколько я знаю, алгоритмы кластеризации не принимать списки (с переменной длиной) в качестве входных данных.

Я пробовал это, но это не сработало.

Код:

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=4, random_state=0).fit(patterns)

test = [1, 8, 2]

print(kmeans.predict(test))

Что я должен сделать, чтобы алгоритм k-средних мог предсказать группу, к которой принадлежит шаблон серфинга, или есть другой алгоритм, который больше подходит для этого?

Заранее спасибо!

1 Ответ

1 голос
/ 07 мая 2019

HAC и DBSCAN могут использоваться со списками.

Вам просто нужно самостоятельно вычислить матрицу расстояний, потому что вы, очевидно, не можете использовать евклидово расстояние на этих данных.Вместо.Например, вы можете рассмотреть Jaccard.

K-средства не могут быть использованы.Требуются непрерывные данные в R ^ d.

...