DBMS_DATA_MINING.CREATE_MODEL2
パッケージDBMS_DATA_MININGのリファレンスは以下です。機械学習モデルに与えるパラメータの説明も含みます。
PL/SQL Packages and Types Reference
23ai
プロシージャCREATE_MODEL2はCREATE_MODELを完全に置き換えます。
CREATE_MODELの引数は以下になります。
PROCEDURE CREATE_MODEL(
model_name IN VARCHAR2,
mining_function IN VARCHAR2,
data_table_name IN VARCHAR2,
case_id_column_name IN VARCHAR2,
target_column_name IN VARCHAR2 DEFAULT NULL,
settings_table_name IN VARCHAR2 DEFAULT NULL,
data_schema_name IN VARCHAR2 DEFAULT NULL,
settings_schema_name IN VARCHAR2 DEFAULT NULL,
xform_list IN TRANSFORM_LIST DEFAULT NULL);
機械学習モデルに与えるデータは、引数data_table_nameおよび引数data_schema_nameで指定します。引数data_table_nameには、モデルが扱うデータを持つ表またはビューを指定します。通常は既存のスキーマにあるデータを元に機械学習モデル向けに準備する必要があるため、新たに表またはビューを作成します。
機械学習モデルに与えるパラメータは、引数settings_table_nameおよび引数settings_schema_nameで指定します。モデルにパラメータを渡すには、まず表を作成して、その表にパラメータ名と値のペアを保存する必要があります。
つまり、機械学習モデルを作成するたびにデータ表(またはビュー)とパラメータ表を作成する必要があります。機械学習モデルを削除するときは、それらの表も一緒に削除する必要があります。結果として、機械学習モデルの管理が煩雑になります。
プロシージャCREATE_MODEL2では、データ表がSELECT文(引数data_query)に置き換えられています。また、パラメータ表はDBMS_DATA_MINING.SETTING_LIST(キーがVARCHAR2(30)、バリューがCLOBの連想配列)(引数set_list)に置き換えられています。機械学習モデルに紐づくデータベース・オブジェクトが無くなっているため、機械学習モデルの管理が容易になっています。
DBMS_DATA_MINING.CREATE_MODEL2 (
model_name IN VARCHAR2,
mining_function IN VARCHAR2,
data_query IN CLOB,
set_list IN SETTING_LIST,
case_id_column_name IN VARCHAR2 DEFAULT NULL,
target_column_name IN VARCHAR2 DEFAULT NULL,
xform_list IN TRANSFORM_LIST DEFAULT NULL);
アルゴリズムやパラメータを変えて評価を繰り返す作業をやりやすくするために、プロシージャCREATE_MODEL2を作成したのではないかと思います。
しかし、OML4SQLのサンプル・スクリプトの多くは機械学習モデルの作成に、DBMS_DATA_MINING.CREATE_MODELを呼び出してしています。
サンプル・スクリプトを元に機械学習モデルを作成する際に、毎回CREATE_MODELの呼び出しをCREATE_MODEL2に置き換えるのは大変なので、あらかじめ全てのサンプル・スクリプトのCREATE_MODELの呼び出しをCREATE_MODEL2に置き換えました。
最初はClaude Sonnet 4に以下のプロンプトを与えて、アタッチしたSQLファイルを変換させてみました。
添付のファイルはOracle DatabaseのOracle Machine Learning for SQLのサンプル・コードです。
このファイルに書かれているPL/SQLコードで使用しているDBMS_DATA_MINING.CREATE_MODELの代わりにDBMS_DATA_MINING.CREATE_MODEL2を使って書き直してください。
DBMS_DATA_MINING.CREATE_MODELについては、以下のリンクで説明されています。
https://docs.oracle.com/en/database/oracle/machine-learning/oml4sql/23/dmprg/CREATE_MODEL-procedure.html
DBMS_DATA_MINING.CREATE_MODEL2については、以下のリンクで説明されています。
https://docs.oracle.com/en/database/oracle/machine-learning/oml4sql/23/dmprg/CREATE_MODEL2-procedure.html
DBMS_DATA_MINING.CREATE_MODEL2の呼び出し例です。settings_table_nameではなくSET_LISTを使い、DBMS_DATA_MINING.SETTING_LISTで宣言した変数を渡してください。
v_setlistの設定値は文字列として設定してください。設定値は以下のリンクで説明されています。
https://docs.oracle.com/en/database/oracle/oracle-database/23/arpls/DBMS_DATA_MINING.html
```
DECLARE
v_setlst DBMS_DATA_MINING.SETTING_LIST;
BEGIN
v_setlst('ALGO_NAME') := 'ALGO_APRIORI_ASSOCIATION_RULES';
v_setlst('PREP_AUTO') := 'ON';
v_setlst('ASSO_MIN_SUPPORT') := '0.04';
v_setlst('ASSO_MIN_CONFIDENCE') := '0.1';
v_setlst('ASSO_MAX_RULE_LENGTH') := '2';
v_setlst('ASSO_CONS_EX_RULES') := '''a'',''b''';
v_setlst('ODMS_ITEM_ID_COLUMN_NAME'):= 'PROD_NAME';
v_setlst('ASSO_AGGREGATES') := 'AMOUNT_SOLD';
DBMS_DATA_MINING.CREATE_MODEL2(
MODEL_NAME => 'AR_SH_SAMPLE',
MINING_FUNCTION => 'ASSOCIATION',
DATA_QUERY => 'select * from SALES_TRANS_CUST',
SET_LIST => v_setlst,
CASE_ID_COLUMN_NAME => 'CUST_ID');
END;
```
DBMS_DATA_MINING.CREATE_MODEL以外、ビジネスケースのコードなどは一切変更しないでください。
Claude Sonnet 4からは以下の回答が返され、サンプル・スクリプトも更新されます。
変更すべきポイントは正しく認識されていて、変更されたサンプル・スクリプトがそのまま動作するケースもありました。
今回の作業ではAIが生成したコードを参考にしましたが、書き換えは手作業で行なっています。もしすでにDBMS_DATA_MINING.CREATE_MODELを呼び出して機械学習モデルを作成しているコードがあれば、AIで書き換えても良いかもしれません。
これからOML4SQLを使ってみようという方のお役に立てば幸いです。
完