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

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

为此,我需要在数据中寻找模式,然后对这些模式进行聚类,但聚类是一个问题,因为我尝试过的聚类算法(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近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

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