如何将发现的顺序模式用作聚类算法的输入

我正在进行一个项目,基于用户在网站上的浏览模式对其进行分类。

为此,我需要在数据中寻找模式,然后对这些模式进行聚类,但聚类是一个问题,因为我尝试过的聚类算法(k-means、层次聚类和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 pyfpgrowthdata = [[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 KMeanskmeans = KMeans(n_clusters=4, random_state=0).fit(patterns)test = [1, 8, 2]print(kmeans.predict(test))

我该如何做才能让k-means算法能够预测浏览模式所属的组,或者是否有其他更适合此任务的算法?


回答:

层次聚类和DBSCAN都可以用于列表数据。

你只需要自己计算距离矩阵,因为显然不能对这类数据使用欧几里得距离。相反,你可以考虑使用Jaccard距离,例如。

k-means不能使用。它需要在R^d中的连续数据。

Related Posts

关于k折交叉验证的直观问题

我在使用交叉验证检查预测能力时遇到了一些直观问题,我认…

调整numpy数组大小以使用sklearn的train_test_split函数?

我正在尝试使用sklearn中的test_train_…

如何转换二维张量和索引张量以便用于torch.nn.utils.rnn.pack_sequence

我有一组序列,格式如下: sequences = to…

模型预测值的含义是什么?

我在网上找到一个数字识别器的CNN模型并进行了训练,当…

锯齿张量作为LSTM的输入

了解锯齿张量以及如何在TensorFlow中使用它们。…

如何告诉SciKit的LinearRegression模型预测值不能小于零?

我有以下代码,尝试根据非价格基础特征来估值股票。 pr…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注