ヘッダーをスキップ
Oracle Data Mining管理者ガイド
11g リリース1(11.1)
E05705-02
  目次へ
目次
索引へ
索引

戻る
戻る
 
次へ
次へ
 

8 データ・マイニングのサンプル・プログラム

Oracle Data Miningには、多数のサンプル・プログラムが用意されています。これらのプログラムでは、PL/SQLおよびJava APIの様々な機能を示しています。

サンプル・プログラムは、データベース内にモデルのセットを作成します。サンプル・ソース・コードには多数のコメントが含まれているので、Oracle Data Mining APIの理解に役立ちます。また、サンプルを編集することにより独自のモデルを作成することも可能です。


注意:

この章では、サンプル・プログラムおよびサンプル・データについて概説します。

サンプル・プログラムのインストールおよび実行の手順については、第1章を参照してください。


この章は、次の項で構成されています。

PL/SQLプログラム

PL/SQLサンプル・プログラムでは、モデル作成用のDBMS_DATA_MININGパッケージおよびマイニング・データ変換用のDBMS_DATA_MINING_TRANSFORMパッケージの使用例を示します。


参照:

  • PL/SQL APIの構文については、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

  • APIの使用方法については、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。

  • モデル・スコアリング用のSQL関数の構文については、『Oracle Database SQL言語リファレンス』を参照してください。


PL/SQLプログラムの概要

表8-1に、PL/SQLサンプル・プログラムの概要を示します。各サンプル・プログラムの詳細は、ソース・コード中のコメントを参照してください。

表8-1 PL/SQLサンプル・プログラムの概要

マイニング機能 説明

分類

分類プログラムでは、様々な前処理手法を示し、次の手順が実行される。

  • トレーニング・データを使用して分類モデルを作成する。

  • モデルの詳細および設定を表示する。

  • テスト・データにモデルを適用し、モデルをテストする。

  • 混同マトリックス、リフト、ROCなどのテスト・メトリックを計算する。

  • スコアリング・データにモデルを適用する。

  • 適用結果を表示する。

  • コスト・マトリックスの影響を受けた、ランク付けされた適用結果を表示する。

dmnbdemo.sqlはNaive Bayesを説明する。

dmdtdemo.sqlはディシジョン・ツリーを説明する。

dmsvcdem.sqlはSVM分類を説明する。

dmglcdem.sqlGLM分類(2項ロジスティック回帰)を説明する。

dmdtxvlddemo.sqlプログラムでは、ディシジョン・ツリー・ベースの分類にクロス・バリデーション法を使用する。このプログラムのごく一部を変更すると、別のモデル/アルゴリズムを使用するクロス・バリデーションを実行できる。

回帰

dmsvrdem.sqlでは、使用するテスト・メトリックは異なるが、分類プログラムとほとんど同じ処理を行う。入力データの選択された属性は前処理(正規化)される。

注意: dmsvrdem.sqlは、新しい自動データ準備機能を説明する。

dmglrdem.sqlGLM回帰(多変量線形回帰)を説明する。

異常検出

dmsvodem.sqlは1クラスSVMを説明する。

相関

dmardemo.sqlは、相関モデルを作成し、高頻度項目セットおよび相関ルールを出力する。

クラスタリング

dmkmdemo.sqlk-Means)およびdmocdemo.sql(O-Cluster)は、クラスタリング・モデルを作成し、クラスタの詳細(各クラスタのルール、重心、ヒストグラムなど)を出力する。モデルがスコアリングされ、各クラスタに関連する確率が出力として戻される。入力データの選択された属性は前処理される。

注意: dmkmdemo.sqlは、新しい自動データ準備機能を説明する。

特徴抽出

dmnmdemo.sqlは、特徴抽出モデルを作成し、モデルの詳細を出力する。モデルがスコアリングされ、各特徴IDと確率が関連付けられる。入力データの選択された属性は前処理(正規化)される。

属性評価

dmaidemo.sqlは、属性評価モデルを作成し、モデルの詳細として重要な属性のリストを出力する。入力データの選択された属性は前処理(ビニング)される。


データ・マイニングSQLスコアリング関数

