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の側面から構成されています。


ランダムフォレスト回帰による機械学習を行うには、RF_REGRESSOR関数を利用します。

パラメータ名内容
model‑name 任意のモデル名
input‑relation 学習データのテーブル名
response‑column 予測したい列(目的変数)
predictor‑columns 予測に使用する説明変数
exclude_columns (オプション) input‑columnsで*(全列)と指定した場合に、対象列から除外する列
ntree(オプション) フォレスト内のツリーの数を0〜1000の間で指定。デフォルトは20。
mtry(オプション) ツリーノードの分割で考慮するフィーチャの数を特徴量の数以下の整数で指定。デフォルトは特徴量数の1/3。
sampling_size(オプション) 各ツリーを訓練するためにランダムに選択された入力データセットの割合を0.0〜1.0指定。
デフォルトは0.632。
max_depth(オプション) 各ツリーの深さをを1〜100の間で指定。
デフォルトは5。
max_breadth (オプション) フォレスト内のツリーに含めることができるリーフノードの最大数を1〜1e9の整数で指定。
デフォルトは32。
min_leaf_size (オプション) ノードを分割した後に各ブランチが最低限持つ必要があるサンプル数を1から1e6までの整数で指定。サンプル数を満たさないブランチは破棄される。
デフォルトは5
min_info_gain(オプション) 分割を含めるための最小しきい値を0.0〜1.0で指定。 情報利得がこのしきい値未満の分割は破棄される。デフォルトは0.0。
nbins(オプション) 連続値(数値)の特徴量に使用するbinの数を2~1000の間で指定。デフォルトは32。


本例ではcyl(シリンダー数), hp(馬力), drat(リアアクセル比), wt(重量)を説明変数として機械学習を行い、carb(キャブレター数)の値を予測します。

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


サマリを出力

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


RF_PREDICTOR_IMPORTANCE関数を使用すると変数の重要度も確認できます。


作成したモデルの評価

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

パラメータ名内容
input‑columns予測に使用する説明変数列をカンマ区切りで指定
model‑name 予測に使用するモデル名
match_by_pos (オプション) 入力列と特徴量の紐付けのルール。以下のいずれかを指定。
false:入力した列名と特徴量の名前で紐付(デフォルト)
true:列名は無視し、入力した列の順番通りに紐づけ


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


MSEによる評価も確認します。


実装

作成したランダムフォレスト回帰のモデルを実装する場合も、評価時に利用したPREDICT_RF_REGRESSOR関数を利用できます。


参考情報

Building a Random Forest for Regression Model
https://www.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/AnalyzingData/MachineLearning/RandomForest/BuildingaRandomForestforRegressionModel.htm

検証バージョンについて

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