TRAIN MODEL
===========
목적
----
``TRAIN MODEL`` 문은 정의한 모델 타입을 대상 테이블의 컬럼 집합에 대해 학습시켜 모델을 구축하는 데 사용한다.
구문
----
다이어그램
~~~~~~~~~~
**trainModel**
.. only:: html
.. raw:: html
.. only:: latex
.. image:: ../_static/rrd/trainModel1.rrd.*
.. image:: ../_static/rrd/trainModel2.rrd.*
**trainDataClause**
.. only:: html
.. raw:: html
.. only:: latex
.. image:: ../_static/rrd/trainDataClause.rrd.*
.. image:: ../_static/rrd/trainDataClause2.rrd.*
**columnNameList**
.. only:: html
.. raw:: html
.. only:: latex
.. image:: ../_static/rrd/columnNameList.rrd.*
**trainDataConditionClause**
.. only:: html
.. raw:: html
.. only:: latex
.. image:: ../_static/rrd/trainDataConditionClause.rrd.*
**trainSampleClause**
.. only:: html
.. raw:: html
.. only:: latex
.. image:: ../_static/rrd/trainSampleClause.rrd.*
**trainModelOptionsClause**
.. only:: html
.. raw:: html
.. only:: latex
.. image:: ../_static/rrd/trainModelOptionsClause.rrd.*
**optionKeyValue**
.. only:: html
.. raw:: html
.. only:: latex
.. image:: ../_static/rrd/optionKeyValue.rrd.*
키워드 및 파라미터
~~~~~~~~~~~~~~~~~~
**modelName**
학습 과정을 거쳐 얻을 모델명을 나타내는 식별자다.
**modeltypeName**
모델을 얻기 위해 학습시킬 모델 타입을 나타내는 식별자다.
**UPDATE**
이미 학습되어 있는 모델에 추가 데이터를 학습하여 모델을 업데이트 할 때 사용한다.
**LIKE**
기존 모델과 동일한 테이블의 컬럼들에 대해 새로운 모델을 학습할 때 사용한다.
**exModelName**
학습되어 있는 모델명을 나타내는 식별자다.
**trainDataClause**
학습시킬 대상 데이터를 지정하는 절이다.
여러 테이블의 컬럼에 대해 모델을 훈련하려면 JOIN 절을 이용하여 지정한다.
**schemaName**
학습 대상 테이블이 포함된 스키마명을 나타내는 식별자다. 지정하지 않으면 현재 사용 중인 스키마로 지정된다.
**tableName**
학습 대상으로 지정할 테이블명을 나타내는 식별자다.
**columnNameList**
학습 대상 데이터로 지정할 컬럼 리스트를 지정한다. 컴마(,)로 구분하여 여러 컬럼을 지정할 수 있다.
**trainDataConditionClause**
학습시킬 테이블의 컬럼 중 대상 데이터를 가져오기 위한 조건을 지정하는 절이다.
학습 대상 테이블이 둘 이상일 경우에 학습 대상 테이블들을 조인하기 위한 조건을 지정하거나,
이미 학습되어 있는 모델을 업데이트할 데이터에 대한 조건을 지정하는 데 사용할 수 있다.
**trainSampleClause**
지정한 테이블로부터 일부만 샘플링해서 학습 데이터로 사용하고자 할 때 지정하는 절이다.
**trainModelOptionsClause**
모델 학습 시 사용할 옵션(하이퍼파라미터 등)을 지정하는 절이다.
지정 가능한 옵션은 모델 타입에 따라 다를 수 있다.
**'optionKey'**
옵션의 키를 나타내는 문자열 리터럴이다.
**optionValue**
지정할 옵션의 값을 나타내는 문자열 리터럴 또는 수치 값(따옴표 없음)이다.
예시
--------
모델 학습
~~~~~~~~~
다음은 ``tgan`` 이라는 모델을 기존에 정의되어 있는 ``tablegan`` 이라는 모델 타입으로 ``instacart`` 스키마에 속한 ``order_products`` 테이블의 ``reordered``, ``add_to_cart_order`` 컬럼을 대상으로 학습시키는 문장이다.
.. code-block:: console
TRAIN MODEL tgan MODELTYPE tablegan
FROM instacart.order_products(reordered, add_to_cart_order);
뒤에 ``OPTIONS`` 절을 추가해 ``epochs`` 하이퍼파라미터를 지정할 수도 있다.
.. code-block:: console
TRAIN MODEL tgan MODELTYPE tablegan
FROM instacart.order_products(reordered, add_to_cart_order)
OPTIONS ( 'epochs' = 100 );
둘 이상의 테이블에 있는 데이터에 대해서도 다음과 같이 모델을 훈련시킬 수 있다.
.. code-block:: console
TRAIN MODEL tgan_multi_tables MODELTYPE tablegan
FROM instacart.order_products(reordered, add_to_cart_order, order_id)
JOIN instacart.orders(order_id, order_dow)
ON orders.order_id = order_products.order_id;
모델 업데이트
~~~~~~~~~~~~~
다음은 ``rspn_op`` 라는 모델을 기존에 정의되어 있는 ``rspn`` 이라는 결과 추론형 모델 타입으로 ``instacart`` 스키마에 속한 ``order_products`` 테이블의 ``reordered``, ``add_to_cart_order`` 컬럼을 대상으로 학습시킨 후, 추가 데이터를 학습하여 ``rspn_op_update`` 라는 업데이트 된 모델을 훈련하는 문장이다.
.. code-block:: console
TRAIN MODEL rspn_op MODELTYPE rspn
FROM instacart.order_products(reordered, add_to_cart_order);
TRAIN MODEL rspn_op_update UPDATE rspn_op
ON order_products.order_id > 3000000;