はじめに
機械学習の分類において、作成した予測モデルを評価する際に混同行列(Confusion Matrix)を用いることがあります。VerticaはCONFUSION_MATRIX関数を利用するとConfusion Matrixによる評価を行えます。
CONFUSION_MATRIX
コマンド構文
| 1 2 3 | SELECT CONFUSION_MATRIX ( target‑column, predictions                    [ USING PARAMETERS num_classes=num‑classes ] )                  OVER() | 
| パラメータ名 | 内容 | 
|---|---|
| target‑column | 目的変数(正解情報)が格納されている列 | 
| predictions | 予測結果が格納されている列 | 
| num_classes | 予測対象のクラス数。二値分類の場合は2を指定します。 | 
Vertica 9.2から、INTEGER型だけでなく、BOOLEAN型、CHAR/VARCHAR型の入力データもサポートされ、分類アルゴリズムでも利用できるようになりました。
利用例
例として以下のロジスティック回帰を使用して作成した車のオートマ/マニュアルの予測モデル(logistic_reg_mtcars)の予測結果を評価します。am列が正解情報、PredectionがVerticaが予測した結果です。
※0=オートマ、1=マニュアル
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | dbadmin=> SELECT car_model, am, PREDICT_LOGISTIC_REG(cyl, wt dbadmin(>                       USING PARAMETERS model_name='logistic_reg_mtcars') dbadmin->                       AS Prediction FROM mtcars_test;    car_model    | am | Prediction ----------------+----+------------  AMC Javelin    |  0 |          0  Camaro Z28     |  0 |          0  Datsun 710     |  1 |          1  Honda Civic    |  1 |          1  Hornet 4 Drive |  0 |          0  Maserati Bora  |  1 |          0  Merc 280       |  0 |          0  Merc 450SL     |  0 |          0  Porsche 914-2  |  1 |          1  Toyota Corona  |  0 |          1  Valiant        |  0 |          0  Volvo 142E     |  1 |          0 (12 rows) | 
CONFUSION_MATRIX関数を利用し、上記の予測結果を評価します。
事前準備として、予測結果の呼び出しを簡素化するために、上記SQLをビューとして登録しておきます。
| 1 2 3 4 5 | dbadmin=> CREATE VIEW mtcars_predict_results AS dbadmin->   (SELECT car_model, am, PREDICT_LOGISTIC_REG(cyl, wt dbadmin(>                         USING PARAMETERS model_name='logistic_reg_mtcars') dbadmin(>                         AS Prediction FROM mtcars_test); CREATE VIEW | 
作成したmtcars_predict_resultsビューに対してCONFUSION_MATRIX関数を実行します。
| 1 2 3 4 5 6 7 8 | dbadmin=> SELECT CONFUSION_MATRIX(obs::int, pred::int USING PARAMETERS num_classes=2) OVER() dbadmin->         FROM (SELECT am AS obs, Prediction AS pred FROM mtcars_predict_results) AS prediction_output;  actual_class | predicted_0 | predicted_1 |                   comment --------------+-------------+-------------+---------------------------------------------             0 |           6 |           1 |             1 |           2 |           3 | Of 12 rows, 12 were used and 0 were ignored (2 rows) | 

上記結果から以下のことが読み取れます。
○ オートマの車種を正しく「オートマ」と予測した件数:6件
× オートマの車種を誤って「マニュアル」と予測した件数:1件
× マニュアルの車種を誤って「オートマ」と予測した件数:2件
○ マニュアルの車種を正しく「マニュアル」と予測した件数:3件
参考情報
CONFUSION_MATRIXhttps://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Functions/MachineLearning/CONFUSION_MATRIX.htm
検証バージョンについて
この記事の内容はVertica 9.1、9.2で確認しています。更新履歴
2019/07/09 Vertica 9.2の情報を追加2018/11/09 本記事を公開
- 投稿タグ
- 機械学習, Machine Learning, 評価


