Verticaでは、機械学習の分類アルゴリズムとしてロジスティック回帰を利用できます。

ロジスティック回帰とは

ロジスティック回帰は、機械学習における教師あり学習のアルゴリズムであり、分類を行う際に利用できます。

ロジスティック回帰の利用例は以下の通りです。
・スパムメールの判定
・ある病気になる確率の予測

以降では、サンプルデータを例にVerticaでロジスティック回帰を利用する手順をご紹介します。

Verticaでロジスティック回帰を利用する手順

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

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

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


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

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

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

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


ロジスティック回帰モデルの作成



本記事では機械学習のサンプルデータとしてよく用いられるmtcarsデータを使用します。
本データは、1974年のMotor Trend US誌から抽出されたもので、燃料消費量と32の自動車(1973-74モデル)の自動車設計と性能の10の側面から構成されています。


ロジスティック回帰による機械学習を行うには、LOGISTIC_REG関数を利用します。

パラメータ名内容
model‑name 任意のモデル名
input‑relation 学習データのテーブル名
response‑column 予測したい列(目的変数)
predictor‑columns 予測に使用する説明変数
exclude_columns (オプション) input‑columnsで*(全列)と指定した場合に、対象列から除外する列
optimizer(オプション) モデルが利用するオプティマイザ。以下から選択が可能。
・Newton
・BFGS
・CGD (デフォルト)
regularization(オプション) 正則化の方法。以下から選択が可能。
・None (デフォルト)
・L1
・L2
・ENet
epsilon(オプション) アルゴリズムが指定した精度に達成したかを決める閾値。
デフォルトは1e-6(0.000001)
max_iterations (オプション) 反復回数の上限値。デフォルトは100
lambda(オプション) 正則化パラメータの値(0以上で指定)。デフォルトは1
alpha(オプション) regularizationでENetを指定した場合のL1、L2正則化の混合パラメータ値を0~1の範囲で指定。
・0:L2正則化
・1:L1正則化
0を指定した場合はL2正則化、1を指定した場合はL1正則化に相当する。


本例ではcyl(シリンダー数)、wt(重量)を説明変数として機械学習を行い、am列(0=オートマ、1=マニュアル)を予測します。

サンプルデータセットでは、すでにmtcarsデータを分割した訓練データ(mtcars_train)とテストデータ(mtcars_test)が用意されています。そのため、mtcars_trainテーブルを用いてロジスティック回帰による機械学習を行います。


サマリを出力

作成したlogistic_reg_mtcarsモデルのサマリ情報を確認します。


作成したモデルの評価

学習時に利用していないテストデータ(mtcars_test)を利用して、作成したモデルの精度を評価します。
作成したモデルによる評価(予測)を行うにはPREDICT_LOGISTIC_REG関数を使用します。

パラメータ名内容
input‑columns予測に使用する説明変数列をカンマ区切りで指定
model‑name 予測に使用するモデル名
type(オプション) 以下のいずれかを指定
response:予測結果を0 or 1で出力(デフォルト)
probability: 予測結果が1になる確率を出力
cutoff(オプション) typeをresponseに指定した場合に、予測結果を1とする閾値。例えば0.2に設定した場合は、予測結果が1になる確率が0.2以上であれば、1を返すようになる。デフォルトは0.5。
match_by_pos (オプション) 入力列と特徴量の紐付けのルール。以下のいずれかを指定。
false:入力した列名と特徴量の名前で紐付(デフォルト)
true:列名は無視し、入力した列の順番通りに紐づけ


本例ではlogistic_reg_mtcarsモデルを用いて、mtcars_testのam列を予測します。

★のデータについては、間違った分類を行っていますが、それ以外は期待した分類が行われていることが確認できます。

また、PREDICT_LOGISTIC_REG関数でtype=probabilityオプションを指定することで、分類される条件に合致する確率も併せて求めることができます。


実装

作成したロジスティック回帰のモデルを実装する場合も、評価時に利用したPREDICT_LOGISTIC_REG関数を利用できます。

参考情報

Building a Logistic Regression Model
https://www.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/AnalyzingData/MachineLearning/LogisticRegression/ProgrammingExampleLogisticReg.htm

検証バージョンについて

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