AlteryxでSVM
こんにちは、小澤です。
今回はAlteryxのSVMを利用してみたいと思います。
SVMとは
SVM(Support Vector Machine)とは機械学習でよく利用される手法の1つです。 線形の二値分類を行う手法ですが、カーネルトリックを利用することで非線形の分類にも利用することができます。
SVMの特徴としてはマージン最大化という考えに基づいて分類を行います。 例えば下の図のような2次元の特徴で表される、oとxに分類したいようなデータがあるとします。
このデータを線形分類する(直線を引いてoのグループとxのグループに分ける)場合、線の引き方にはいろいろな方法が考えられます。
ここで重要になってくるのが予測性能です。 機械学習では今あるデータを完璧に分類するのではなく、これからやってくる未来のデータに対してどれだけ正確に分類が行えるかが鍵となります。 SVMのマージン最大化の考えでは、分類する直線を引いた時に、その直線に最も近いoとxの点が直線から最も遠くなるような直線を選びます。
この直線をどのように求めるかについては、少々複雑な計算が必要になります。 今回は上記の概要にとどめますので、詳細に関しては本記事の最後に記載する参考文献に参照ください。
ソフトマージンSVM
先ほどの例では全てのデータが綺麗に分離できていました。 しかし、実際のデータでは多くの場合直線で綺麗に分離することはできません。
そこでこのような状況をどの程度許容するかということを表すスラッグ変数というものを導入します。 スラッグ変数についての詳細も参考文献を参照ください。 この値は利用者が決めるハイパーパラメータと呼ばれる値なので、SVMのライブラリなどではCというパラメータで渡してやることになります(厳密にはCパラメータはスラッグ変数そのもではなく式変形などによって導出される値になります)。
カーネルトリック
SVMは通常線形での分類を扱いますが、このカーネルトリックというものを利用することで、非線形の分類も可能になります。 このカーネルトリックを使うことで"データをより高次元の空間に飛ばすことで線形分離可能にする"という説明が一般によく言われる解説になります。
こちらに関してはなぜこのようなことが可能なのかやSVMでそれが利用できる理由などはここまでと同様割愛させていただきます。 今回はこんなこともできる程度に捉えておいてください。
AlteryxでSVMを利用する
AlteryxでのSVMの利用は非常に簡単に行えます。 Support Vector Machineツールを利用するのみです。
実際に利用したワークフローは以下のようになります。
ほとんどの項目は他の機械学習を使う際と同じ手順となっています。 今回もUCIにあるirisを利用しています。
今回のフローはCreate Samplesツールで学習データとテストデータを70%, 30%に分け、学習データを利用してSVMのモデルを作成しています。 その後テストデータでスコアの予測を行い指標をまとめています。
SVMの設定はほぼデフォルトの状態を利用しています。
Model Customization(optional)のタブでSpecify Model Parameters...にチェックを入れるとハイパーパラメータやカーネルの選択も可能になっています。
これらの項目は{e1071}というRのライブラリのsvm関数の引数に対応しています。 Rの使い方に関しての詳細には立ち入りませんが、公式ドキュメント(PDF)の該当する関数のkernelなどの引数の説明を参照してください。
今回はこのSpecify Model Parameters...にはチェックを入れずにデフォルトのままで利用しています。
作成したモデルに関する情報は以下のようになります。
Model Summaryでは、モデル作成時に利用した関数の情報が記載されています。 こちらの内容はRでの関数の呼び出し方に関する知識も必要になるため詳細は割愛しますが、デフォルトではRadialというカーネルが利用され、これには先ほど紹介したCパラメータの他にカーネル固有のGammaパラメータが必要になります。 今回の例だとそれぞれ1, 0.25という値を利用しています。
その下にはModel Performanceという項目で混同行列が表示されています。 その下の注意書きにもあるようにあくまでも学習データに対する結果なので参考程度にとどめておくのがいいでしょう。
その下には分離平面に関するグラフが表示されています。
最後にテストデータに対する予測結果を確認してみます。
正解がversicolorであるものが1件だけ、virginicaと予測されていますが、それ以外は正解していることがわかるかと思います。
終わりに
今回はAlteryxでSVMを利用してみました。 決定木やロジスティック回帰などと比較して計算が複雑な手法ではありますが、精度の高い結果が欲しい時などに検討してみると分析の幅が広がるかと思います。