首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PrefixSpan序列提取误区

PrefixSpan序列提取误区
EN

Stack Overflow用户
提问于 2016-11-14 16:16:44
回答 1查看 1.3K关注 0票数 0

在表示窗口序列的列表中,我有一组大小为3的元组。我需要的是使用pyspask来获得第三个部分(考虑到元组的前两个部分)。

所以我需要它根据它们的频率来创建三个元素的序列。

这就是我要做的:

代码语言:javascript
复制
data = [[['a','b','c'],['b','c','d'],['c','d','e'],['d','e','f'],['e','f','g'],['f','g','h'],['a','b','c'],['d','e','f'],['a','b','c'],['b','c','d'],['f','g','h'],['d','e','f'],['b','c','d']]]
rdd = spark.sparkContext.parallelize(data,2)
rdd.cache()
model = PrefixSpan.train( rdd, 0.2, 3)

print(sorted(model.freqSequences().take(100)))

虽然,我希望看到的序列和频率,他们遵循字母表,但他们没有。

我得到的序列如下:

代码语言:javascript
复制
FreqSequence(sequence=[[u'c'], [u'd'], [u'b']], freq=1)
FreqSequence(sequence=[[u'g'], [u'c'], [u'c']], freq=1)

它们没有出现在定义的那些。显然,在构造我的特征的方式上有一个问题,或者我在这个算法的目的和功能上遗漏了一些东西。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-14 16:38:41

首先,让我们看看您的输入:

代码语言:javascript
复制
rdd.count()
代码语言:javascript
复制
1

如您所见,您创建了一个只有一个序列的数据集。可描述为:

代码语言:javascript
复制
<(abc)(bcd)(cde)(def)(efg)(fgh)(abc)(def)(abc)(bcd)(fgh)(def)(bcd)>

因此,您得到的模式确实是正确的,给定输入。例如

代码语言:javascript
复制
FreqSequence(sequence=[[u'c'], [u'd'], [u'b']], freq=1)

对应于:

代码语言:javascript
复制
...(abc)(def)(abc)...

如果数据集的每个元素表示单个序列数据,则可以具有以下形状:

代码语言:javascript
复制
rdd = sc.parallelize([
    [['a'], ['b'], ['c']], [['b'], ['c'], ['d']], [['c'], ['d'], ['e']],
    [['d'], ['e'], ['f']], [['e'], ['f'], ['g']], [['f'], ['g'], ['h']],
    [['a'], ['b'], ['c']], [['d'], ['e'], ['f']], [['a'], ['b'], ['c']],
    [['b'], ['c'], ['d']], [['f'], ['g'], ['h']], [['d'], ['e'], ['f']],
    [['b'], ['c'], ['d']]
])

rdd.count()
代码语言:javascript
复制
13
代码语言:javascript
复制
rdd.first()
代码语言:javascript
复制
[['a'], ['b'], ['c']]

其中:

  • 每个元素都是一个列表。
  • 每个内部列表都表示在给定职位上可能出现的替代方案。

使用这样的数据结构:

代码语言:javascript
复制
model = PrefixSpan.train(rdd, 0.2, 3)
model.freqSequences().top(5, key=lambda x: len(x.sequence))
代码语言:javascript
复制
[FreqSequence(sequence=[['d'], ['e'], ['f']], freq=3),
 FreqSequence(sequence=[['b'], ['c'], ['d']], freq=3),
 FreqSequence(sequence=[['a'], ['b'], ['c']], freq=3),
 FreqSequence(sequence=[['f'], ['g']], freq=3),
 FreqSequence(sequence=[['d'], ['f']], freq=3)]
代码语言:javascript
复制
model.freqSequences().top(5, key=lambda x: x.freq)
代码语言:javascript
复制
[FreqSequence(sequence=[['d']], freq=7),
 FreqSequence(sequence=[['c']], freq=7),
 FreqSequence(sequence=[['f']], freq=6),
 FreqSequence(sequence=[['b']], freq=6),
 FreqSequence(sequence=[['b'], ['c']], freq=6)]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40593218

复制
相关文章

相似问题

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