1

これは簡単な質問かもしれませんが、1 クラス SVM の LibSVM 実装の概念的な基礎と、私が行っていることが許容されるかどうかを理解したいと思います。

この場合、外れ値の検出と除去のために 1 つのクラスの SVM を使用しています。これは、より大きな時系列予測モデルのコンテキストで、データの前処理ステップとして使用されます。そうは言っても、Y ベクトル (予測しようとしている量であり、クラス ラベルではなく連続です) と X 行列 (予測に使用される連続特徴) があります。前処理ステップの早い段階でデータの異常値を検出したいので、予測に使用するために X マトリックスを正規化またはラグする必要があります。さらに言えば、Y ベクトルをトレンド除去/ノイズ除去/またはその他の方法で処理する必要があります (これは既にスケーリングされています)。 [-1,1] 以内)。私の主な質問は、1 つのクラスの SVM を (libSVM を使用して) 次のようにモデル化することが正しいかどうかです。

svmod = svmtrain(ones(size(Y,1),1),Y,'-s 2 -t 2 -g 0.00001 -n 0.01');
[od,~,~] = svmpredict(ones(size(Y,1),1),Y,svmod);

結果として得られるモデルは、私が期待するものとある程度一致するパフォーマンスをもたらします (99% 程度の予測精度、つまり観測値の 1% が異常値であることを意味します)。しかし、私が質問する理由は、1 つのクラスの SVM に関する他の質問では、私が Y を使用する X 行列を使用しているように見えるからです。助けてくれてありがとう。

4

1 に答える 1

2

ここで行っていることは、派手な範囲チェックにすぎません。外れ値を見つけるために を使用したくない場合XY(実際には使用する必要がありますが)、Yこの即興の SVM ソリューションの代わりに、 の分布をチェックして外れ値を見つける方がはるかに簡単で優れています (たとえば、上部と下部を削除します)。から 0.5 パーセンタイルY)。

実際には、これはおそらくあなたが本当にやりたいこととはかけ離れています。このセットアップではY、コンテキストを考慮せずに外れ値として値を拒否しています (例: X)。RBF を使用している理由と、 の特定の値をどのように思いついたのgammaですか? カーネルは、1 次元データにとって完全にやり過ぎです。

次に、同じデータでトレーニングとテストを行っています ( Y)。これが起こるたびに子猫が死にます。1 クラス SVM は、トレーニング データを認識するモデルの構築を試みますが、構築に使用したのと同じデータで使用しないでください。子猫のことを考えてください。


nuさらに、 1 クラス SVM のパラメーターは、分類器が受け入れる外れ値の量を制御することに注意してください。これは、LIBSVM 実装ドキュメント (4 ページ) で説明さますnu。言い換えると、トレーニング オプションでは、最大 1% のデータを拒否できることが明確に示されています。1 クラス SVM の場合、canshouldに置き換えます。

したがって、結果として得られるモデルが、私が期待するものとある程度一致するパフォーマンスをもたらすとあなたが言うとき...もちろん、定義上はそうです。を設定nu=0.01したため、データの 1% がモデルによって拒否され、外れ値としてフラグが立てられます。

于 2013-07-31T22:22:38.407 に答える