関数スタックトレースでデータマイニングを行いたいのですが、このために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 よりもはるかに遅くなります。
ありがとう!