Bigquery ML で Titanic をやる
多分既に誰かがやっているとは思うので、あくまで備忘録的な作業メモ的な。 スタートガイドをやってみたのですが、簡単過ぎて逆に覚えられなかったので…
データ準備
$ mkdir ~/Documents/titanic $ cd ~/Documents/titanic $ wget https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv $ head -n 600 titanic.csv > train.csv $ head -n 1 titanic.csv > valid.csv $ tail -n 292 titanic.csv >> valid.csv # titanic.csvは全部で892行
BQにアップロード
適当なプロジェクトにtitanic
データセットを作成。UIからtrain.csvとvalid.csvをインポートする。
スキーマは自動検出で行けました。
学習
CREATE MODEL `titanic.model` OPTIONS( model_type='logistic_reg', input_label_cols=['Survived'] ) AS ( SELECT * FROM `titanic.train` )
スタートガイドではターゲットとなるカラムにlabel
というエイリアスをつけて学習を行っているみたいですが、ここではエイリアスは使わずinput_label_cols
を使用してターゲットとなるカラムを指定します。
ARRAY
にしないといけないんですね。
評価
SELECT * FROM ML.EVALUATE( MODEL `titanic.model`, ( SELECT * FROM `titanic.valid` ) )
予測
スタートガイドでは何やらいろいろ加工しているので、いったん全部出力してみようと思います。
SELECT * FROM ML.PREDICT( MODEL `titanic.model`, ( SELECT * FROM `titanic.valid` ) )
こんな感じになるから加工が必要なんですね。predicted_label
の意味も分かりました。
必要な形に加工して出力します。
SELECT PassengerId, predicted_Survived, FROM ML.PREDICT( MODEL `titanic.model`, ( SELECT * FROM `titanic.valid` ) )
まとめ
Bigquery ML を使う上で使用するのは主に次の3つの機能で、それぞれ次のような形で使う。
- 学習
CREATE MODEL `dataset.model_name` OPTIONS( model_type='hoge', input_label_cols=['huga'] ) AS ( SELECT * FROM `dataset.train_table_name` )
- 評価
SELECT * FROM ML.EVALUEATE( MODEL `dataset.model_name`, ( SELECT * FROM `dataset.valid_table_name` ) )
- 予測
SELECT * --適当な形に加工する。 FROM ML.PREDICT( MODEL `dataset.model_name`, ( SELECT * FROM `dataset.test_table_name` ) )
こうやってみるとシンプル。 公開当初に比べてAutoML Tablesに対応したりと使える場面は広がっているはず。 フィットすればかなり高速に開発できそう。