Support Vector Machine
概要
この演算子はSVM(サポートベクターマシン)学習者です。 Stefan RuepingによるmySVMの内部Java実装に基づいています。
詳細
この学習者は、Stefan RuepingによるサポートベクターマシンmySVMのJava実装を使用します。この学習方法は、回帰と分類の両方に使用でき、多くの学習タスクに高速なアルゴリズムと優れた結果を提供します。 mySVMは、線形または2次、さらには非対称の損失関数でも機能します。
この演算子は、ドット、放射状、多項式、ニューラル、ANOVA、epachnenikov、ガウスの組み合わせとmultiquadric含む様々なカーネルの種類をサポートしています。これらのカーネルタイプの説明は、パラメーターセクションに記載されています。
SVMの基本的な説明を次に示します。標準のSVMは入力データのセットを取得し、指定された各入力について、2つの可能なクラスのどちらが入力を構成するかを予測し、SVMを非確率的バイナリ線形分類器にします。 2つのカテゴリのいずれかに属するとマークされたトレーニングサンプルのセットが与えられると、SVMトレーニングアルゴリズムは、新しいサンプルを1つのカテゴリに割り当てるモデルを構築します。 SVMモデルは、空間内のポイントとしての例の表現であり、個別のカテゴリの例ができるだけ広い明確なギャップで分割されるようにマップされます。次に、新しい例が同じスペースにマッピングされ、ギャップのどちら側にあるかに基づいてカテゴリに属すると予測されます。
より正式には、サポートベクターマシンは、高次元または無限次元の空間で超平面または超平面のセットを構築し、分類、回帰、またはその他のタスクに使用できます。直感的には、一般にマージンが大きいほど分類器の一般化誤差が小さくなるため、クラスの最も近いトレーニングデータポイントまでの距離が最も大きい超平面(いわゆる機能マージン)によって適切な分離が実現されます。元の問題は有限次元空間で述べられるかもしれないが、判別する集合はその空間で線形に分離できないことがしばしば起こる。このため、元の有限次元空間をより高次元の空間にマッピングし、おそらくその空間での分離を容易にすることが提案されました。計算負荷を合理的に保つために、SVMスキームで使用されるマッピングは、カーネル関数K(x、y)で定義することにより、元の空間の変数に関してドット積を簡単に計算できるように設計されています問題に合わせて選択します。高次元空間の超平面は、その空間のベクトルとの内積が一定である点の集合として定義されます。
入力
- トレーニングセット (IOObject)この入力ポートには、ExampleSetが必要です。この演算子はノミナル属性を処理できません。数値属性を持つデータセットに適用できます。したがって、多くの場合、この演算子を適用する前に、Nominal to Numerical演算子を使用する必要があります。
出力
- モデル(モデル)SVMモデルは、この出力ポートから提供されます。これで、このモデルを非表示のデータセットに適用できます。
- サンプルセット(IOObject)入力として指定されたExampleSetは、このポートを介して出力に変更せずに渡されます。これは通常、別の演算子で同じExampleSetを再利用するため、または結果ワークスペースでExampleSetを表示するために使用されます。
- 推定パフォーマンス(パフォーマンスベクトル)このポートは、このモデルの統計的パフォーマンスの推定値を提供するSVMモデルのパフォーマンスベクトルを提供します。
- 重み(平均ベクトル)このポートは属性の重みを提供します。これは、ドットカーネルタイプが使用されている場合にのみ可能です。他のカーネルタイプでは不可能です。
パラメーター
- kernel_typeカーネル関数のタイプは、このパラメーターを介して選択されます。次のカーネルタイプがサポートされています: ドット、ラジアル、多項式、ニューラル、anova、epachnenikov、ガウスの組み合わせ、multiquadric
- dot:ドットカーネルは、k(x、y)= x * yで定義されます。つまり、xとyの内積です。
- radial:ラジアルカーネルはexp(-g || xy || ^ 2)で定義されます。gはガンマで、カーネルガンマパラメーターで指定されます。調整可能なパラメーターガンマは、カーネルのパフォーマンスに大きな役割を果たしており、目前の問題に注意深く調整する必要があります。
- polynomial:多項式カーネルは、k(x、y)=(x * y + 1)^ dで定義されます。dは多項式の次数であり、カーネル次数パラメーターで指定されます。多項式カーネルは、すべてのトレーニングデータが正規化される問題に適しています。
- neural:ニューラルカーネルは、2層のニューラルネットtanh(ax * y + b)によって定義されます。ここで、aはアルファで、bは切片定数です。これらのパラメーターは、カーネルaおよびカーネルbパラメーターを使用して調整できます。アルファの一般的な値は1 / Nです。Nはデータ次元です。 aとbのすべての選択が有効なカーネル関数につながるわけではないことに注意してください。
- anova:anovaカーネルは、exp(-g(xy))の総和の累乗dで定義されます。ここで、gはガンマ、dは度です。ガンマと度は、それぞれカーネルガンマとカーネル度パラメーターによって調整されます。
- epachnenikov:epachnenikovカーネルは、-1〜1のuに対してこの関数(3/4)(1-u2)であり、その範囲外のuに対してゼロです。カーネルsigma1とカーネル次数の2つの調整可能なパラメーターがあります。
- gaussian_combination:これはガウスの組み合わせカーネルです。調整可能なパラメーターkernel sigma1、kernel sigma2、kernel sigma3があります。
- multiquadric:multiquadricカーネルは、|| xy || ^ 2 + c ^ 2の平方根で定義されます。調整可能なパラメーターkernel sigma1およびkernel sigma shiftがあります。
範囲:選択
- kernel_gammaこれは、SVMカーネルパラメーターガンマです。これは、 カーネルタイプパラメーターが放射状またはanovaに設定されている場合にのみ使用できます。 範囲:実数
- kernel_sigma1これはSVMカーネルパラメータsigma1です。これは、 カーネルタイプパラメーターがepachnenikov 、 ガウスの組み合わせまたはmultiquadricに設定されている場合にのみ使用できます。 範囲:実数
- kernel_sigma2これはSVMカーネルパラメータsigma2です。これは、 カーネルタイプパラメータがガウスの組み合わせに設定されている場合にのみ使用できます。 範囲:実数
- kernel_sigma3これはSVMカーネルパラメータsigma3です。これは、 カーネルタイプパラメータがガウスの組み合わせに設定されている場合にのみ使用できます。 範囲:実数
- kernel_shiftこれは、SVMカーネルパラメーターシフトです。これは、 カーネルタイプパラメーターがmultiquadricに設定されている場合にのみ使用できます。 範囲:実数
- kernel_degreeこれは、SVMカーネルパラメータの次数です。これは、 カーネルタイプパラメーターがPolynomial 、 anovaまたはepachnenikovに設定されている場合にのみ使用できます。 範囲:実数
- kernel_aこれはSVMカーネルパラメータaです。これは、 カーネルタイプパラメーターがニューラルに設定されている場合にのみ使用できます。 範囲:実数
- kernel_bこれはSVMカーネルパラメータbです。これは、 カーネルタイプパラメーターがニューラルに設定されている場合にのみ使用できます。 範囲:実数
- kernel_cacheこれはエキスパートパラメータです。カーネル評価用のキャッシュのサイズをメガバイト単位で指定します。 範囲:実数
- Cこれは誤分類の許容範囲を設定するSVM複雑度定数であり、Cの値を大きくすると「ソフトな」境界が可能になり、値を低くすると「ハードな」境界が作成されます。大きすぎる複雑度定数は、過剰適合につながる可能性がありますが、小さすぎる値は、過度に一般化される可能性があります。 範囲:実数
- 収束_epsilonこれはオプティマイザーのパラメーターです。 KKT条件の精度を指定します。 範囲:
- max_iterationsこれはオプティマイザーのパラメーターです。指定された反復回数の後に反復を停止することを指定します。 範囲:整数
- scaleこれはグローバルパラメータです。オンにすると、サンプル値がスケーリングされ、スケーリングセットがテストセット用に保存されます。 範囲:ブール
- L_pos肯定的な例のSVM複雑度定数の係数。このパラメーターは損失関数の一部です。 範囲:実数
- L_neg負の例のSVM複雑度定数の係数。このパラメーターは損失関数の一部です。 範囲:実数
- epsilonこのパラメーターは、非感度定数を指定します。予測が真の値に近い場合、損失はありません。このパラメーターは損失関数の一部です。 範囲:実数
- epsilon_plusこのパラメーターは損失関数の一部です。正の偏差に対してのみイプシロンを指定します。 範囲:実数
- epsilon_minusこのパラメーターは損失関数の一部です。負の偏差に対してのみイプシロンを指定します。 範囲:実数
- balance_costチェックすると、クラスの相対サイズにCposとCnegを適合させます。 範囲:ブール
- quadratic_loss pos正の偏差には2次損失を使用します。このパラメーターは損失関数の一部です。 範囲:ブール
- quadratic_loss_neg負の偏差に2次損失を使用します。このパラメーターは損失関数の一部です。 範囲:ブール
チュートリアルプロセス
SVMの使用開始
これは、SVMオペレーターを使用して開始する簡単なプロセス例です。 Retrieveオペレーターは、「ゴルフ」データセットをロードするために使用されます。ノミナルから数値への演算子を適用して、ノミナル属性を数値形式に変換します。 SVMオペレーターはノミナル属性を取得できず、数値属性のみを使用して分類できるため、この手順が必要です。次に、SVMオペレーターから生成されたモデルが「ゴルフテストセット」データセットに適用されます。このデータセットにも、名義から数値への演算子が適用されました。テストとトレーニングのデータセットは同じ形式である必要があるため、これが必要です。このモデルの統計パフォーマンスは、Performanceオペレーターを使用して測定されます。これは非常に基本的なプロセスです。この演算子を使用してより良い結果を得るには、SVMをより深く理解することをお勧めします。サポートベクターマシン(SVM)は、一般的な分類手法です。ただし、SVMに慣れていない初心者は、簡単ではあるが重要な手順を欠くため、満足のいく結果が得られないことがよくあります。
「m」番号を使用してmカテゴリー属性を表すことをお勧めします。 「m」番号の1つだけが1で、他の番号は0です。たとえば、Outlook {overcast、sunny、rain}などの3つのカテゴリの属性は、(0,0,1)、(0,1 、0)、および(1,0,0)。これは、Nominal to Numerical演算子でコーディングタイプパラメータを「ダミーコーディング」に設定することで実現できます。一般に、属性の値の数が多すぎない場合、このコーディングは単一の数を使用するよりも安定している可能性があります。
SVMからより正確な分類モデルを取得するには、スケーリングが推奨されます。スケーリングの主な利点は、大きな数値範囲の属性が小さな数値範囲の属性を支配することを回避することです。別の利点は、計算中の数値の問題を回避することです。カーネル値は通常、線形カーネルや多項式カーネルなどの特徴ベクトルの内積に依存するため、大きな属性値は数値の問題を引き起こす可能性があります。トレーニングとテストデータセットの両方でスケーリングを実行する必要があります。このプロセスでは、スケールパラメータがチェックされます。スケールパラメータのチェックを外して、プロセスを再度実行します。この時間は、スケーリングにかかる時間よりもはるかに時間がかかることがわかります。
この演算子からより良い結果を得るには、カーネルタイプと各カーネルタイプに関連付けられたさまざまなパラメーターを十分に理解する必要があります。この例のプロセスでは、ガウス結合カーネルが使用されました。すべてのパラメーターはデフォルト値で使用されました。このモデルの精度はわずか35.71%でした。より良い結果を得るには、さまざまなパラメーターを変更してみてください。パラメーターCを0ではなく1に変更すると、モデルの精度が64.29%に上がることがわかります。したがって、パラメーターを少し変更するだけで、全体的な結果に大きな影響を与えることがわかります。したがって、使用中のカーネルタイプのパラメーターを十分に理解する必要があります。同様に、さまざまなカーネルタイプを十分に理解し、ExampleSetに最適なカーネルタイプを選択することも重要です。このサンプルプロセスで多項式カーネルを使用してみてください(パラメーターCを0に設定します)。すべてのパラメーターのデフォルト値で、精度は約71.43%であることがわかります。パラメーターCの値を0ではなく1に変更します。これにより、ガウス結合カーネルを使用したモデルの精度が向上しますが、ここではモデルの精度が低下することがわかります。
ほとんどのパラメーターにデフォルト値を使用しました。より正確な結果を得るには、これらの値を慎重に選択する必要があります。通常、相互検証などの手法は、検討中のExampleSetのこれらのパラメーターの最適な値を見つけるために使用されます。