モデル定義の作成
モデルをトレーニングする前に、CREATE MODEL 文を使用してモデル定義を指定する必要があります。モデル定義は、IntegratedML がモデルのトレーニングに使用するテンプレートで、入力フィールド (特徴)、予測されたフィールド (ラベル)、およびこれらのフィールドのデータ型に関するメタデータが含まれます。モデル定義にはデータの構造のみが格納され、データ自体は格納されません。
構文 — CREATE MODEL
CREATE MODEL 文の構文は以下のとおりです。
CREATE MODEL model-name PREDICTING (label-column) [ WITH feature-column-clause ] FROM model-source [ USING json-object-string ]
または
CREATE MODEL model-name PREDICTING (label-column) WITH feature-column-clause [ FROM model-source ] [ USING json-object-string ]
または
CREATE MODEL model-name PREDICTING (label-column) WITH feature-column-clause FROM model-source [ USING json-object-string ]
例 — CREATE MODEL
以下の例では、CREATE MODEL 文におけるさまざまな節の使用法を示します。
FROM による特徴列の選択
以下のコマンドは、モデル定義 HousePriceModel を作成します。ラベル列 (予測される列) は、Price です。HouseData テーブルの列は、FROM 節を使用することにより、暗黙的にモデル定義の特徴列として提供されます。
CREATE MODEL HousePriceModel PREDICTING (Price) FROM HouseData
Important:
CREATE MODEL 文で FROM を使用しない場合、TRAIN MODEL 文で FROM が必要になります。
WITH による特徴列の選択
以下のコマンドは、上記と同じモデル定義 HousePriceModel を作成しますが、WITH 節を使用して特徴列とそのデータ型を明示的に指定します。
CREATE MODEL HousePriceModel PREDICTING (Price) WITH (TotSqft numeric, num_beds integer, num_baths numeric)
USING によるトレーニング・パラメータの選択
以下のコマンドは、オプションの USING 節を使用して、トレーニングに使うプロバイダのパラメータを指定します。USING 節の詳細は、"トレーニング・パラメータの追加 (USING 節)" を参照してください。
CREATE MODEL HousePriceModel PREDICTING (Price) FROM HouseData USING {"seed": 3}
モデルのためのデータの準備
モデル定義を作成する前に、以下の項目を考慮してデータセットを準備する必要があります。
-
データを単一のビューまたはテーブルにまとめます。
-
特徴を評価します。
モデルのトレーニング
モデル定義を作成した後、TRAIN MODEL 文を使用して予測モデルをトレーニングできます。IntegratedML は、ML 構成で指定されたプロバイダを使用してこのモデルをトレーニングします。プロバイダは構造化プロセスを使用して、さまざまな機械学習モデル・タイプ (線形回帰、ランダム・フォレストなど) のパフォーマンスをデータと比較して、適切なモデルを返します。
構文 — TRAIN MODEL
TRAIN MODEL 文の構文は以下のとおりです。
TRAIN MODEL model-name [ AS preferred-model-name ] [ NOT DEFAULT ] [ FOR label-column ] [ WITH feature-column-clause ] [ FROM model-source ] [ USING json-object-string ]
例 — TRAIN MODEL
以下の例では、TRAIN MODEL 文におけるさまざまな節の使用法を示します。
最も単純な構文
以下のコマンドは、HousePriceModel モデル定義を使用してモデルをトレーニングします。
TRAIN MODEL HousePriceModel
Important:
CREATE MODEL 文で FROM を使用しなかった場合、TRAIN MODEL 文で FROM が必要になります。
FROM によるトレーニング・ データの選択
以下のコマンドは、HousePriceModel モデル定義および HouseData をトレーニング・データとして使用してモデルをトレーニングします。
TRAIN MODEL HousePriceModel FROM HouseData
AS によるトレーニング実行の命名
以下のコマンドは、HousePriceModel モデル定義を使用してモデルをトレーニングします。このトレーニングされたモデルは、HousePriceModelTrained という名前で保存されます。
TRAIN MODEL HousePriceModel AS HousePriceModelTrained FROM HouseData
WITH による特徴列のマッチング
以下のコマンドは、HousePriceModel モデル定義でモデルをトレーニングし、FOR 節と WITH 節を使用して、トレーニング・セットとモデル定義との間で、ラベル列と特徴列をそれぞれ明示的に合わせます。
TRAIN MODEL HousePriceModel FOR house_price WITH (TotSqft = house_area, num_beds = beds, num_baths = bathrooms) FROM OtherHouseData
USING によるトレーニング・パラメータの選択
以下のコマンドは、オプションの USING 節を使用して、トレーニングに使うプロバイダのパラメータを指定します。USING 節の詳細は、"トレーニング・パラメータの追加 (USING 節)" を参照してください。
TRAIN MODEL HousePriceModel USING {"seed": 3}
トレーニング・パラメータの追加 (USING 節)
USING 節を使用すると、プロバイダがモデルをトレーニングする方法に影響を与えるパラメータの値を指定できます。機械学習の専門家は、この特徴を使用して、ニーズに合わせてトレーニング実行を細かく調整できます。
例えば、以下のようにすることができます。
TRAIN MODEL my-model USING {"seed": 3}
USING 節を使用して、プロバイダ固有のトレーニング・パラメータを渡すことができます。この節には、パラメータ名とパラメータ値のキーと値のペアを記述した JSON 文字列を使用できます。これらの値のペアでは大文字と小文字が区別されます。
CREATE MODEL 文と TRAIN MODEL 文だけでなく ML 構成でも USING 節を渡すことができます。以下のように解決されます。
-
TRAIN MODEL コマンドの USING 節で指定したパラメータは、CREATE MODEL コマンドまたは既定の ML 構成で指定した同じパラメータの値を上書きします。
-
CREATE MODEL コマンドの USING 節で指定したパラメータは、TRAIN MODEL コマンドに暗黙的に使用され、既定の ML 構成で指定した同じパラメータの値を上書きします。
-
CREATE MODEL コマンドまたは TRAIN MODEL コマンドで USING を指定しない場合、モデルでは既定の ML 構成で指定された USING 節が使用されます。
すべてのパラメータ名は文字列として渡す必要があり、値はパラメータに固有の型で渡す必要があります。リストは、コンマで区切った文字列で入力する必要があります。
各プロバイダで使用できるパラメータの詳細は、以下を参照してください。
予測
トレーニングされたモデルにはそれぞれ、専門の関数 PREDICT があり、この関数がプロバイダを呼び出して、該当する行セットの各行の結果を予測します。分類モデルにはさらに PROBABILITY 関数があり、この関数がプロバイダを呼び出して、指定された値がモデルに対して正しい結果である確率を返します。
これらはスカラ関数であり、SQL クエリの任意の場所で、他のフィールドや関数と組み合わせて使用できます。
PREDICT
PREDICT 関数を使用し、指定されたモデル (したがって、プロバイダ) を該当する行セットの各行に適用して、ラベル列の予測値 (回帰モデルの場合) または最も可能性の高い値 (分類モデルの場合) を返すことができます。各行には入力列 (特徴列) があり、モデルはこの入力列から出力 (ラベル) を返します。行セットは、必要な特徴列とラベル列を含む任意の行のセットとすることができます。
構文
PREDICT 関数の構文は以下のとおりです。
PREDICT(model-name [ USE trained-model-name ] [ WITH feature-column-clause ] )
例
以下の文では、モデル HousePriceModel の専門の関数 PREDICT をさまざまな形式で使用しています。
SELECT *, PREDICT(HousePriceModel) FROM NewHouseData
SELECT * FROM NewHouseData WHERE PREDICT(HousePriceModel) > 500000
WITH 節を使用して、すべてのデータセットに基づくのではなく、トレーニング・セットの列に対応する指定の値に基づいて予測できます。各引数は、CREATE MODEL 文で指定した順序どおりに記述する必要があります。欠落している引数は空のコンマで表現できます。例えば、以下の文では 2 セットの列データに基づいて予測が実行されます。
SELECT PREDICT(HousePriceModel WITH ({4200, 5, 4},{3800, , 3)))
また、WITH を使用して、モデルの作成元のデータセットとは異なるデータセットの列とモデルの列とのマッピングを指定することもできます。以下の文は、モデルから別のデータセットの列に特徴列をマッピングします。
SELECT PREDICT(HousePriceModel WITH (TotSqft = house_area, num_beds = beds, num_baths = bathrooms) FROM OtherHouseData
詳細情報
PREDICT 関数の詳細は、"InterSystems SQL リファレンス" を参照してください。
PROBABILITY
分類モデルの場合、PROBABILITY 関数を使用して、指定したラベル値が予測されたラベル値である確率を行ごとに返すことができます。これにより、その値の予測の相対的な強度を評価できます。
構文
PROBABILITY 関数の構文は以下のとおりです。
PROBABILITY(model-name [ USE trained-model-name ] FOR label-value [ WITH feature-column-clause ] )
例
以下の文では、モデル Iris_mdoel 専用の関数 PROBABILITY をさまざまな形式で使用しています。
SELECT *, PROBABILITY(Iris_Model FOR 'iris-setosa') FROM Iris_Flower_Set
SELECT * FROM Iris_Flower_Set WHERE PROBABILITY(Iris_Model FOR 'iris-setosa') < 0.3
以下の文では、モデル EmailFilter の専門の関数 PROBABILITY を使用しています。これは、ブーリアン値 0 または 1 を唯一の出力とする二項分類モデルであるため、暗黙的な FOR 値 1 を使用して、FOR 節を省略できます。
SELECT * EmailData WHERE PROBABILITY(EmailFilter) > 0.7
詳細情報
PROBABILITY 関数の詳細は、"InterSystems SQL リファレンス" を参照してください。
ウォークスルー
このウォークスルーでは、IntegratedML がアプリケーション通じて実世界のシナリオに提供するシンプルかつ強力な構文を示します。ユーザは少数の SQL クエリを使用し、自身のデータを使って検証済みの予測モデルを開発します。
医療システムの管理者は、患者の再入院率が増加していることを憂慮しています。患者システムを評価する際、医者が全体的にもっと慎重になるべきかもしれませんが、何を探せばよいかを示す基準が定義されていません。新しい分析ソリューションに多大な投資を行う前に、管理者からデータ・アナリストに対し、再入院した患者のプロファイルで傾向を見つけるモデルを迅速に開発する課題が課せられます。データは InterSystems IRIS® データベース・プラットフォームに格納されているため、アナリストは IntegratedML を使用すれば、手動によるフォーマット設定やプラットフォーム外部からのデータの移動を必要とする他のソリューションよりも、ずっと速く開発できることを知っています。
データの準備
IntegratedML を使用する前に、アナリストはデータを準備し、データがクリーンですぐにトレーニングに使用できることを確認します。使いやすいように、必要なデータを複数のテーブルから単一のビューに入れます。この例では、ビューに Hospital.PatientDataView という名前が付けられています。
構成のカスタマイズ
アナリストは、既定の構成で IntegratedML を使用することを選択します。モデルのトレーニングにさまざまなプロバイダを使用できることは分かっていますが、スピードと使いやすさから、追加の構文が不要な既定の構成を使用することにしました。
モデルの作成
データが揃い、単一のビューにまとめられたので、アナリストは自動機械学習機能でトレーニングするモデル定義を作成します。PatientReadmission というこの定義は、IsReadmitted を予測するラベル列として指定します。
CREATE MODEL PatientReadmission PREDICTING (IsReadmitted) FROM Hospital.PatientDataView
モデルのトレーニング
次に、アナリストはモデルをトレーニングします。
TRAIN MODEL PatientReadmission
トレーニングのためにカスタマイズされたパラメータを指定する必要はありません。
モデルの検証
アナリストは、準備したテスト・データセット (Hospital.PatientDataViewTesting) を使用してモデルを検証し、パフォーマンスに関するメトリックを取得して、それらのメトリックを確認します。
VALIDATE MODEL PatientReadmission FROM Hospital.PatientDataViewTesting
SELECT * FROM INFORMATION_SCHEMA.ML_VALIDATION_METRICS
モデルを使用した予測
モデルをトレーニングして検証したので、次にアナリストはモデルを適用して、同じスキーマを持つさまざまなデータセットに基づいて予測を行います。この 1 週間に入院した患者の情報を含むデータセット Hospital.NewPatientDataView にモデルを適用し、再入院の可能性のある患者がいるかどうかを確認します。
SELECT ID FROM Hospital.NewPatientDataView WHERE PREDICT(PatientReadmission) = 1
まとめ
まとめると、アナリストは以下の SQL クエリを入力して、未加工データを有効な予測モデルに変換しました。
CREATE MODEL PatientReadmission PREDICTING (IsReadmitted) FROM Hospital.PatientDataView
TRAIN MODEL PatientReadmission
VALIDATE MODEL PatientReadmission FROM Hospital.PatientDataViewTesting
SELECT * FROM INFORMATION_SCHEMA.ML_VALIDATION_METRICS
SELECT ID FROM Hospital.NewPatientDataView WHERE PREDICT(PatientReadmission) = 1