首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以使用找到的序列模式作为聚类算法的输入

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

Stack Overflow用户
提问于 2019-05-07 22:48:33
回答 1查看 304关注 0票数 0

我正在做一个根据用户在网站上的冲浪模式对用户进行分类的项目。

为此,我需要在数据中找到模式,然后对它们进行聚类,但聚类是一个问题,因为我尝试过的聚类算法(k-means、agglomerative和DBSCAN)不允许将列表作为输入数据。

我有被访问的页面列表,按会话分隔。

示例:

代码语言:javascript
复制
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的一部分。

示例:

代码语言:javascript
复制
1 = '/home'
2 = '/blog'
3 = '/about-us'
...

我将数据放在一个模式挖掘脚本中。

代码:

代码语言:javascript
复制
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)

结果:

代码语言:javascript
复制
# 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)}

根据我正在使用的paper,下一步将使用找到的模式作为聚类算法的输入(第118页,第4.3章),但据我所知,聚类算法不接受列表(具有可变长度)作为输入。

我试过了,但不起作用。

代码:

代码语言:javascript
复制
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算法能够预测冲浪模式所属的组,或者是否有其他算法更适合这一点?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-08 02:42:08

HAC和DBSCAN都可以与列表一起使用。

您只需要自己计算距离矩阵,因为您显然不能对此数据使用欧几里德距离。而不是。例如,您可以考虑Jaccard。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56025248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档