4.8.4 パーティション化されたモデルについて

パーティション化モデルでは、特定の属性に基づいてデータセットを複数のパーティションに分割し、パーティションごとにモデルを作成できます。システムによってこれらのモデルの作成と管理が自動化されるため、手作業が減ります。

データセットに対してモデルを作成するときに、単一の汎用モデルでは、新しいデータや進化するデータに対してうまく機能しない場合があります。これに対処するために、パーティション列を指定して、いくつかの特性に基づいてパーティションごとに個別のモデルを作成できます。たとえば、データセットに、4つの値がある"REGION"属性が含まれている場合は、4つのモデル(それぞれが1つのリージョンに対応している)が自動的に作成されます。これらのサブモデルは、単一のパーティション化モデルの一部として管理されます。

パーティション化モデルは第一級の永続的なデータベース・オブジェクトとして存在し、サブモデルはすべてディスクに格納されています。この構造により、パフォーマンスが向上し(特に、多数のパーティションがあるモデルの場合)、効率的な管理(必要に応じて個々のサブモデルを削除するなど)が可能になります。

パーティション化モデルを作成またはスコアリングするときは、すべてのサブモデルを同時にメモリーにロードする必要がありません。この手法により、メモリー使用量が最適化され、処理効率が高まります。システムによってスコアリング用に単一のモデルが提供されますが、ユーザーは、必要に応じて個々のコンポーネント・モデルにアクセスできます。

関連項目:

パーティション・モデルの詳細は、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操作を使用したパーティション化されたモデルのメンテナンスについて学習します。

パーティション化されたモデルは、次のDDL操作を通じて管理されます。

4.8.4.2.1 モデルの削除またはパーティションの削除

Oracle Machine Learning for SQLは、特定のパーティション名の単一のモデル・パーティションの削除をサポートしています。

1つのパーティションしか残っていない場合、そのパーティションを明示的に削除することはできません。かわりに、そのパーティションを削除する前に別のパーティションを追加するか、モデル自体の削除を選択できます。パーティション化されたモデルを削除する場合、すべてのパーティションは、単一のアトミック操作で削除されます。パフォーマンスの観点から、DROP_PARTITIONオプションは効率的に動作するため、REPLACEオプションを使用するのではなく、DROP_PARTITIONADD_PARTITIONの順に実行することをお薦めします。

4.8.4.2.2 パーティションの追加

Oracle Machine Learning for SQLは、単一のパーティションまたは複数のパーティションの既存のパーティション化されたモデルへの追加をサポートしています。

追加は、入力データ・セットおよび既存のパーティション化されたモデルの名前に基づいて発生します。操作は、入力データ・セットおよび既存のパーティション化されたモデルをパラメータとして使用します。パーティション・キーは、入力データ・セットから抽出され、モデル・パーティションは入力データ・セットに対して作成されます。このパーティションは、パーティション化されたモデルとして追加されます。新規パーティションのパーティション・キーがモデル内の既存パーティションと競合する場合、次の3つの手法から選択して競合を解決できます。

  • ERROR: パーティションを追加することなくADD操作を終了します。

  • REPLACE: 競合するキーが検出された既存のパーティションを置き換えます。

  • IGNORE: 競合するキーがある行を排除します。

入力データ・セットに複数のキーが含まれている場合、複数のパーティションが作成されます。モデル内のパーティションの合計数が、モデルの作成時に指定したユーザー定義最大数を超えると、エラーが発生します。パーティション数のデフォルトしきい値は1000です。

4.8.4.3 パーティション化されたモデルのスコアリング

パーティション化されたモデルのスコアリングは、パーティション化されていないモデルのそれと同じです。

機械学習機能の構文は同じですが、オプションのヒントを提供するように拡張されています。オプションのヒントは、パーティション化されたモデルのスコアリングを含む問合せのパフォーマンスに影響を及ぼす可能性があります。

パーティション化されたモデルのスコアリングでは、パーティショニング・キーの作成中に使用されるシグネチャ列が、スコアリング・データセットに存在している必要があります。この列は、一意のパーティション・キーを形成するために組合されます。この一意のキーは、特定の基底となるモデル・パーティションにマップされ、識別されたモデル・パーティションがその行のスコアリングに使用されます。

スコアリングに必要なパーティション化オブジェクトが、問合せの実行時にオンデマンドでロードされ、システム・グローバル領域(SGA)メモリーに応じて有効期限が切れます。

この例では、SVMモデルを使用して、顧客が居住しているが顧客性別でパーティション化されている年数を予測します。次に、モデルを使用してターゲットを予測します。この例では、パーティション化されたモデルの作成時に定義できるモデル設定を強調しています。次の例では、SHスキーマ表から作成されたビューを使用しています。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 ...