PL/SQLサンプル・プログラムの大半では、スコアリング用のデータ・マイニングSQL関数を使用します。データ・マイニングのスコアリング関数を使用して、作成したモデルをPL/SQL APIまたはJava APIで適用できます。


注意:

データ・マイニング用SQL関数の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。これらの関数については、『Oracle Data Miningアプリケーション開発者ガイド』でも説明しています。

表8-2に、データ・マイニング関数を使用するサンプル・プログラムを示します。

表8-2 サンプル・プログラムに含まれるデータ・マイニングSQL関数

プログラム名 アルゴリズム 使用されているSQL関数

dmkmdemo.sql

k-Means

CLUSTER_IDCLUSTER_PROBABILITYCLUSTER_SET

dmocdemo.sql

O-Cluster

CLUSTER_ID

dmnmdemo.sql

NMF

FEATURE_IDFEATURE_SETFEATURE_VALUE

dmdtdemo.sql

ディシジョン・ツリー

PREDICTIONPREDICTION_COSTPREDICTION_DETAILSPREDICTION_SET

dmdtxvlddemo.sql

ディシジョン・ツリー

PREDICTION

dmglcdem.sql

GLM分類

PREDICTIONPREDICTION_BOUNDSPREDICTION_PROBABILITY

dmglrdem.sql

GLM回帰

PREDICTIONPREDICTION_BOUNDS

dmsvcdem.sql

SVM分類

PREDICTIONPREDICTION_PROBABILITYPREDICTION_SET

dmsvodem.sql

1クラスSVM

PREDICTIONPREDICTION_PROBABILITYPREDICTION_SET

dmsvrdem.sql

SVM回帰

PREDICTION

dmtxtsvm.sql

テキスト・マイニング

PREDICTIONPREDICTION_PROBABILITY


Javaプログラム

Javaデモでは、Java Data Mining(JDM)1.0.1.1標準に対するOracle固有の拡張機能を実装するOracle Data Mining Java APIの機能の使用例を示します。Javaプログラムでは、データの前処理および基本的なマイニング機能を示します。予測分析、インポート/エクスポートおよびテキスト・マイニングを行うJavaサンプルも用意されています。


参照:

Java APIについては、『Oracle Data Mining Java API Reference』(Javadoc)および『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。

Javaプログラムの概要

表8-3に、Javaサンプル・プログラムの概要を示します。詳細は、ソース・コード中のコメントを参照してください。

表8-3 Javaサンプル・プログラムの概要

マイニング機能またはタスク 説明

分類

分類プログラムでは、様々な前処理手法を示し、次の手順が実行される。

  • トレーニング・データを使用して分類モデルを作成する。

  • モデルの詳細および設定を表示する。

  • テスト・データにモデルを適用し、モデルをテストする。

  • 混同マトリックス、リフト、ROCなどのテスト・メトリックを計算する。

  • スコアリング・データにモデルを適用する。

  • 適用結果を表示する。

  • コスト・マトリックスの影響を受けた、ランク付けされた適用結果を表示する。

dmapplydemo.javaプログラムでは、Naive Bayesモデルの適用方法をいくつか示す。

dmglcdemo.javaGLM分類(2項ロジスティック回帰)を説明する。

回帰

dmsvrdemo.javaでは、使用するテスト・メトリックは異なるが、分類プログラムとほとんど同じ処理を行う。入力データの選択された属性は前処理(正規化)される。

dmglrdemo.javaGLM回帰(多変量線形回帰)を説明する。

相関

dmardemo.javaは、相関モデルを作成し、高頻度項目セットおよび相関ルールを出力する。入力データの選択された属性は前処理(ビニング)される。

クラスタリング

dmkmdemo.javak-Means)およびdmocdemo.java(O-Cluster)は、クラスタリング・モデルを作成し、クラスタの詳細(各クラスタのルール、重心、ヒストグラムなど)を出力する。モデルがスコアリングされ、各クラスタに関連する確率が出力として戻される。入力データの選択された属性は前処理(正規化)される。

特徴抽出

dmnmdemo.javaは、特徴抽出モデルを作成し、モデルの詳細を出力する。モデルがスコアリングされ、各特徴IDと確率が関連付けられる。入力データの選択された属性は前処理(正規化)される。

