CREATE MODEL¶
Syntax:
CREATE { RECOMMENDER | CLASSIFIER | ANOMALY } MODEL
model_name [ ({ label | id }: id_col) ] AS
col_spec [ WITH convert_function ] [, ... ]
CONFIG 'json_string'
where: col_spec = wildcard | col_name
Examples:
jubaql> CREATE CLASSIFIER MODEL cls (label: label) AS
name WITH unigram
CONFIG {"method": "AROW",
"parameter": {"regularization_weight" : 1.0}}
CREATE MODEL (started)
jubaql> CREATE RECOMMENDER MODEL reco (id: 名前) AS *
CONFIG '{"method": "inverted_index",
"parameter": {}}'
CREATE MODEL (started)
jubaql> CREATE CLASSIFIER MODEL test (label: country) AS
name WITH bigram,
photo WITH jpeganalyze
CONFIG '{"method": "AROW",
"parameter": {"regularization_weight" : 1.0}}'
CREATE MODEL (started)
解説¶
CREATE MODEL は学習に用いられるJubatusのモデルを作成します。学習データは型付きの行列形式であることを想定しています。
model_nameはこのモデルを識別するための名前(ユーザ定義の文字列)です。label | idは、CLASSIFIERのモデルにはlabelを、RECOMMENDERのモデルにはidを用います。id_colは RPCメソッドupdate_row(id, row)のidパラメータもしくは RPCメソッドtrain(data)に渡されるlabeled datumのlabelとなる列の名前を指定します。使われるRPCメソッドは学習モデルの種類によって定まります。col_specはJubatusのビルトイン関数や FEATURE FUNCTIONで事前に定義された特徴抽出関数convert_functionを適用する列を指定します。 適用する関数を指定しなかった場合、数値データにはnumを その他のデータにはstrがデフォルトで設定されます。col_specは以下のような形式をとれます。- 列名を1つ指定した場合。この場合は、
convert_functionは1引数関数でなければならず、列の値に対して関数が適用されます。 *や*suffix,prefix*のようなワイルドカードを使う場合。この場合、これまでにcol_specで定義されていない かつ ワイルドカードのパターンにマッチする列について関数が適用されます。関数は1引数関数でなければならず、パターンにマッチした列の値それぞれに適用されます。
- 列名を1つ指定した場合。この場合は、
json_stringはJubatus起動時に使われるconfigファイルと同様の形式でモデルの設定を記述するjson文字列です。ただし、converterの部分はこの設定に含みません。
CREATE MODEL 文が正常に実行されると、他のクエリの実行時に model_name で指定した名前を使用することができるようになります。
注意¶
CREATE MODEL実行時にはJubatusインスタンスの起動については指定されません。したがって、このクエリが正常に実行されても、文法的に正しいことを示すのみであり、Jubatusインスタンスの起動についての情報は含みません。- 特徴関数は
Map[String, Any]の返り値を持ちます。 ただし、Anyは数値か文字列になります。。mapのkeyはJubatusのdatumのkeyの一部になります。例えばproductという関数にheightという列の値を与え、返り値がMap("val" -> 80)であった場合、datumのnum_valuesにproduct#height"val": 80のようなデータを持つことになります。 labelやid、 特徴抽出の指定で参照された列が入力ストリームのバッチデータのスキーマに存在せず、なおかつバッチが空でない場合、UPDATE MODEL、CREATE STREAM FROM ANALYZEによるそのバッチデータの処理はspark.task.maxFailuresで指定された回数再試行したのち失敗となります。ただし、スキーマと一致しない空のバッチデータの場合は失敗が生じません。