Verticaでは、新バージョンの8.1から機械学習への対応が強化されました。この記事では、サポートベクターマシン(Support Vector Machine:以降はSVMと表記します)アルゴリズムへの対応についてご紹介します。

SVMとは

SVMは、機械学習における教師あり学習のパターン認識アルゴリズムの一つで、二値分類に利用されます。
以降では、サンプルデータを例にVerticaでSVMを利用する手順をご紹介します。

VerticaでSVMを利用する手順

サンプルスキーマ、データのダウンロード

以下URLよりサンプルファイルをダウンロードします。
https://github.com/vertica/Machine-Learning-Examples

画面右上にある「Clone or Download」をクリックします。


展開される画面の右下にある「Download ZIP」をクリックしてファイルを保存します。

サンプルスキーマの作成、データのロード

ダウンロードしたファイルをVerticaサーバ上の任意のディレクトリに転送します。
転送後、以下コマンドでファイルを解凍します。

解凍後に以下コマンドでサンプルスキーマとテーブルの作成、データロードを実行します。

本記事で使用するmtcarsテーブルは教師データ(mtcars_train)とテストデータ(mtcars_test)しかありません。後述手順の「実装」で未知のデータを予測するため、テストデータの一部を未知のデータとして別テーブル(mtcars_predict)に移動します。

SVMモデルの作成

今回の例では、mtcarsというサンプルデータを利用します。このデータは、1974年のMotor Trend US誌から抽出されたもので、燃料消費量と32の自動車(1973-74モデル)の自動車設計と性能の10の側面から構成されています。

mtcarsテーブルの列名と内容

列名内容
car_model車種
mpgマイル/(米)ガロン
cylシリンダ数
dispディスプレースメント(cu.in.)
hp総馬力
dratリアアクスル比
wt重量(1000ポンド)
qsec1/4マイルタイム
vsV / S
amトランスミッション(0=オートマ、1=マニュアル)
gear前進ギアの数
carb気化器の数

初めに、mtcars_trainテーブルにロード済みのデータを利用して、svm_classという名前のSVMモデルを作成します。今回の例では、am(伝送タイプ、0=オートマ、1=マニュアル)の値を予測するモデルを作成します。

【参考】パラメータの意味

パラメータ名意味
svm_classモデル名
mtcars_train教師データとして利用するテーブル
am目的変数(予測したい列)
cyl, mpg, wt,hp説明変数(予測に利用する列)
exclude_columns='hp'入力カラムとしては省略するカラム

サマリを出力

svm_viewとしてモデルのサマリ情報を出力します。

テストデータを使用した予測結果を格納するテーブルを作成

出力した予測値を格納するsvm_mtcars_predictテーブルを作成します。
この表に、テスト・データに対してPREDICT_SVM_CLASSIFIER関数を実行して得られた予測出力を格納します。

予測結果を確認

am列とPrediction列の値が異なっていると、予測と一致していない結果であることを表します。

svm_mtcars_predictテーブルの列の意味

列名内容
car_model車種
am目的変数(予測したい列)
Prediction予測値

PREDICT_SVM_CLASSIFIER関数の精度を評価

CONFUSION_MATRIX関数を使ってPREDICT_SVM_CLASSIFIER関数の精度を評価します。

実装

作成したモデルを使用して予測結果を求めます。

PREDICT_SVM_CLASSIFIER関数を利用することで、作成したSVMのモデルを呼び出すことができます。これにより未知のデータ(mtcars_predict)を機械学習で分類することができます。上記例の場合は「予測」列が、各行のcyl,mpg,wt列の内容から導き出したam列の予測結果です。

参考情報

SVM (Support Vector Machine)
https://my.vertica.com/docs/8.1.x/HTML/index.htm#Authoring/AnalyzingData/MachineLearning/SVM/SVM.htm

検証バージョンについて

この記事の内容はVertica 8.1で確認しています。