属性評価

dmaidemo.javaは、属性評価モデルを作成し、モデルの詳細として重要な属性のリストを出力する。入力データの選択された属性は前処理(ビニング)される。

データ変換

dmxfdemo.javaでは、ビニング、クリッピングおよび正規化変換の実行例を示す。

予測分析

dmpademo.javaでは、PREDICT関数、EXPLAIN関数およびPROFILE関数の使用例を示す。

モデルのインポート/エクスポート

dmexpimpdemo.javaは、Naive Bayesモデルを作成し、そのモデルをダンプ・ファイルにエクスポートした後、そのダンプ・ファイルからモデルをインポートする。


テキスト・マイニング・プログラム

Oracle Data Miningでは、Oracle Textのルーチンで前処理されたテキスト列をマイニングできます。

Oracle Textは、テキスト問合せおよびドキュメント分類アプリケーションを作成するテクノロジの1つです。索引付け、単語やテーマの検索、テキスト用機能の表示を行うことができます。Oracle Textは、Oracle Database Enterprise Editionの一般的なインストールに含まれます。そのため、第1章の手順に従ってインストールされたデータベースには、すでにOracle Textが含まれています。

テキスト・マイニング用の前処理段階で、VARCHAR2型またはCLOB型の列から、DM_NESTED_NUMERICALS型のネストした表列が作成されます。ネストした表の各行により、属性名と値が特定されます。型の定義は次のとおりです。

CREATE OR REPLACE TYPE dm_nested_numerical AS OBJECT
  (attribute_name VARCHAR2(4000),
   value          NUMBER)
/
CREATE OR REPLACE TYPE dm_nested_numericals AS TABLE OF dm_nested_numerical

テキスト・ドキュメントからネストした表に抽出された用語は、トレーニング・データまたはスコアリング・データの一般的な属性にすることが可能です。

PL/SQLとJavaの両方のテキスト・マイニング・サンプル・プログラムで、前処理されたテキスト列の分類と特徴抽出の実行例を示します。

PL/SQLでのテキスト・マイニング

3つのPL/SQLサンプル・プログラムで、テキスト・マイニングのプロセスを示します。1つのプログラムでは、マイニング用データの準備に必要な前処理が行われます。あとの2つでは、変換されたテキストを使用するモデルが作成されます。

テキスト変換のデモ

PL/SQL APIを使用してテキスト・マイニング用の列を準備するには、Oracle Textのルーチンを使用して次の一般的な手順を実行する必要があります。

  1. 列にドメイン索引を作成します。

  2. この索引を使用して、列から一時表に用語を抽出します。

  3. 一時表に格納された用語をDM_NESTED_NUMERICALS型の列に移入します。

Oracle Textを使用した用語抽出プロセスは、サンプル・プログラムdmtxtfe.sqlで示しています。ソース・コードには多数のコメントが含まれており、Oracle Data Miningを使用してテキストをマイニング可能な一連の特徴に変換する手順が説明されています。

テキスト変換の詳細は、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。

PL/SQLテキスト・マイニング・サンプル・プログラムのためのテキスト変換

dmsh.sqlスクリプトは、PL/SQLテキスト・マイニング・デモで必要とされるテキスト変換を行います。この種のサンプル・プログラムとしては、Non-Negative Matrix Factorizationを使用して特徴抽出モデルを作成するdmtxtnmf.sqlと、サポート・ベクター・マシンを使用して分類モデルを作成するdmtxtsvm.sqlの2つがあります。どちらのプログラムでも、コメント・データのネストした表列を持つ次の表が使用されます。

MINING_BUILD_NESTED_TEXT
MINING_TEST_NESTED_TEXT
MINING_APPLY_NESTED_TEXT

テキスト・マイニングのサンプル・モデル(PL/SQL)

PL/SQLテキスト・マイニング・デモ・プログラムのdmtxtnmf.sqldmtxtsvm.sqlは、通常のPL/SQLプログラムと同様の方法で実行できます。これらのプログラムで作成されるモデルを、次の例に示します。

