Есть ли способ использовать найденные последовательные шаблоны в качестве входных данных для алгоритма кластеризации
Я делаю проект по классификации пользователей на основе их шаблонов серфинга на сайте.
Для этого мне нужно найти шаблоны в данных и затем кластеризовать их, но кластеризация является проблемой, так как алгоритмы кластеризации, которые я пробовал (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 ответ
И HAC, и DBSCAN могут использоваться со списками.
Вам просто нужно вычислить матрицу расстояний самостоятельно, потому что вы, очевидно, не можете использовать евклидово расстояние на этих данных. Вместо. Вы могли бы рассмотреть, например, Джакарду.
K-средства не могут быть использованы. Требуются непрерывные данные в R^d.