「サポートベクターマシン」とは、データの中の関係をモデル化する方法の1つです。
サポートベクターマシンは、英語で Support Vector Machine なのですが、
発音の問題で、サポートベクトルマシンと書かれることがありますが、同じものを指しています。
本記事では、サポートベクターマシンに統一して書いていきます。
下で示すように、サポートベクターマシンは、英語を略して SVM とも書かれます。
コードの中では、以下の略語がよく使われます。
- サポートベクターマシン;SVM ( Support Vector Machine )
- サポートベクター分類;SVC ( Support Vector Classification )
- サポートベクター回帰;SVR ( Support Vector Regression )
サポートベクターマシンは、線形的な回帰だけでなく、
非線形な関係の回帰問題にも適用することが可能です。
「線形」とは、データのある変数が増えたら別の変数も直線的に増える(または減る)という状態を指します。
「非線形」とは、線形でない状態を指します。
わかりやすい例としては、2次関数や指数関数などがあります。
「回帰」とは、データを式で表現することを言います。
サポートベクターマシンを使った回帰分析(サポートベクター回帰;SVR)を行うことで、データの性質を表現した数式が得られます。
その数式を「(サポートベクターマシン)回帰直線」や「(サポートベクターマシン)回帰モデル」と呼びます。
- サポートベクター回帰の求め方は?
- サポートベクター回帰を行うライブラリは?
- サポートベクターマシンを学ぶためのおすすめの本は?
と思われる方も多いかと思います。
そこで本記事では、
- サポートベクター回帰を Python で行う方法
- サポートベクター回帰を行うライブラリ
- サポートベクター回帰モデルのサンプルコード・実装
- サポートベクター回帰を学ぶのにおすすめの本
などについて、サンプルコードを交えながら、わかりやすくまとめます。
【サポートベクターマシン回帰 Python】サポートベクター回帰(SVR)とは?SVRを実行できるライブラリ、SVRのサンプルコードと実装など、サポートベクターマシンを学びたいあなたにおすすめの本もご紹介します【scikit-learn】
サポートベクターマシン回帰(SVR)のやり方とは
サポートベクターマシン回帰のやり方の全体像は以下になります。
(1), データの準備
(2), サポートベクター回帰(SVR)の実行
(3), 結果の可視化
の3ステップになります。
以下でそれぞれについて解説していきますね。
サポートベクター回帰のためのデータ準備
サポートベクター回帰は、2つ以上の変数の関係を調べる方法です。
サポートベクター回帰分析では、2つ以上の変数を含んだデータが必要です。
例えば2変数であれば、
- 身長と体重
- 気温と売り上げ
などの値のペアのデータとなります。
- サポートベクター回帰分析では、分析に適した形式のデータが必要
ということになります。
これを読まれているあなたは、サポートベクター回帰を行ってみたいデータをお持ちかもしれません。
そのデータを使われて構いません。
この記事では、人工データを使って、サポートベクター回帰を行ってみたいと思います。
Python なら、サクッとサポートベクター回帰を実行できます。
サポートベクター回帰ができるライブラリがあるので、
細かいアルゴリズムをプログラミングしなくても、
サポートベクター回帰をラクに実行することができます。
以下でサポートベクター回帰の実装を説明しますね。
Python によるサポートベクター回帰のためのライブラリ sklearn とは?
Python でサポートベクター回帰分析は、
scikit-learn(サイキット・ラーン)
というライブラリパッケージを使うとサクッと実行できます。
scikit-learn は、無料で使える高性能ライブラリです。
サポートベクター回帰だけでなく、
その他の様々な統計解析なども実行できます。
使い慣れておいて損はないライブラリとなっています。
以下で scikit-learn を使って、
サポートベクター回帰分析を Python でサンプルコードを示しながら、実装したいと思います。
サポートベクター回帰モデルの作成・実装
実装の流れは以下になります。
(1), scikit-learn などの必要なライブラリをインポート
(2), データの準備(今回は人工データを使います)
(3), サポートベクター回帰分析の実行
(4), 結果の表示(今回はグラフで可視化します)
(1), scikit-learn などの必要なライブラリをインポート
ここで使っているライブラリは
「NumPy」は、データを扱いやすくするライブラリです。行列計算などを高速に行うことができます。
「matplotlib」は、グラフを表示するためのライブラリです。
「skearn」が、サポートベクター回帰を行うためのライブラリで、コードの中では「svm(サポートベクターマシン)」を使うことを示しています。
(2), データの準備(人工データの生成)
今回はデータを人口的にランダムに生成します。
気温と売上という2つの変数を生成します。
In[5]: 気温のデータは、500個のデータ(0から30までの実数)を生成しています。
(seed.rand(500)で0から1の間の数値をランダムに500個生成しています。
以下のような感じです↓
In[6]: 売上のデータは、気温データを使って、
以下の式で生成されています。
(売上)=2×(気温)+30 + ランダム数
「30 + ランダム数」の部分を見てみると以下の感じです↓
「10*seed.rand(500)」は、0から10の間の数値です。
「+ 30 +10*seed.rand(500)」は、30 から40 の間の数値が500個生成されていることがわかります。
これを平均すると、約 35.3となっています↓
なので、結局、データを生成するために使った数式は、
(売上)=2×(気温)+ 35.3
ということになります。
必要だった2つの変数(気温、売上)のデータがそろいました。
可視化して確かめてみるとと上の感じになります。
(3), サポートベクター回帰分析の実行
Python でサポートベクター回帰分析を行うには、
scikit-learn の svm モジュールを
使います。
In[15] まずサポートベクター回帰を行うためのオブジェクト(svr と名付けています)を作ります。
この時、線形カーネル(kernel = ‘linear’)を指定しています。
In[16] 生成したsvrオブジェクトの回帰メソッド(fitメソッド)を使い、サポートベクター回帰を実行しています。
fitメソッドはカッコの中に、2つの変数を指定します。
今回は、気温から売上を予測したいので、
fit( 気温、売上) の順番で指定します。
気温については、変数の次元を調整するために
kion.reshape(-1, 1)
としています。
kion[: , newaxis]
としてもオッケーです。
svm の fitメソッドの仕様に合わせるための処理となっています。
気温の次元は、500行0列の「ベクトル」ですが、
修正後は、500行1列の「行列」にしています。
(4), 結果の表示(グラフで可視化)
得られた直線の式を可視化しています。
直線がデータの傾向をよく再現しているのが見て取れます。
グラフの書き方については以下です↓
In[23] 直線を加えるために、点を大量にかくことで実現しています。
np.linspace で0から30までを500間隔で点を生成して、変数 kion_fit に代入しています。
ここでも次元を仕様に合うように変更しています。
生成したそれぞれの点(500点)について、
得られた直線の式を使って、売上の値を求めて、uriage_fit に代入しています。
これでサポートベクター回帰で求めた直線上の点(kion_fit, triage_fit)の500点のデータが得られたわけです。
このデータと最初のデータを同じグラフに表示すれば上の図になります。
サポートベクターマシンを学ぶのにおすすめの本とは
サポートベクターマシンの使い方のイメージはつかんでいただけたのではないでしょうか。
より高度な使い方をするには、
サポートベクターマシンのアルゴリズムや、様々なテクニックについて学ぶのがオススメです。
今回は、1番シンプルな例で直線的な回帰で、線形カーネルと用いました。
サポートベクター回帰は、非線形な傾向を持つデータの回帰も実行できます。
非線形な関係を表現するには、非線形カーネルやガウスカーネルなどを使う方法もあります。
このように、サポートベクターマシンをより詳しく学びたいあなたのには、以下の本がオススメです↓
サポートベクトルマシン (機械学習プロフェッショナルシリーズ)
パターン認識のためのサポートベクトルマシン入門
サポートベクターマシン入門
というわけで、本記事では、
- サポートベクター回帰を Python で行う方法
- サポートベクター回帰を行うライブラリ
- サポートベクター回帰モデルのサンプルコード・実装
- サポートベクター回帰を学ぶのにおすすめの本
などについて、サンプルコードを交えながら、わかりやすくまとめました。
こちらもございます↓
こちらもございます↓
『【ニューラルネットワーク Python】ニューラルネットワークとは?種類やモデル、仕組みを学習し、Python で入門・実装したいあなたは、サンプルコードなどもこちらをどうぞ【keras 入門】』