SQL> @ %ORACLE_HOME%\RDBMS\demo\dmtxtnmf.sql
SQL> @ %ORACLE_HOME%\RDBMS\demo\dmtxtsvm.sql
SQL> SELECT model_name, mining_function, algorithm
           FROM user_mining_models;MODEL_NAME         MINING_FUNCTION    ALGORITHM       ----------------   ------------------ ------------------------
T_NMF_SAMPLE       FEATURE_EXTRACTION NONNEGATIVE_MATRIX_FACTOR T_SVM_CLAS_SAMPLE  CLASSIFICATION     SUPPORT_VECTOR_MACHINES

Javaでのテキスト・マイニング

2つのJavaサンプル・プログラムで、テキスト・マイニングのプロセスを示します。一方は特徴抽出モデルを作成し、もう一方は分類モデルを作成します。

Javaテキスト・マイニング・サンプル・プログラムのためのテキスト変換

Oracle Data MiningのJava APIでは、用語抽出プロセスを扱うインタフェースを利用できます。Javaでデータ・マイニング・アプリケーションを開発している場合、直接Oracle Textを使用する必要はありません。ただし、データベース内にOracle Textをインストールしておく必要があります。

Javaテキスト・マイニング・デモ内でテキスト変換を実行するには、OraTextTransformインタフェースを使用します。この種のサンプル・プログラムとしては、Non-Negative Matrix Factorizationを使用して特徴抽出モデルを作成するdmtxtnmfdemo.javaと、サポート・ベクター・マシンを使用して分類モデルを作成するdmtxtsvmdemo.javaの2つがあります。どちらのプログラムでも、コメント・データのテキスト列を持つ次の表のデータセットが作成、テストおよび適用されます。

MINING_BUILD_TEXT
MINING_TEST_TEXT
MINING_APPLY_TEXT

テキスト・マイニングのサンプル・モデル(Java)

Javaテキスト・マイニング・サンプル・プログラムのdmtxtnmfdemo.javadmtxtsvmdemo.javaは、通常のJavaプログラムと同様の方法で実行できます。これらのプログラムで作成されるモデルを、次の例に示します。

java dmtxtnmfdemo host:port:SID dmuser password
java dmtxtsvmdemo host:port:SID dmuser password
SQLPLUS dmuser
Enter password: password
SQL> SELECT model_name, mining_function, algorithm
           FROM user_mining_models;MODEL_NAME         MINING_FUNCTION     ALGORITHM       ----------------   ------------------  ------------------------
txtnmfModel_jdm    FEATURE_EXTRACTION  NONNEGATIVE_MATRIX_FACTOR txtsvmModel_jdm    CLASSIFICATION      SUPPORT_VECTOR_MACHINES

サンプル・データ

dmsh.sqlスクリプトは、ユーザーのスキーマにビュー、表および索引を作成します。ビューにより、SHスキーマにある表の顧客データの列が定義されます。このデータは、データ・マイニングのサンプル・プログラムで使用されます。表もSHの同じ列を参照しますが、この表にはテキスト・マイニング用の特別なCOMMENTS列が含まれます。索引は、COMMENTS列のテキストから用語を抽出し、ネストした表列を作成するために使用されます。

データ・マイニング用の顧客データ

データ・マイニング・ユーザーのスキーマ内のビューにより、SHスキーマ内のCUSTOMERSSALESPRODUCTSCOUNTRIESおよびSUPPLEMENTARY_DEMOGRAPHICSの各表のデータの列が定義されます。次のSQL文を使用して、これらのビューをリスト表示できます。

SQL>CONNECT dmuser
Enter password: password
SQL>SELECT view_name FROM user_views;

これらのビューを表8-4に示します。

表8-4 データ・マイニングのサンプル・プログラムで使用されるビュー

ビュー名 説明

MINING_DATA_APPLY_STR_V

O-cluster用スコアリング・データ

MINING_DATA_BUILD_STR_V

O-cluster用トレーニング・データ

MINING_DATA_APPLY_V

データ・マイニング(テキスト・マイニング以外)用スコアリング・データ

MINING_DATA_BUILD_V

データ・マイニング(テキスト・マイニング以外)用トレーニング・データ

MINING_DATA_TEST_V

データ・マイニング(テキスト・マイニング以外)用テスト・データ

MARKET_BASKET_V

相関ルール用データ

