4.8.4 パーティション化されたモデルについて
複数のモデルを編成し、表現するパーティション化されたモデルについて説明します。
データ・セットにモデルを構築し、それを新しいデータに適用すると、新しいデータおよび進化するデータに対して実行したときに予測が一般的になりパフォーマンスが悪くなる場合があります。これを克服するために、データ・セットをいくつかの特性に基づいて異なる部分に分割できます。Oracle Machine Learning for SQLはパーティション化されたモデルをサポートしています。パーティション化されたモデルにより、ユーザーは各データ・パーティションごとに一種のアンサンブル・モデルを構築できます。トップレベル・モデルには、自動的に生成されるサブモデルがあります。サブモデルは、属性オプションに基づいています。たとえば、データ・セットに4つの値を持つREGION
という属性があり、それをパーティション化された属性として定義したとします。これで、この属性に対して4つのサブモデルが作成されます。サブモデルは自動的に管理され、単一のモデルとして使用されます。パーティション化されたモデルは、一般的な機械学習タスクを自動化し、複数のターゲット・モデルを通じてより高い精度を達成できる可能性があります。
パーティション化されたモデルとそのサブモデルは、ファースト・クラスの永続データベース・オブジェクトとして存在します。永続的とは、パーティション化されたモデルがディスク上の表現を持つことを意味します。パーティション・モデルでは、多数のパーティションを持つパーティション・モデルのパフォーマンスが向上し、パーティション・モデル内の単一モデルの削除も改善されます。
パーティション化されたモデルを作成するには、ODMS_PARTITION_COLUMNS
設定を含めます。パーティションの数を定義するには、ODMS_MAX_PARTITIONS
設定を含めます。予測を行う場合は、トップレベル・モデルを使用する必要があります。正しいサブモデルは、属性、属性オプションおよびパーティション設定に基づいて自動的に選択されます。スコアリング時、USING
句の一部としてパーティション列を含める必要があります。GROUPING
ヒントは、パーティション化されたモデルをスコアリングするときに、機械学習スコアリング関数に適用されるオプションのヒントです。
パーティション化されたモデルのパーティション名、キー値および構造は、ALL_MINING_MODEL_PARTITIONS
ビューで参照できます。
関連トピック
関連項目:
GROUPING
ヒントの使用方法は、『Oracle Database SQL言語リファレンス』を参照してください。
パーティション・モデルの詳細は、Oracle Machine Learning for SQLユーザーズ・ガイドを参照してください。
4.8.4.1 パーティション化されたモデルの作成プロセス
Oracle Machine Learning for SQLでは、パーティション化されたモデルを作成するには、設定表に指定されているパーティション化キーが必要となります。
パーティション化キーとは、入力データ・セットからの1つ以上列(最大16)で構成されるカンマ区切りリストです。パーティション化キーは、パーティション化キーの離散値に基づいて、入力データを水平方向にスライスします。つまり、パーティション化は、連続した値に対する範囲のパーティション化とは対照的に、リスト値として実行されます。パーティション化キーは、NUMBER
およびVARCHAR2
のデータ型の列のみをサポートしています。
作成プロセス中、入力データ・セットは、指定されたキーの個別値に基づいてパーティション化されます。各データ・スライス(一意のキー値)が、その独自のモデル・パーティションとなります。結果として作成されるモデル・パーティションは分かれておらず、スタンドアロン・モデルとして表示されません。パーティション化されたモデルのパーティションの最大数のデフォルト値は、1000パーティションです。異なるパーティション値を設定することもできます。入力データ・セットのパーティション数が、定義された最大数を超えている場合、OML4SQLによって例外がスローされます。
パーティション化されたモデルでは、すべてのパーティションに共通の特徴、およびパーティション固有の特徴が編成されます。共通の特徴は、次のメタデータで構成されます。
-
モデル名
-
機械学習機能
-
機械学習のアルゴリズム
-
すべてのパーティションによって参照されるすべての機械学習モデル属性のスーパー・セット(シグネチャ)
-
ユーザー定義列変換の共通セット
-
グローバルとして解釈されるユーザー指定の設定またはデフォルトの作成設定(自動データ準備(ADP)設定など)
4.8.4.2 パーティション化されたモデル内のDDL
DDL操作を使用したパーティション化されたモデルのメンテナンスについて学習します。
4.8.4.2.1 モデルの削除またはパーティションの削除
Oracle Machine Learning for SQLは、特定のパーティション名の単一のモデル・パーティションの削除をサポートしています。
1つのパーティションしか残っていない場合、そのパーティションを明示的に削除することはできません。かわりに、そのパーティションを削除する前に別のパーティションを追加するか、モデル自体の削除を選択できます。パーティション化されたモデルを削除する場合、すべてのパーティションは、単一のアトミック操作で削除されます。パフォーマンスの観点から、DROP_PARTITION
オプションは効率的に動作するため、REPLACE
オプションを使用するのではなく、DROP_PARTITION
、ADD_PARTITION
の順に実行することをお薦めします。
4.8.4.2.2 パーティションの追加
Oracle Machine Learning for SQLは、単一のパーティションまたは複数のパーティションの既存のパーティション化されたモデルへの追加をサポートしています。
追加は、入力データ・セットおよび既存のパーティション化されたモデルの名前に基づいて発生します。操作は、入力データ・セットおよび既存のパーティション化されたモデルをパラメータとして使用します。パーティション・キーは、入力データ・セットから抽出され、モデル・パーティションは入力データ・セットに対して作成されます。このパーティションは、パーティション化されたモデルとして追加されます。新規パーティションのパーティション・キーがモデル内の既存パーティションと競合する場合、次の3つの手法から選択して競合を解決できます。
-
ERROR
: パーティションを追加することなくADD操作を終了します。 -
REPLACE
: 競合するキーが検出された既存のパーティションを置き換えます。 -
IGNORE
: 競合するキーがある行を排除します。
入力データ・セットに複数のキーが含まれている場合、複数のパーティションが作成されます。モデル内のパーティションの合計数が、モデルの作成時に指定したユーザー定義最大数を超えると、エラーが発生します。パーティション数のデフォルトしきい値は1000です。
4.8.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 ...
関連トピック