有没有一种方法可以使用找到的序列模式作为聚类算法的输入

2024-04-24 21:03:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个项目,根据用户在网站上的浏览模式对他们进行分类。你知道吗

为此,我需要在数据中找到模式,然后对它们进行聚类,但聚类是一个问题,因为我尝试的聚类算法(k-means、aggregative和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)}

根据apaper,我使用的下一步是使用找到的模式作为聚类算法的输入(第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-means算法能够预测冲浪模式所属的组,或者有其他算法更适合这种情况吗?你知道吗

提前谢谢!你知道吗


Tags: 数据代码import算法示例列表data模式
1条回答
网友
1楼 · 发布于 2024-04-24 21:03:54

HAC和DBSCAN都可以用于列表。你知道吗

你只需要自己计算距离矩阵,因为你显然不能在这个数据上使用欧几里德距离。相反。例如,你可以考虑杰卡德。你知道吗

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

相关问题 更多 >