MINING_DATA_ONE_CLASS_V

1クラスSVM用データ


ビューの定義をリスト表示すると、SH内の表への参照がわかります。ビューMINING_DATA_BUILD_Vの定義は次のとおりです。

SQL> set long 1000000
SQL> set longc 100000
SQL> set pagesize 100
SQL> SELECT text FROM all_views WHERE
    owner='dmuser3'AND view_name='mining_data_build_v';

      SELECT a.CUST_ID, a.CUST_GENDER, 2003-a.CUST_YEAR_OF_BIRTH AGE,
             a.CUST_MARITAL_STATUS, c.COUNTRY_NAME, a.CUST_INCOME_LEVEL,
             b.EDUCATION, b.OCCUPATION, b.HOUSEHOLD_SIZE, b.YRS_RESIDENCE,
             b.AFFINITY_CARD, b.BULK_PACK_DISKETTES, b.FLAT_PANEL_MONITOR,
             b.HOME_THEATER_PACKAGE, b.BOOKKEEPING_APPLICATION,
             b.PRINTER_SUPPLIES, b.Y_BOX_GAMES, b.OS_DOC_SET_KANJI
       FROM  sh.customers a,
             sh.supplementary_demographics b,
             sh.countries c
       WHERE a.CUST_ID = b.CUST_ID AND a.country_id = c.country_id
             AND a.cust_id between 101501 and 103000

ビューは、サンプル・モデルの作成、テストおよびスコアリングに使用します。それぞれのビューに、CUSTOMER_ID列(ケースID)およびAFFINITY_CARD列(予測モデルで使用されるターゲット)があります。大部分のビューには、1,500人分の顧客データ(1,500の行)があります。1クラスSVMモデルで使用されるビューには、940人分の顧客データが含まれています。

MINING_DATA_BUILD_Vビューのトレーニング・データの列を、次の例に示します。

SQL> DESCRIBE mining_data_build_v

CUST_ID                    NOT NULL            NUMBER
CUST_GENDER                NOT NULL            CHAR(1)
AGE                                            NUMBER
CUST_MARITAL_STATUS                            VARCHAR2(20)
COUNTRY_NAME               NOT NULL            VARCHAR2(40)
CUST_INCOME_LEVEL                              VARCHAR2(30)
EDUCATION                                      VARCHAR2(21)
OCCUPATION                                     VARCHAR2(21)
HOUSEHOLD_SIZE                                 VARCHAR2(21)
YRS_RESIDENCE                                  NUMBER
AFFINITY_CARD                                  NUMBER(10)
BULK_PACK_DISKETTES                            NUMBER(10)
FLAT_PANEL_MONITOR                             NUMBER(10)
HOME_THEATER_PACKAGE                           NUMBER(10)
BOOKKEEPING_APPLICATION                        NUMBER(10)
PRINTER_SUPPLIES                               NUMBER(10)
Y_BOX_GAMES                                    NUMBER(10)
OS_DOC_SET_KANJI                               NUMBER(10)

相関ルール用マーケット・バスケット・データ

相関のデモでは、MARKET_BASKET_Vデータセットを使用します。このデータセットには、SH内のPRODUCTS表の各製品の列およびCUSTOMERS表のCUSTOMER_ID列が含まれています。MARKET_BASKET_Vビューの列を、次の例に示します。

SQL> DESCRIBE market_basket_v

CUST_ID                     NOT NULL         NUMBER
EXTENSION_CABLE                              NUMBER
FLAT_PANEL_MONITOR                           NUMBER
CD_RW_HIGH_SPEED_5_PACK                      NUMBER
ENVOY_256MB_40GB                             NUMBER
ENVOY_AMBASSADOR                             NUMBER
EXTERNAL_8X_CD_ROM                           NUMBER
KEYBOARD_WRIST_REST                          NUMBER
SM26273_BLACK_INK_CARTRIDGE                  NUMBER
MOUSE_PAD                                    NUMBER
MULTIMEDIA_SPEAKERS_3INCH                    NUMBER
OS_DOC_SET_ENGLISH                           NUMBER
SIMM_16MB_PCMCIAII_CARD                      NUMBER
STANDARD_MOUSE                               NUMBER

