Oracle Data Miningには、多数のサンプル・プログラムが用意されています。これらのプログラムでは、PL/SQLおよびJava APIの様々な機能を示しています。
サンプル・プログラムは、データベース内にモデルのセットを作成します。サンプル・ソース・コードには多数のコメントが含まれているので、Oracle Data Mining APIの理解に役立ちます。また、サンプルを編集することにより独自のモデルを作成することも可能です。
この章は、次の項で構成されています。
PL/SQLサンプル・プログラムでは、モデル作成用のDBMS_DATA_MINING
パッケージおよびマイニング・データ変換用のDBMS_DATA_MINING_TRANSFORM
パッケージの使用例を示します。
参照:
|
表8-1に、PL/SQLサンプル・プログラムの概要を示します。各サンプル・プログラムの詳細は、ソース・コード中のコメントを参照してください。
表8-1 PL/SQLサンプル・プログラムの概要
PL/SQLサンプル・プログラムの大半では、スコアリング用のデータ・マイニングSQL関数を使用します。データ・マイニングのスコアリング関数を使用して、作成したモデルをPL/SQL APIまたはJava APIで適用できます。
注意: データ・マイニング用SQL関数の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。これらの関数については、『Oracle Data Miningアプリケーション開発者ガイド』でも説明しています。 |
表8-2に、データ・マイニング関数を使用するサンプル・プログラムを示します。
表8-2 サンプル・プログラムに含まれるデータ・マイニングSQL関数
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アプリケーション開発者ガイド』を参照してください。 |
表8-3に、Javaサンプル・プログラムの概要を示します。詳細は、ソース・コード中のコメントを参照してください。
表8-3 Javaサンプル・プログラムの概要
マイニング機能またはタスク | 説明 |
---|---|
分類 |
分類プログラムでは、様々な前処理手法を示し、次の手順が実行される。
|
回帰 |
|
相関 |
|
クラスタリング |
|
特徴抽出 |
|
属性評価 |
|
データ変換 |
|
予測分析 |
|
モデルのインポート/エクスポート |
|
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の両方のテキスト・マイニング・サンプル・プログラムで、前処理されたテキスト列の分類と特徴抽出の実行例を示します。
3つのPL/SQLサンプル・プログラムで、テキスト・マイニングのプロセスを示します。1つのプログラムでは、マイニング用データの準備に必要な前処理が行われます。あとの2つでは、変換されたテキストを使用するモデルが作成されます。
PL/SQL APIを使用してテキスト・マイニング用の列を準備するには、Oracle Textのルーチンを使用して次の一般的な手順を実行する必要があります。
列にドメイン索引を作成します。
この索引を使用して、列から一時表に用語を抽出します。
一時表に格納された用語をDM_NESTED_NUMERICALS
型の列に移入します。
Oracle Textを使用した用語抽出プロセスは、サンプル・プログラムdmtxtfe.sql
で示しています。ソース・コードには多数のコメントが含まれており、Oracle Data Miningを使用してテキストをマイニング可能な一連の特徴に変換する手順が説明されています。
テキスト変換の詳細は、『Oracle Data Miningアプリケーション開発者ガイド』を参照してください。
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テキスト・マイニング・デモ・プログラムのdmtxtnmf.sql
とdmtxtsvm.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
2つの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テキスト・マイニング・サンプル・プログラムのdmtxtnmfdemo.java
とdmtxtsvmdemo.java
は、通常のJavaプログラムと同様の方法で実行できます。これらのプログラムで作成されるモデルを、次の例に示します。
java dmtxtnmfdemohost
:port
:SID
dmuserpassword
java dmtxtsvmdemohost
:port
:SID
dmuserpassword
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
スキーマ内のCUSTOMERS
、SALES
、PRODUCTS
、COUNTRIES
およびSUPPLEMENTARY_DEMOGRAPHICS
の各表のデータの列が定義されます。次のSQL文を使用して、これらのビューをリスト表示できます。
SQL>CONNECT dmuser
Enter password: password
SQL>SELECT view_name FROM user_views;
これらのビューを表8-4に示します。
表8-4 データ・マイニングのサンプル・プログラムで使用されるビュー
ビュー名 | 説明 |
---|---|
|
O-cluster用スコアリング・データ |
|
O-cluster用トレーニング・データ |
|
データ・マイニング(テキスト・マイニング以外)用スコアリング・データ |
|
データ・マイニング(テキスト・マイニング以外)用トレーニング・データ |
|
データ・マイニング(テキスト・マイニング以外)用テスト・データ |
|
相関ルール用データ |
|
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_BUILD_TEXT
、MINING_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アプリケーション開発者ガイド』を参照してください。