これは本当に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_test
とX_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するのに困るでしょう。
私は外れ値検出の専門家ではありませんが、それは価値があるかもしれません。どのような種類のデータを分類しようとしていますか?私が与えることができる1つのヒントは、非常に高い次元のデータ(多くの列/機能)がしばしばうまく機能しないことです。できるだけ少数の「列」で分類を行うようにしてください。 – TinkerTank
私は船の方向、スピードなどのデータをボートから分類したいと思っていますが、それらの応答を見てからは、scikit-learnによって効率的だと言われる隔離森林アルゴリズムを試してみます –