0

関数スタックトレースでデータマイニングを行いたいのですが、このためにlibsvmを使用し、処理速度のためにデータをスパース形式で表現しています。各スタックトレースはインスタンスであり、変数は関数です。つまり:

class1 F1,F2,F1,F456,F3  
class2 F4,F4,F4,F56,F3000  
...

どこかで、見られるユニークな関数のレジストリが増え続けています。これが関数インデックスの由来です。理想的には、スパース形式を使用して前述のインスタンスを表し、次のように 5 つの変数に分割したいと思います。

1 1:1 2:1 1:1 456:1 3:1  
2 4:1 4:1 4:1 56:1 3000:1

これは libsvm の形式では不可能なので、合計で 3000 個の関数があると仮定した場合、インデックスの競合を避けるために、関数レジストリの合計の長さを各グループに追加しています。

1 1:1 3002:1 6001:1 9456:1 12003:1,  this is how the first instance looks now

関数の量が変わらない場合、これは機能しますが、毎回新しい関数が追加されるため、すべてをやり直す必要があるため、そうではありません。

私はスパース形式を使用していますが、他の形式でも提案を歓迎します。関数名を変数として使用して Weka でデータを高密度形式で使用できますが、libsvm よりもはるかに遅くなります。

ありがとう!

4

1 に答える 1

0

いくつかのオプションがあります:

a)毎回すべてをやり直します(libsvmの入力を生成する方がlibsvm自体よりも速いと思います:))

b) 最初に偶数を使用し、もう一方に奇数を使用します。したがって、例は次のようになります。

1 2:1 3:1 1:1 911:1 5:1

これにより衝突が回避され、すべてをやり直す必要はありません:)

于 2013-09-09T20:00:33.057 に答える