Я делаю проект по классификации пользователей на основе их шаблонов серфинга на сайте.
Для этого мне нужно найти шаблоны в данных и затем кластеризовать их, но кластеризация является проблемой, так как алгоритмы кластеризации, которые я пробовал (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-средних мог предсказать группу, к которой принадлежит шаблон серфинга, или есть другой алгоритм, который больше подходит для этого?
Заранее спасибо!