2016-12-08 26 views
0

私はPython scikit-learnでワンクラスSVMを使用しようとしています。 しかし、X_outliersn_error_trainn_error_testn_error_outliersなどは、このaddressにあるものは何か分かりません。 Xがランダムに選択され、データセットの一部ではないのはなぜですか?ワンクラスSVMを理解しようとしています

Scikit-learn "documentation"は私を大きく助けませんでした。また、インターネット上での例がほとんど見つかりませんでした。

データの数が少ない場合には外れ値検出にOne-class SVMを使用できますか?トレーニングセットに異常があるかどうかわかりません。

1クラスSVMは、教師なし異常値検出(here

1クラスSVMは、外れ値検出法ではなく、 ノベルティ検出法(here

ありますこれは可能ですか?

+0

私は外れ値検出の専門家ではありませんが、それは価値があるかもしれません。どのような種類のデータを分類しようとしていますか?私が与えることができる1つのヒントは、非常に高い次元のデータ(多くの列/機能)がしばしばうまく機能しないことです。できるだけ少数の「列」で分類を行うようにしてください。 – TinkerTank

+0

私は船の方向、スピードなどのデータをボートから分類したいと思っていますが、それらの応答を見てからは、scikit-learnによって効率的だと言われる隔離森林アルゴリズムを試してみます –

答えて

1

この1クラスSVMは、エントリがクラシファイアが訓練されたエントリと類似しているか、類似していないかを判断する分類器です。

  • 1)トレーニングセット:

    スクリプトは三組を生成します。

  • 2)学習セットと同様のエントリのテストセット。
  • 3)トレーニングセットとは異なるエントリのテストセット。

エラーは、誤って分類された各セットのエントリの数です。あれは;これは、似ている(訓練セット1と2の)訓練セットと似ていない、あるいは、似ていない(訓練セット3)訓練セットと類似している分類子であった。

  • X_outliers:列車セット内の要素の分類エラーの数(1):これは、3
  • n_error_trainに設定されています。
  • n_error_test:テストセット(2)の要素の分類エラーの数。
  • n_error_outliers:outlier-set(3)の要素の分類エラーの数。
5

これは本当にPythonの質問ではなく、SVMの理解の質問のほうが多いです。典型的なSVMは、二分類であり、2つのフェーズ持ってしようとしているアルゴリズムである:それは変数と属性間関係を学びます、

ファーストを。たとえば、アルゴリズムのトマトピクチャとバナナピクチャを表示し、バナナかトマトかを毎回知らせ、各ピクチャの赤いピクセル数をカウントするように指示します。正確にすると、SVMはとなります。は、赤いピクセルがたくさんある写真がバナナよりもトマトになる可能性が高いことを意味します。

次に、と予測されます。あなたは、彼にそれが何であるかを伝えることなく、トマトまたはバナナの写真を彼に示します。彼は以前に訓練されていたので、赤いピクセルを数え、それがどれであるかを知るでしょう。

1クラスのSVMの場合、少し単純ですが、基本的にトレーニングフェーズでは、すべて類似しているはずの変数が表示されます。あなたは彼に、「これはトマトであり、これ以外のものはトマトではない」と言うトマト写真の束を示しています。

リンク先のコードは、SVMの学習能力をテストするためのコードです。変数X_trainを作成します。次に、X_train(トマト写真)と非常に異なるX_outliersに似ている他の2つのセット、X_testを生成します。

次に、彼にX_trainという変数を表示し、SVMに "これは私たちが探している種類の変数です"と、clf.fit(X_train)という行で示します。これは、私の例では、彼にたくさんのトマト画像を表示することと同等であり、SVNは「トマト」が何であるかを学ぶことです。

そして、あなたが彼にあなたの他の二つのセット(X_testX_outliers)を示す、と彼は、彼らがX_trainかに似ていると考えるかどうか彼に尋ねることによって、新しい変数を並べ替えるためにあなたのSVMの能力をテストします。あなたはpredictファンクションでそれを尋ねると、セット内のすべての要素について「1」すなわち「はいこれはX_trainと同様の要素です」または「-1」、つまり「この要素は非常に異なっています。

理想的なケースでは、SVMはX_testでは「1」、X_outliersでは「-1」のみとなります。しかし、このコードは、これが必ずしも当てはまるとは限りません。変数n_error_は、SVMの間違いをカウントするために、の要素を「X_train」および「X_outliers」の要素と「類似している」と誤って分類すると、「X_trainと似ています」と表示されます。 (n_error_train

機械学習へようこそSVMの主な難点は、SVMがクラス間の識別を効率的に習得できるようにトレーニングセットを設定することですあなたが彼に見せてくれる画像の数を慎重に設定する必要があります(私の例では、コード内の赤いピクセル数です。変数)、それは別の質問です)。コード内で、Xセットの有界ではあるがランダムな初期化は、たとえば、実行中に、X_trainのSVMを、-0.3と0の間の値が大量に設定されている間にランダムに初期化されても、 0.3と0.3です(たとえば、1セットあたりの要素数が少なければ、たとえば5となり、[-0.2 -0.1 0 -0.1 0.1]になります)。したがって、SVMに値0.2の要素を表示すると、X_train要素が負の値を持つ可能性が高いことがわかったため、X_trainに関連付けるのが問題になります。 これは、あなたが彼を訓練するときにあなたのSVMにいくつかの黄色のトマトを示すのと同じです。それで彼に後で本当に赤いトマトを見せたら、それはトマトとしてそれをclasifyingするのに困るでしょう。

+0

美しく説明されています! –

関連する問題