有没有办法使用找到的顺序模式作为聚类算法的输入
Is there a way to use found sequential patterns as input for a clustering algorithm
我正在做一个项目,根据用户在网站上的冲浪模式对用户进行分类。
为此,我需要在数据中找到模式,然后对它们进行聚类,但聚类是一个问题,因为我尝试的聚类算法(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)}
根据 paper 我正在使用的下一步是使用找到的模式作为聚类算法的输入(第 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 算法能够预测冲浪模式所属的组,或者是否有其他算法更适合这个?
提前致谢!
HAC 和 DBSCAN 都可以与列表一起使用。
你只需要自己计算距离矩阵,因为你显然不能在这个数据上使用欧氏距离。反而。例如,您可以考虑 Jaccard。
K-means 无法使用。它需要R^d中的连续数据。
我正在做一个项目,根据用户在网站上的冲浪模式对用户进行分类。
为此,我需要在数据中找到模式,然后对它们进行聚类,但聚类是一个问题,因为我尝试的聚类算法(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)}
根据 paper 我正在使用的下一步是使用找到的模式作为聚类算法的输入(第 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 算法能够预测冲浪模式所属的组,或者是否有其他算法更适合这个?
提前致谢!
HAC 和 DBSCAN 都可以与列表一起使用。
你只需要自己计算距离矩阵,因为你显然不能在这个数据上使用欧氏距离。反而。例如,您可以考虑 Jaccard。
K-means 无法使用。它需要R^d中的连续数据。