Verticaでは、機械学習の分類アルゴリズムとしてナイーブベイズを利用できます。

ナイーブベイズとは

ナイーブベイズは、機械学習における教師あり学習のアルゴリズムであり、分類を行う際に利用できます。

ナイーブベイズの利用例は以下の通りです。
・スパムメールの判定
・ある病気になる確率の予測

以降では、サンプルデータを例にVerticaでナイーブベイズを利用する手順をご紹介します。

Verticaでナイーブベイズを利用する手順

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

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

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


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

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

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

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


ナイーブベイズモデルの作成



本記事では機械学習のサンプルデータとしてよく用いられるhouse84データを使用します。
本データには、米国議会の1984年に実施された16の投票について下院議員が賛成票を投じたか否かが記録されています。


本データは学習に適切な状態になっていないため、はじめにクリーニングを行います。クリーニング用のスクリプトはサンプルデータセットに含まれています。


ナイーブベイズによる機械学習を行うには、LOGISTIC_REG関数を利用します。

パラメータ名内容
model‑name 任意のモデル名
input‑relation 学習データのテーブル名
response‑column 予測したい列(目的変数)
predictor‑columns 予測に使用する説明変数
exclude_columns (オプション) input‑columnsで*(全列)と指定した場合に、対象列から除外する列
alpha(オプション) モデルがカテゴリカル、多項分類、ベルヌーイの場合に、ラプラススムージングの使用を指定する値。デフォルトは1.0


本例ではvote1~vote16(投票結果)を説明変数として機械学習を行い、閣議員が所属する政党(party列(republican=共和党、democrat=民主党))を予測します。

クリーニングスクリプトを実行することで、house84データを分割した訓練データ(house84_train)とテストデータ(house84_test)が用意されています。そのため、house84_trainテーブルを用いてナイーブベイズによる機械学習を行います。


サマリを出力

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


作成したモデルの評価

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

パラメータ名意味
input‑columns予測に使用する説明変数列をカンマ区切りで指定
model_name 予測に使用するモデル名
type(オプション) 以下のいずれかを指定
response:予測結果を0 or 1で出力(デフォルト)
probability: 予測結果が1になる確率を出力
classes typeをresponseに指定した場合に、予測確率を出力したいクラスを指定。省略した場合は最も高い予測確率のクラスが出力される。
match_by_pos(オプション) 入力列と特徴量の紐付けのルール。以下のいずれかを指定。
false:入力した列名と特徴量の名前で紐付(デフォルト)
true:列名は無視し、入力した列の順番通りに紐づけ


本例ではnaive_house84_modelモデルを用いて、house84_testのparty列を予測します。

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

また、PREDICT_NAIVE_BAYES_CLASSES関数を使用すると、各クラス毎の確率を出力できます。

パラメータ名意味
predictor‑columns予測に使用する説明変数列をカンマ区切りで指定
model_name 予測に使用するモデル名
key_columns(オプション) 出力結果を識別するための一意の値が格納された列を指定
exclude_columns (オプション) predictor‑columnsで*(全列)と指定した場合に、対象列から除外する列
classes予測確率を出力したいクラスをカンマ区切りで指定。クラス名は大文字、小文字が区別されます。
match_by_pos(オプション) 入力列と特徴量の紐付けのルール。以下のいずれかを指定。
false:入力した列名と特徴量の名前で紐付(デフォルト)
true:列名は無視し、入力した列の順番通りに紐づけ


本例ではdemocrat、republicanそれぞれの確率を出力しています。


実装

作成したナイーブベイズのモデルを実装する場合も、評価時に利用したPREDICT_NAIVE_BAYES、またはPREDICT_NAIVE_BAYES_CLASSES関数を利用できます。

PREDICT_NAIVE_BAYES関数を利用する場合の例


参考情報

Classifying Data Using Naive Bayes
https://www.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/AnalyzingData/MachineLearning/NaiveBayes/ClassifyingDataUsingNaiveBayes.htm

検証バージョンについて

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