機械学習アルゴリズム サポートベクターマシンとPython(基本編)

皆さん、こんにちは。

南波真之(なんばさねゆき)と申します。

私はエンジニアではない文系の人間ですが、Pythonの可能性やデータ分析を使った仕事に興味があります。

前回は機械学習の分類について取り上げてきました。分類というのは、機械学習におけるデータの分析方法の1つで、その名の通り学習したデータをもとにして新たなデータからどのカテゴリーに該当するのかを予測をするという手法です。例えば、天気予報(晴れ、くもり、雨など)もこの分類です。Pythonでは、scikit-learnというライブラリーで実現することができます。

ご興味ある方はぜひご覧ください。

(参考: データ分析学習コラム

さて今回は、分類の続きです。具体的な手法の1つにサポートベクターマシンというのがあります。私が勉強している『Pythonによるあたらしいデータ分析の教科書(翔泳社)』の、P226.〜P.234の部分です。サポートベクターマシンは最初の理解が大変でしたので、まずは基礎編として考え方や概念について取り上げていきます。

目次

サポートベクターマシンとは

サポートベクターマシン(Support Vector Machine:SVM)というのは、機械学習のアルゴリズムのことで、今回取り上げる分類だけでなく、回帰という手法にも利用できる方法です。教師あり学習を用いたパターン認識モデルで、発表されたのは1963年でした。その後、コンピュータや機械学習が盛んになるにつれて非常によく使われるようになってきました。

単純化するとこのようなイメージになります。いくつかのデータがある中で、2つのクラスに分類することを考えます。すると、青色とオレンジ色のデータを区切る境界線を引くことになります。

すると、様々な角度での境界線が引けることになりますが、サポートベクターマシンではこの境界線の引き方にルールがあります。境界線とそれに最も近い各クラスのデータの間の距離が最も大きくなるような境界線(決定境界線)を引くということです。

その際の各クラスのデータをサポートベクターと呼び、クラス間のサポートベクターの距離をマージンと呼びます。このマージンを最大にすることで、決定境界線がサポートベクターから離れるためにデータの差異を吸収して汎用性をもたせることができます。

ここまでをまとめると、サポートベクターマシンでは、このマージンを最大化しつつ、誤分類を減らしていくという進め方をしていきます。

このマージンの定義についてもう少し深堀りをしていきます。

マージンには、ハードマージンとソフトマージンという考え方があります。

まず、ハードマージンというのは、サポートベクターと決定境界線を用いて分かりやすくはっきりとクラスを分類しようとする方法です。分かりやすくて良いのですが、欠点があります。それは、外れ値が存在すると境界が大きく変わってしまうことです。データ分析においては、この外れ値の扱いをどうするかはとても重要で、ハードマージンでは外れ値の影響を直接受けてしまうため汎用性に欠けます。

一方のソフトマージンというのは、外れ値についてもある程度許容することで汎用性をもたせた方法です。

現実的に、ハードマージンのように分離したデータになっているケースは少ないため、汎用性の高いソフトマージンが利用される事が多いようです。

その他、非線形分離を行う際に使用するカーネルトリック(Kernel Trick)という手法もあり、データ間の近さを定量化するカーネルを利用し、特徴量を高次元空間に変換することで対応する方法もあります。

サポートベクターマシンのメリットとデメリット

ここで、サポートベクターマシンのメリット・デメリットを紹介します。

メリット

  • データの次元が増加しても、精度が高い
  • 最適化するパラメーターが少ない
  • 非線形にも対応

デメリット

  • 学習データが増えてくると計算量が膨れ上がる
  • 2クラスの分類が基本的な使い方(他クラス分類も可能ではある)

サポートベクターマシンの意味合いを理解する

いかがでしたでしょうか。

今回は「サポートベクターマシン」という機械学習のアルゴリズムについて取り上げてきました。いきなりscikit-learnを使って見ても自分自身理解が追いつかなかったため、まずはサポートベクターマシン自体の考え方の理解を深めるために学習を進めました。次回は今回できた理解を元にして、scikit-learnを使って実際にプログラムをしていきたいと思います。

インターネット・アカデミーは、Python講座が充実しています。Python認定スクールにもなっているため質の高い知識を得ることができ、基礎学習の先にあるそれぞれの目標を目指していくためには良い場所となります。

よく、「プログラミングは独学でもなんとかなる」という情報もありますが、新しいことを学んでいく際の近道は「プロに教えてもらうこと」だと思います。

インターネット・アカデミーはキャリアサポートも充実しており、一人ひとりに専任のキャリアプロデューサーがサポートしてくれるため中途半端になることがありません。

ご興味ある方は各講座のページを覗いてみてください。無料カウンセリングもできます。

Pythonの基礎からDjangoフレームワークを使ったWebアプリケーションを作りたい方向けの「Python講座」

Pythonを活用したAIプログラミング、機械学習を実装したい方向けの「AIプログラミング講座」

良い記事だなって思ったら、是非シェアをお願いします!
  • URLをコピーしました!
  • URLをコピーしました!
目次