線形分離性のテスト


20

高次元で2クラスデータセットの線形分離性をテストする方法はありますか?私の特徴ベクトルの長さは40です。

ロジスティック回帰実験を常に実行し、ヒット率と誤警報率を決定して、2つのクラスが線形に分離可能かどうかを判断できることはわかっていますが、それを行うための標準的な手順が既に存在するかどうかを知ることは有益です。



分離性をプロットすると便利です。x=誤分類されたポイント分離平面に垂直、y =累積損失(x)。(サンプルプロットについては、svmタグとデータ視覚化タグを使用して新しい質問を試してください。)
denis

3つのクラスの問題はどうですか?3+クラスの問題はすべて非線形ですか?
ロージー

回答:


3

おそらく、サポートベクターマシン(SVM)がおそらく探しているものです。たとえば、線形RBFカーネルを備えたSVMは、フィーチャをより高次元の空間にマップし、線形超平面によってクラスを分離しようとします。これは、アイデアを示す素敵な短いSVMビデオです。

SVMを機能選択用の検索方法(ラッパーモデル)でラップし、機能のいずれかがクラスを線形に分散できるかどうかを確認することができます。

LIBSVMMSVMPack、およびScikit-learn SVMなど、SVMを使用するための興味深いツールが多数あります。


1
+1。まるでNikがSVMについて説明しているかのようで、聞いたことはありません。Rでは、(不思議な名前の)使用することができe1071、パッケージのsvmkernel="linear"実際対予測を見て。
ウェイン

1
SVMについて知っています。実際に各サンプルを分類せずに線形分離性をテストするためにそれらを使用できるとは知りませんでした。
ニック

4
@ウェイン:Nikは実際にはSVMを求めていません。私の答えで、なぜこれが彼の問題の解決策ではないのか説明します。
ラファエル14

2
線形RBFカーネル」は存在しません。
マーククレセン14

もちろん !意図されていたのは、データを線形に分離可能な空間にマップするRBFカーネルです。
soufanom

17

計算上、2セットの点が線形分離可能かどうかを判断する最も効果的な方法は、線形計画法を適用することです。GLTKはその目的に最適であり、ほとんどすべての高級言語がR、Python、Octave、Juliaなどのインターフェースを提供しています。

SVMの使用を示唆する回答に関して

SVMの使用は、次の2つの理由で線形分離性を検証するための次善のソリューションです。

  1. SVMはソフトマージン分類子です。つまり、実際には可能であっても、完全に分離していない分離平面に線形カーネルSVMが落ち着く可能性があります。その後、エラー率をチェックすると0にならず、2つのセットが線形分離可能ではないと誤って結論付けられます。この問題は、非常に高いコスト係数Cを選択することで軽減できますが、計算コストが非常に高くなります。

  2. SVMは最大マージン分類子です。つまり、アルゴリズムは、2つのクラスを可能な限り離して、2つのクラスを分離している分離平面を見つけようとします。繰り返しますが、これは線形分離可能性の問題への回答に関係のない何かを計算するため、不必要に計算作業を増加させる機能です。


ポイントAとBのセットがあるとしましょう:

ここに画像の説明を入力してください

次に、次の条件で0を最小化する必要があります。

(以下のAはマトリックスであり、上からのポイントのセットではありません)

ここに画像の説明を入力してください

「0を最小化する」とは、セットが線形分離可能かどうかを調べる必要がないため、実際に目的関数を最適化する必要がないことを意味します。

最後に(ここに画像の説明を入力してください)は分離面を定義しています。


ここに画像の説明を入力してください

Rの実際の例や数学の詳細に興味がある場合は、これをチェックてください。


3
SVMはソフトマージン分類子です...ハードマージンSVMを使用する場合を除きます。ただし、SVMを使用することは、大砲でハエを撃つようなものです。
マーククレセン14

それは正しいです-ただし、SVMライブラリの多く(またはおそらく大部分)はこの選択を提供していません
ラファエル14

2
C

0

線形パーセプトロンは、解が存在する場合にそれを見つけることが保証されています。このアプローチは、大きな次元では効率的ではありません。計算上、2セットのポイントが線形分離可能かどうかを判断する最も効果的な方法は、@ Raffaelが述べた線形プログラミングを適用することです。

簡単な解決策は、パーセプトロンを解くことです。Matlabでパーセプトロンを使用して解決する例のコードはこちら

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.