1

libsvm 実装を使用して、1 クラス SVM に慣れようとしています。私が読んだように、libsvm の 1 クラス タスクにはクラス ラベルがありません。しかし、ラベル列のないデータ ファイルを読み取ると、常に読み取りエラーが発生します。おもちゃのデータにラベルを付けて、結果のモデルを svm-train でテストしてみましたが、精度は常に 50% 前後とひどいものでした。

私の質問は、ラベル付けされたデータセット (たとえば、数百のガウス分布の 2d ポイントとその中のいくつかの外れ値) がある場合、このデータを使用して libsvm をトレーニングする方法と、結果モデルの精度を推定する方法です。

4

1 に答える 1

1

1) LIBSVM (C/C++) のトレーニング セットの 1 行は次のようになります (スパース データ形式と呼ばれます)。

ラベル 1:値 1 2:値 2 .....

(各行は '\n' 文字で終了します)

1 クラスの場合でもラベル列を提供する必要があります。任意の数になる可能性があるというだけです。LIBSVM は、トレーニング プロセス中にそれを無視します。これにより、読み取りエラーが解消されます。

2) おもちゃのデータの正確さについて、「nu」と「g」のパラメーターで相互検証を行いましたか? これらは、1 クラス SVM モデルのハイパーパラメーターです。カーネルタイプをいじることもできます。トレーニング セット、テスト セット、または検証セットの 50% でしたか?

3) 1 クラス SVM は本質的に高次元で密度推定を行うため、トレーニング セットのすべてのポイントは超球上または超球内に収まる必要があり、それらはすべて単一のクラスに属している必要があります。ここを参照することをお勧めします。モデルの精度を推定するには、外れ値のないトレーニング セットを構築し、外れ値をテスト ポイント (円の内側に属するいくつかのポイントを含む場合もあります) としてフィードする方法を見つける必要があります。これが不可能な場合は、クラスタリングなどの異常値検出の他の手段に頼る必要があります。幸いなことに、文献には強力なクラスタリング アルゴリズムがあります。

4) データセットは 2 次元であるため、最初にそれらをプロットして、データセットと外れ値について理解することは難しくありません。

于 2012-10-17T05:59:04.053 に答える