テキスト・マイニング用の顧客データ

テキスト・マイニングのデモでは、SH内の表の同じ顧客データを使用しますが、追加のテキスト列またはコレクション型列のいずれかが含まれます。このコレクション型は、型DM_NESTED_NUMERICALSのネストした表です。

次のSQL文を使用すると、これらの表をリスト表示できます。

SQL>CONNECT dmuser
Enter password: password
SQL>SELECT table_name FROM user_tables WHERE table_name LIKE '%MINING%';

これらのテキスト・マイニングの表を表8-5に示します。

表8-5 テキスト・マイニング・サンプル・プログラムで使用される表

表名 説明

MINING_APPLY_NESTED_TEXT

DM_NESTED_NUMERICALSCOMMENTS列を持つ適用表

MINING_BUILD_NESTED_TEXT

DM_NESTED_NUMERICALSCOMMENTS列を持つ作成表

MINING_TEST_NESTED_TEXT

DM_NESTED_NUMERICALSCOMMENTS列を持つテスト表

MINING_APPLY_TEXT

VARCHAR2(4000)COMMENTS列を持つ適用表

MINING_BUILD_TEXT

VARCHAR2(4000)COMMENTS列を持つ作成表

MINING_TEST_TEXT

VARCHAR2(4000)COMMENTS列を持つテスト表


MINING_BUILD_TEXTMINING_TEST_TEXTおよびMINING_APPLY_TEXTの各表のCOMMENTS列の型はVARCHAR2(4000)です。

SQL> DESCRIBE mining_build_text
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 CUST_ID                                   NOT NULL NUMBER
 CUST_GENDER                               NOT NULL CHAR(1)
 AGE                                                NUMBER
 CUST_MARITAL_STATUS                                VARCHAR2(20)
 COUNTRY_NAME                              NOT NULL VARCHAR2(40)
 CUST_INCOME_LEVEL                                  VARCHAR2(30)
 EDUCATION                                          VARCHAR2(21)
 OCCUPATION                                         VARCHAR2(21)
 HOUSEHOLD_SIZE                                     VARCHAR2(21)
 YRS_RESIDENCE                                      NUMBER
 AFFINITY_CARD                                      NUMBER(10)
 BULK_PACK_DISKETTES                                NUMBER(10)
 FLAT_PANEL_MONITOR                                 NUMBER(10)
 HOME_THEATER_PACKAGE                               NUMBER(10)
 BOOKKEEPING_APPLICATION                            NUMBER(10)
 PRINTER_SUPPLIES                                   NUMBER(10)
 Y_BOX_GAMES                                        NUMBER(10)
 OS_DOC_SET_KANJI                                   NUMBER(10)
 COMMENTS                                           VARCHAR2(4000)

MINING_*_NESTED_TEXT表のCOMMENTS列の型はDM_NESTED_NUMERICALSです。

SQL> DESCRIBE mining_build_nested_text
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 CUST_ID                                   NOT NULL NUMBER
 CUST_GENDER                               NOT NULL CHAR(1)
 AGE                                                NUMBER
 CUST_MARITAL_STATUS                                VARCHAR2(20)
 COUNTRY_NAME                              NOT NULL VARCHAR2(40)
 CUST_INCOME_LEVEL                                  VARCHAR2(30)
 EDUCATION                                          VARCHAR2(21)
 OCCUPATION                                         VARCHAR2(21)
 HOUSEHOLD_SIZE                                     VARCHAR2(21)
 YRS_RESIDENCE                                      NUMBER
 AFFINITY_CARD                                      NUMBER(10)
 BULK_PACK_DISKETTES                                NUMBER(10)
 FLAT_PANEL_MONITOR                                 NUMBER(10)
 HOME_THEATER_PACKAGE                               NUMBER(10)
 BOOKKEEPING_APPLICATION                            NUMBER(10)
 PRINTER_SUPPLIES                                   NUMBER(10)
 Y_BOX_GAMES                                        NUMBER(10)
 OS_DOC_SET_KANJI                                   NUMBER(10)
 COMMENTS                                           DM_NESTED_NUMERICALS

テキスト列からネストした表列に用語を抽出する方法については、「テキスト・マイニング・プログラム」および『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。