36.5.4 パーティション化されたモデルについて
複数のモデルを編成および表現するパーティション化されたモデルについて説明します。
データ・セットでモデルを作成し、新規データに適用する場合、予測が一般的であり、新規データや進化するデータに対して実行するとパフォーマンスが低下する可能性があります。これを解決するために、いくつかの特性に基づいてデータ・セットを異なる部分に分割できます。Oracle Machine Learning for SQLは、パーティション化されたモデルをサポートしています。パーティション化されたモデルを使用すると、ユーザーは各データ・パーティションに1つのタイプのアンサンブル・モデルを構築できます。最上位モデルには、自動的に生成されるサブ・モデルがあります。サブ・モデルは属性オプションに基づいています。たとえば、データ・セットに4つの値を持つREGION
という属性があり、それをパーティション化された属性として定義したとします。その場合、この属性に4つのサブ・モデルが作成されます。サブ・モデルは、単一のモデルとして自動的に管理されて使用されます。パーティション化されたモデルは、一般的な機械学習タスクを自動化し、複数のターゲット・モデルを通じてより高い精度を達成できる可能性があります。
パーティション化されたモデルとそのサブ・モデルは、最初のクラスの永続データベース・オブジェクトとして存在します。永続的とは、パーティション化されたモデルがディスク上の表現を持つことを意味します。パーティション・モデルでは、多数のパーティションを持つパーティション・モデルのパフォーマンスが向上し、パーティション・モデル内の単一モデルの削除も改善されます。
パーティション化されたモデルを作成するには、ODMS_PARTITION_COLUMNS
設定を含めます。パーティションの数を定義するには、ODMS_MAX_PARTITIONS
設定を含めます。予測を行う場合は、最上位モデルを使用する必要があります。正しいサブ・モデルは、属性、属性オプションおよびパーティション設定に基づいて自動的に選択されます。スコアリング時、USING
句の一部としてパーティション列を含める必要があります。GROUPING
ヒントは、パーティション化されたモデルをスコアリングするときに、機械学習スコアリング関数に適用されるオプションのヒントです。
パーティション化されたモデルのパーティション名、キー値および構造は、ALL_MINING_MODEL_PARTITIONS
ビューで得られます。
関連トピック
参照:
GROUPING
ヒントの使用方法は、『Oracle Database SQL言語リファレンス』を参照してください。
パーティション化されたモデルの詳細は、Oracle Machine Learning for SQLユーザーズ・ガイドを参照してください。
36.5.4.1 パーティション化されたモデルの作成プロセス
Oracle Machine Learning for SQLでパーティション化されたモデルを作成するには、パーティション化キーが必要です。
パーティション化キーとは、入力データ・セットからの1つ以上列(最大16)で構成されるカンマ区切りリストです。パーティション化キーは、パーティション化キーの離散値に基づいて、入力データを水平方向にスライスします。つまり、パーティション化は、連続した値に対する範囲のパーティション化とは対照的に、リスト値として実行されます。パーティション化キーは、NUMBER
およびVARCHAR2
のデータ型の列のみをサポートしています。
作成プロセス中、入力データ・セットは、指定されたキーの個別値に基づいてパーティション化されます。各データ・スライス(一意のキー値)が、その独自のモデル・パーティションとなります。結果として作成されるモデル・パーティションは分かれておらず、スタンドアロン・モデルとして表示されません。パーティション化されたモデルのパーティションの最大数のデフォルト値は、1000パーティションです。異なるパーティション値を設定することもできます。入力データ・セットのパーティション数が、定義された最大数を超えている場合、OML4SQLによって例外がスローされます。
パーティション化されたモデルでは、すべてのパーティションに共通の特徴、およびパーティション固有の特徴が編成されます。共通の特徴は、次のメタデータで構成されます。
-
モデル名
-
機械学習ファンクション
-
機械学習アルゴリズム
-
すべてのパーティションによって参照される、すべてのmachine learningモデル属性のスーパー・セット(シグネチャ)
-
ユーザー定義列変換の共通セット
-
グローバルと解釈されるユーザー指定またはデフォルトの作成設定。たとえば、Auto Data Preparation (ADP)設定
36.5.4.2 パーティション化されたモデル内のDDL
パーティション化されたモデルのDDL操作を使用したメンテナンスについて学習します。
36.5.4.2.1 モデルの削除またはパーティションの削除
Oracle Machine Learning for SQLは、特定のパーティション名の単一のモデル・パーティションの削除をサポートしています。
1つのパーティションしか残っていない場合、そのパーティションを明示的に削除することはできません。かわりに、そのパーティションを削除する前に別のパーティションを追加するか、モデル自体の削除を選択できます。パーティション化されたモデルを削除する場合、すべてのパーティションは、単一のアトミック操作で削除されます。パフォーマンスの観点から、DROP_PARTITION
オプションは効率的に動作するため、REPLACE
オプションを使用するのではなく、DROP_PARTITION
、ADD_PARTITION
の順に実行することをお薦めします。
36.5.4.2.2 パーティションの追加
Oracle Machine Learning for SQLは、単一のパーティションまたは複数のパーティションの既存のパーティション化されたモデルへの追加をサポートしています。
追加は、入力データ・セットおよび既存のパーティション化されたモデルの名前に基づいて発生します。操作は、入力データ・セットおよび既存のパーティション化されたモデルをパラメータとして使用します。パーティション・キーは、入力データ・セットから抽出され、モデル・パーティションは入力データ・セットに対して作成されます。このパーティションは、パーティション化されたモデルとして追加されます。新規パーティションのパーティション・キーがモデル内の既存パーティションと競合する場合、次の3つの手法から選択して競合を解決できます。
-
ERROR
: パーティションを追加することなくADD操作を終了します。 -
REPLACE
: 競合するキーが検出された既存のパーティションを置き換えます。 -
IGNORE
: 競合するキーがある行を排除します。
入力データ・セットに複数のキーが含まれている場合、複数のパーティションが作成されます。モデル内のパーティションの合計数が、モデルの作成時に指定したユーザー定義最大数を超えると、エラーが発生します。パーティション数のデフォルトしきい値は1000です。
36.5.4.3 パーティション化されたモデルのスコアリング
パーティション化されたモデルのスコアリングは、パーティション化されていないモデルのそれと同じです。
機械学習ファンクションの構文は同じですが、オプションのヒントを提供するように拡張されています。オプションのヒントは、パーティション化されたモデルのスコアリングを含む問合せのパフォーマンスに影響を及ぼす可能性があります。
パーティション化されたモデルのスコアリングでは、パーティショニング・キーの作成中に使用されるシグネチャ列が、スコアリング・データセットに存在している必要があります。この列は、一意のパーティション・キーを形成するために組合されます。この一意のキーは、特定の基底となるモデル・パーティションにマップされ、識別されたモデル・パーティションがその行のスコアリングに使用されます。
スコアリングに必要なパーティション化オブジェクトが、問合せの実行時にオンデマンドでロードされ、システム・グローバル領域(SGA)メモリーに応じて有効期限が切れます。
CREATE_MODEL2
プロシージャはモデルの作成に使用されます。パーティション属性はCUST_GENDER
です。この属性には、MとFの2つのオプションがあります。%script
BEGIN DBMS_DATA_MINING.DROP_MODEL('SVM_MOD_PARTITIONED');
EXCEPTION WHEN OTHERS THEN NULL; END;
/
DECLARE
v_setlst DBMS_DATA_MINING.SETTING_LIST;
BEGIN
v_setlst('ALGO_NAME'):= 'ALGO_SUPPORT_VECTOR_MACHINES';
v_setlst('SVMS_KERNEL_FUNCTION') :='SVMS_LINEAR';
v_setlst('ODMS_PARTITION_COLUMNS'):='CUST_GENDER';
DBMS_DATA_MINING.CREATE_MODEL2(
MODEL_NAME => 'SVM_MOD_PARTITIONED',
MINING_FUNCTION => 'REGRESSION',
DATA_QUERY => 'SELECT * FROM CUSTOMERS_DEMO',
SET_LIST => v_setlst,
CASE_ID_COLUMN_NAME => 'CUST_ID',
TARGET_COLUMN_NAME => 'YRS_RESIDENCE');
END;
出力内容は次のようになります。
PL/SQL procedure successfully completed.
---------------------------
PL/SQL procedure successfully completed.
%script
SELECT cust_id, YRS_RESIDENCE,
ROUND(PREDICTION(SVM_MOD_PARTITIONED USING *),2) pred_YRS_RESIDENCE
FROM CUSTOMERS_DEMO;
CUST_ID YRS_RESIDENCE PRED_YRS_RESIDENCE
100100 4 4.71
100200 2 1.62
100300 4 4.66
100400 6 5.9
100500 2 2.07
100600 3 2.74
100700 6 5.78
100800 5 7.22
100900 4 4.88
101000 7 6.49
101100 4 3.54
101200 1 1.46
101300 4 4.34
101400 4 4.34 ...
関連トピック