SnapCrab_2016-12-25_14-26-36_No-00

こんにちは!大学教員ブロガーのねこしです。

データ解析の手順』における「5.回帰モデルもしくはクラス分類モデルを作る」についてです。なお実行するためのプログラムについてはこちらをご覧ください。

公開中のプログラム・コード一覧(実用的かつ実践的なデータ解析・機械学習・データマイニング) : 大学教授のブログ (データ分析相談所)

サポートベクターマシン (Support Vector Machine, SVM) を多クラス分類に応用する話です。SVMについてはこちらをご覧ください。

サポートベクターマシン (Support Vector Machine, SVM) の実用的かつ実践的な方法 : 大学教授のブログ (データ分析相談所)

多クラス分類用のSVMのプログラムを簡単に入手できます!

それぞれのURLからお求めください!

MATLAB: note SPIKE AnyPay

R: note SPIKE AnyPay

Python: note SPIKE AnyPay

多クラス分類用のサポートベクターマシン (Support Vector Machine, SVM)

基本的にSVMは二つのクラスを分類する手法です。なので目的変数の値は1もしくは-1のみとなります。ただ、3つ以上のクラス(カテゴリー)を分類したいときもありますよね。LDAQDANBkNN決定木RFであればそのような多クラス分類をすることは簡単ですが、SVMでは少し工夫が必要です。

SVMを多クラス分類に応用する方法は、大きく分けて2つあります。

1. 一つのクラスとその他のクラスとの間で作るSVMモデルを、クラスの数だけ作成する

たとえばクラスが3つ A, B, C あるときに、Aと(B・C)との間でSVMモデルを作ります。つまり、Aのサンプルを1、Bのサンプルを-1、Cのサンプルを-1として、SVMモデルを構築するわけです。これを、Bと(A・C)との間でも作り、Cと(A・B)との間でも作ります。クラスの数だけ全通りSVMモデルを構築するわけです。新しいサンプルのクラスを推定するときは、構築した複数のSVMモデルを使って、新しいサンプルがどのクラスに属するかを多数決で判定します。

SVMモデルの数は、クラスの数と等しくなります。

2. 2つのクラスの間で作るSVMモデルを、すべてのクラスの組み合わせで作成する

クラスA, B, Cがあるときは、AとBとの間でSVMモデルを作り、BとCとの間でSVMモデルを作り、CとAとの間でSVMモデルを作ります。2つのクラスのすべての組み合わせの間でSVMモデルを構築するわけです。新しいサンプルのクラスを推定するときは、構築した複数のSVMモデルを使って、新しいサンプルがどのクラスに属するかを多数決で判定します。

SVMモデルの数は、(クラスの数)×(クラスの数-1) / 2 になります。クラスの数が多いときは、モデルの数が多くなり過ぎるので向きません。

どちらを使えばいいの?

どちらの方法にしてもSVMの性能は変わりません。ただクラスの数が多くなると、2つ目の方法ではSVMモデルの数が多くなってしまうので注意してください。ぜひ多クラスのデータを扱うときもSVMを活用してください!

データ解析の質問 募集中!

こちらへお願いします!

ご案内。

オススメ記事セレクション。

twitterでも発信中。

この記事に興味を持っていただけましたら、ぜひフォローをお願いします!


無料メルマガでブログにない情報を配信中。

データ解析・分析に興味がありましたらぜひ登録をお願いします!
無料メルマガの登録はこちら