2016-11-14 2 views
0

私は、ウィンドウ化されたシーケンスを表すリストにサイズ3のタプルのセットを持っています。 私が必要とするのは、3番目のものを得るためにpyspaskを使うことです(タプルの2つの最初の部分を与えられます)。PrefixSpanシーケンス抽出の誤解

私は、その頻度に基づいて3つの要素のシーケンスを作成する必要があります。

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))) 

を、私は彼らにはない、アルファベットをたどるためにそれらOシーケンスおよび周波数を見ることを期待する、けれども:

これは私がやっているものです。定義されたものに表示されていません

FreqSequence(sequence=[[u'c'], [u'd'], [u'b']], freq=1) 
FreqSequence(sequence=[[u'g'], [u'c'], [u'c']], freq=1) 

は、そして私のようなシーケンスを取得しています。明らかに、私の特徴を構造化する方法に問題があるか、このアルゴリズムの目的と機能に何か不足しています。

ありがとう!

答えて

1

まず者があなたの入力を見てみましょう:

rdd.count() 
1 

あなたが唯一の配列とデータセットを作成した見ることができるように。

<(abc)(bcd)(cde)(def)(efg)(fgh)(abc)(def)(abc)(bcd)(fgh)(def)(bcd)> 

こういうパターンは、実際に入力があった場合に正しいと言えます。

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() 
13 
rdd.first() 
[['a'], ['b'], ['c']] 
:データセットの各要素は、以下の形状を有することができ、個々の配列データを表す場合

...(abc)(def)(abc)... 

たとえば

FreqSequence(sequence=[[u'c'], [u'd'], [u'b']], freq=1) 

はに対応します

ここで、

  • 各要素はリストのリストです。
  • 各内部リストは、指定された位置での可能な選択肢を表します。このような構造のデータと

model = PrefixSpan.train(rdd, 0.2, 3) 
model.freqSequences().top(5, key=lambda x: len(x.sequence)) 
[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)] 
model.freqSequences().top(5, key=lambda x: x.freq) 
[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)] 
+0

おかげでこのすべてを説明するためのたくさん! – Kratos