31.3 モデルの設定の指定
データ・マイニング・モデルの作成時の構成方法について理解します。
データ・マイニング・モデルは、作成時に多数の構成設定を使用して構成できます。設定を指定するには、次の表に示す列を持つ設定表を作成し、その表をCREATE_MODEL
に渡します。
表31-4 設定表に必要な列
列名 | データ型 |
---|---|
|
|
|
|
例31-1では、サポート・ベクター・マシン(SVM)分類モデルの設定表を作成します。SVMはデフォルトの分類機能ではないため、ALGO_NAME
設定を使用してこのアルゴリズムを指定します。SVMS_KERNEL_FUNCTION
をSVMS_LINEAR
に設定することにより、モデルは線形カーネルを使用して作成されます。カーネル関数を指定しない場合、アルゴリズムがデータの属性の数に基づいてカーネルを選択します。
通常はモデルに適用される設定と、アルゴリズムに固有の設定があります。モデル設定については、表31-5および表31-6に示しています。
表31-5 一般的なモデルの設定
設定 | 説明 |
---|---|
マイニング機能の設定 |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のマイニング機能の設定に関する説明を参照 |
アルゴリズム名 |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のアルゴリズム名に関する説明を参照 |
グローバルなモデルの特性 |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のグローバルな設定に関する説明を参照 |
自動データ準備 |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』の自動データ準備に関する説明を参照 |
表31-6 アルゴリズム固有のモデルの設定
アルゴリズム | 説明 |
---|---|
CUR行列分解 |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_DATA_MINING — アルゴリズムの設定: CUR行列分解に関する項を参照 |
デシジョン・ツリー |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_DATA_MINING — アルゴリズムの設定: デシジョン・ツリーに関する項を参照 |
期待値最大化 |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_DATA_MINING — アルゴリズムの設定: 期待値最大化に関する項を参照 |
明示的セマンティック分析 |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_DATA_MINING — アルゴリズムの設定: 明示的セマンティック分析に関する項を参照 |
指数平滑法 |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_DATA_MINING — アルゴリズムの設定: 指数平滑法モデルに関する項を参照 |
一般化線形モデル |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_DATA_MINING — アルゴリズムの設定: 一般化線形モデルに関する項を参照 |
k-Means |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_DATA_MINING — アルゴリズムの設定: k-Meansに関する項を参照 |
Naive Bayes |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のアルゴリズムの設定: Naive Bayesに関する説明を参照 |
ニューラル・ネットワーク |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_DATA_MINING — アルゴリズムの設定: ニューラル・ネットワークに関する項を参照 |
Non-Negative Matrix Factorization |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_DATA_MINING — アルゴリズムの設定: Non-Negative Matrix Factorizationに関する項を参照 |
O-Cluster |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のアルゴリズムの設定: O-Clusterに関する項を参照 |
ランダム・フォレスト |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_DATA_MINING — アルゴリズムの設定: ランダム・フォレストに関する項を参照 |
特異値分解 |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_DATA_MINING — アルゴリズムの設定: 特異値分解に関する項を参照 |
サポート・ベクター・マシン |
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_DATA_MINING — アルゴリズムの設定: サポート・ベクター・マシンに関する項を参照 |
例31-1 SVM分類モデルの設定表の作成
CREATE TABLE svmc_sh_sample_settings ( setting_name VARCHAR2(30), setting_value VARCHAR2(4000)); BEGIN INSERT INTO svmc_sh_sample_settings (setting_name, setting_value) VALUES (dbms_data_mining.algo_name, dbms_data_mining.algo_support_vector_machines); INSERT INTO svmc_sh_sample_settings (setting_name, setting_value) VALUES (dbms_data_mining.svms_kernel_function, dbms_data_mining.svms_linear); COMMIT; END; /
31.3.1 コストの指定
デシジョン・ツリー・モデルを作成するためのコスト・マトリックスを指定します。
CLAS_COST_TABLE_NAME
設定は、デシジョン・ツリー・モデルの作成に使用するコスト・マトリックス表の名前を指定します。コスト・マトリックスは、分類モデルにバイアスをかけて、コストのかかる分類ミスを最小化します。コスト・マトリックス表には、次の表に示す列が必要です。
表31-7 コスト・マトリックス表に必要な列
列名 | データ型 |
---|---|
|
有効なターゲット・データ型 |
|
有効なターゲット・データ型 |
|
|
デシジョン・ツリーは、作成時にコスト・マトリックスを指定できる唯一のアルゴリズムです。ただし、スコアリングの際には、どの分類モデルにもコスト・マトリックスを作成して関連付けることができます。
スコアリングにコストを使用する場合は、表31-7に示す列を持つ表を作成し、DBMS_DATA_MINING.ADD_COST_MATRIX
プロシージャを使用してコスト・マトリックス表をモデルに追加します。PREDICTION
関数を呼び出すときに、コスト・マトリックスをインラインで指定することもできます。表29-1で、有効なターゲット・データ型の詳細を示しています。
関連トピック
31.3.4 データ・ディクショナリにおけるモデルの設定
データ・ディクショナリ・ビューのALL/USER/DBA_MINING_MODEL_SETTINGS
について説明します。
マイニング・モデルの設定に関する情報は、データ・ディクショナリ・ビューALL/USER/DBA_MINING_MODEL_SETTINGS
から取得できます。ALL
接頭辞を使用した場合、このビューは、現在のユーザーがアクセスできるモデルの設定に関する情報を戻します。USER
接頭辞を使用した場合は、ユーザー・スキーマ内のモデルの設定に関する情報を戻します。DBA
接頭辞を使用できるのはDBAのみです。
ALL_MINING_MODEL_SETTINGS
の列は次のとおりです。各列の説明は、次の表を参照してください
SQL> describe all_mining_model_settings Name Null? Type ----------------------------------------- -------- ---------------------------- OWNER NOT NULL VARCHAR2(30) MODEL_NAME NOT NULL VARCHAR2(30) SETTING_NAME NOT NULL VARCHAR2(30) SETTING_VALUE VARCHAR2(4000) SETTING_TYPE VARCHAR2(7)
表31-10 ALL_MINING_MODEL_SETTINGS
列 | 説明 |
---|---|
|
マイニング・モデルの所有者。 |
|
マイニング・モデルの名前。 |
|
設定の名前。 |
|
設定の値。 |
|
|
次の問合せは、サポート・ベクター・マシン(SVM)の分類モデルSVMC_SH_CLAS_SAMPLE
の設定をリストします。ALGO_NAME
、CLAS_WEIGHTS_TABLE_NAME
およびSVMS_KERNEL_FUNCTION
の設定はユーザーが指定しています。これらの設定は、モデルの設定表で指定されています。
例31-2 ALL_MINING_MODEL_SETTINGS
SQL> COLUMN setting_value FORMAT A35 SQL> SELECT setting_name, setting_value, setting_type FROM all_mining_model_settings WHERE model_name in 'SVMC_SH_CLAS_SAMPLE'; SETTING_NAME SETTING_VALUE SETTING ------------------------------ ----------------------------------- ------- SVMS_ACTIVE_LEARNING SVMS_AL_ENABLE DEFAULT PREP_AUTO OFF DEFAULT SVMS_COMPLEXITY_FACTOR 0.244212 DEFAULT SVMS_KERNEL_FUNCTION SVMS_LINEAR INPUT CLAS_WEIGHTS_TABLE_NAME svmc_sh_sample_class_wt INPUT SVMS_CONV_TOLERANCE .001 DEFAULT ALGO_NAME ALGO_SUPPORT_VECTOR_MACHINES INPUT
31.3.5 Rモデルのマイニング・モデル設定の指定
Rモデルのマイニング・モデル設定によって、モデルの特性が決定されます。mining_model_table
でマイニング・モデル設定を指定できます。
ODMS_PARTITION_COLUMNS
、ODMS_SAMPLING
など、アルゴリズムを必要としない一般的な設定を組み合せることで、マイニング・モデル設定を使用してRモデルを作成できます。次の設定は、Rマイニング・モデルに対して排他的であり、Rマイニング・モデルの指定を可能にします。
関連トピック
31.3.5.1 ALGO_EXTENSIBLE_LANG
拡張可能アルゴリズムによりOracle Data Miningフレームワークを指定するには、ALGO_EXTENSIBLE_LANG
設定を使用します。
現在、R
のみがALGO_EXTENSIBLE_LANG
の有効値です。ALGO_EXTENSIBLE_LANG
の値がRに設定されている場合、マイニング・モデルは、R言語を使用して作成されます。model_setting_table
の次の設定を使用して、Rモデルの作成、スコアおよび表示を指定できます。
関連トピック
31.3.5.2 RALG_BUILD_FUNCTION
Rアルゴリズムのマイニング・モデル作成に対する、既存の登録済Rスクリプトの名前を指定するには、RALG_BUILD_FUNCTION
を使用します。
model_setting_table
でRALG_BUILD_FUNCTION
とALGO_EXTENSIBLE_LANG
の両方を指定する必要があります。Rスクリプトにより、トレーニング・データに対するdata.frame
の最初の入力引数を含むR関数が定義され、Rモデル・オブジェクトが戻されます。最初のデータ引数は必須です。RALG_BUILD_FUNCTION
は、追加のモデル作成パラメータを受け入れることができます。
ノート:
入力パラメータの有効な入力は、数値および文字列のスカラー・データ型です。例31-3 RALG_BUILD_FUNCTIONの例
この例は、model_setting_table
でのモデルの作成に使用されるRスクリプトMY_LM_BUILD_SCRIPT
の名前の指定方法を示しています。
Begin
insert into model_setting_table values
(dbms_data_mining.ralg_build_function,'MY_LM_BUILD_SCRIPT');
End;
/
RスクリプトMY_LM_BUILD_SCRIPT
により、LMモデルを作成するR関数が定義されます。既存のOREセキュリティ制限を使用するRスクリプト・リポジトリにスクリプトMY_LM_BUILD_SCRIPT
を登録する必要があります。Oracle R Enterprise API sys.rqScriptCreate
を使用して、スクリプトを登録できます。Oracle R EnterpriseでRスクリプトを登録するにはRQADMIN
ロールが必要です。
たとえば、次のようになります。
Begin
sys.rqScriptCreate('MY_LM_BUILD_SCRIPT', 'function(data, formula, model.frame) {lm(formula = formula, data=data, model = as.logical(model.frame)}');
End;
/
クラスタリングと特徴抽出のマイニング機能のモデル作成では、戻りRモデルでR属性のdm$nclus
およびdm$nfeat
を設定して、クラスタと特徴の数をそれぞれ指定する必要があります。
RスクリプトMY_KM_BUILD_SCRIPT
により、クラスタリング用のk-Meansモデルを作成するR関数が定義されます。R属性dm$nclus
は、戻りクラスタリング・モデル用のクラスタ数で設定されます。
'function(dat) {dat.scaled <- scale(dat)
set.seed(6543); mod <- list()
fit <- kmeans(dat.scaled, centers = 3L)
mod[[1L]] <- fit
mod[[2L]] <- attr(dat.scaled, "scaled:center")
mod[[3L]] <- attr(dat.scaled, "scaled:scale")
attr(mod, "dm$nclus") <- nrow(fit$centers)
mod}'
RスクリプトMY_PCA_BUILD_SCRIPT
により、PCAモデルを作成するR関数が定義されます。R属性dm$nfeat
は、戻り特徴抽出モデル用の特徴数で設定されます。
'function(dat) {
mod <- prcomp(dat, retx = FALSE)
attr(mod, "dm$nfeat") <- ncol(mod$rotation)
mod}'
関連トピック
31.3.5.2.1 RALG_BUILD_PARAMETER
RALG_BUILD_FUNCTION
入力パラメータは、SQL SELECT
問合せ文フォーマットの数値および文字列スカラー値のリストを指定します。
例31-4 RALG_BUILD_PARAMETERの例
RALG_BUILD_FUNCTION
入力パラメータは、数値および文字列のスカラー値のリストである必要があります。入力パラメータはオプションです。
'SELECT value parameter name ...FROM dual'
RALG_BUILD_PARAMETER
を使用して、入力引数'formula'
の式、および入力引数'model.frame'
の数値ゼロを指定する方法を示しています。これらの入力引数は、RALG_BUILD_FUNCTION
パラメータで使用されるRスクリプトの関数シグネチャと一致する必要があります。 Begin
insert into model_setting_table values
(dbms_data_mining.ralg_build_parameter, 'select ''AGE ~ .'' as "formula", 0 as "model.frame" from dual');
End;
/
関連トピック
31.3.5.3 RALG_DETAILS_FUNCTION
RALG_DETAILS_FUNCTION
は、data.frame
で戻されるRモデル・メタデータを指定します。
モデル情報を生成する、既存の登録済Rスクリプトの名前を指定するには、RALG_DETAILS_FUNCTION
を使用します。指定されたRスクリプトにより、Rモデル・オブジェクトの最初の入力引数を含むR関数が定義されます。R関数の出力はdata.frame
となる必要があります。data.frame
の列は、RALG_DETAILS_FORMAT
によって定義され、数値または文字列スカラー型のみを含むことができます。
例31-5 RALG_DETAILS_FUNCTIONの例
model_setting_table
のRスクリプトMY_LM_DETAILS_SCRIPT
の名前の指定方法を示しています。このスクリプトにより、モデル情報の提供に使用されるR関数が定義されます。 Begin
insert into model_setting_table values
(dbms_data_mining.ralg_details_function, 'MY_LM_DETAILS_SCRIPT');
End;
/
MY_LM_DETAILS_SCRIPT
は次のように登録されます。 'function(mod) data.frame(name=names(mod$coefficients),
coef=mod$coefficients)'
関連トピック
31.3.5.3.1 RALG_DETAILS_FORMAT
モデル・ビュー内の名前および列タイプを指定するには、RALG_DETAILS_FORMAT
パラメータを使用します。これは、モデル・ビュー列の名前およびタイプの数値および文字列スカラー・データ型のリストを指定するSELECT
問合せを含む文字列です。
RALG_DETAILS_FORMAT
とRALG_DETAILS_FUNCTION
の両方が指定されている場合、名前DM$VD
<model_name>
によるモデル・ビューが、Rモデルとともに現在のスキーマに作成されます。モデル・ビューの最初の列はPARTITION_NAME
です。パーティション化されていないモデルの場合NULL値となります。モデル・ビューの他の列は、RALG_DETATLS_FORMAT
によって定義されます。
例31-6 RALG_DETAILS_FORMATの例
partition_name
の後にvarchar2
列のattr_name
および数値列coef_value
が含まれます。Begin
insert into model_setting_table values
(dbms_data_mining.ralg_details_format, 'select cast(''a'' as varchar2(20)) as attr_name, 0 as coef_value from dual');
End;
/
関連トピック
31.3.5.4 RALG_SCORE_FUNCTION
mining_model_table
のRアルゴリズム・マイニング・モデル・スコアの既存の登録済Rスクリプトを指定するには、RALG_SCORE_FUNCTION
を使用します。
指定したRスクリプトによりR関数が定義されます。最初の入力引数は、モデル・オブジェクトを定義します。2番目の入力引数は、データのスコアリングに使用されるdata.frame
を定義します。
例31-7 RALG_SCORE_FUNCTIONの例
data.frame.
のデータをスコアリングする方法を示しています引数オブジェクトはR線形モデルです。引数newdata
には、data.frame
内のスコアリング・データが含まれます。 function(object, newdata) {res <- predict.lm(object, newdata = newdata, se.fit = TRUE); data.frame(fit=res$fit, se=res$se.fit, df=summary(object)$df[1L])}
この例では、次のようになります。
-
object
は、LMモデルを示します -
newdata
は、スコアリングdata.frameを示します
指定したR関数の出力はdata.frame
となる必要があります。各行は、入力data.frame
の対応するスコアリング・データの予測を表しています。data.frame
の列は、次のようにマイニング機能固有です。
回帰: 予測対象のターゲット値の単一の数値列であり、モデル適合の標準誤差および自由度の2つのオプション列があります。オプション列は、問合せ関数PREDICTION_BOUNDS
が動作するために必要です。
例31-8 回帰用のRALG_SCORE_FUNCTIONの例
この例は、model_setting_table
でのモデルのスコアリングに使用されるRスクリプトMY_LM_PREDICT_SCRIPT
の名前の指定方法を示しています。
Begin
insert into model_setting_table values
(dbms_data_mining.ralg_score_function, 'MY_LM_PREDICT_SCRIPT');
End;
/
MY_LM_PREDICT_SCRIPT
は次のように登録されます。 function(object, newdata) {data.frame(pre = predict(object, newdata = newdata))}
分類: 各列は、1つのターゲット・クラスの予測確率を表します。列名は、ターゲット・クラス名です。
例31-9 分類用のRALG_SCORE_FUNCTIONの例
この例は、model_setting_table
でのロジット分類モデルのスコアリングに使用されるRスクリプトMY_LOGITGLM_PREDICT_SCRIPT
の名前の指定方法を示しています。
Begin
insert into model_setting_table values
(dbms_data_mining.ralg_score_function, 'MY_LOGITGLM_PREDICT_SCRIPT');
End;
/
MY_LOGITGLM_PREDICT_SCRIPT
は次のように登録されます。これは、"0"と "1"の2つのターゲット・クラスを持つロジット分類です。'function(object, newdata) {
pred <- predict(object, newdata = newdata, type="response");
res <- data.frame(1-pred, pred);
names(res) <- c("0", "1");
res}'
クラスタリング: 各列は、1つのクラスタの予測確率を表します。列は、クラスタIDの順に並べられます。各クラスタにはクラスタIDが割り当てられ、これは1から始まる連続した値です。RモデルでCLUSTER_DISTANCE
をサポートするには、Rスコア・ファンクションの出力は、予測確率の列の後に、クラスタIDの順で各クラスタへの距離の値を含む追加列を戻します。
例31-10 クラスタリング用のRALG_SCORE_FUNCTIONの例
この例は、model_setting_table
でのモデルのスコアリングに使用されるRスクリプトMY_CLUSTER_PREDICT_SCRIPT
の名前の指定方法を示しています。
Begin
insert into model_setting_table values
(dbms_data_mining.ralg_score_function, 'MY_CLUSTER_PREDICT_SCRIPT');
End;
/
MY_CLUSTER_PREDICT_SCRIPT
は次のように登録されます。'function(object, dat){
mod <- object[[1L]]; ce <- object[[2L]]; sc <- object[[3L]];
newdata = scale(dat, center = ce, scale = sc);
centers <- mod$centers;
ss <- sapply(as.data.frame(t(centers)),
function(v) rowSums(scale(newdata, center=v, scale=FALSE)^2));
if (!is.matrix(ss)) ss <- matrix(ss, ncol=length(ss));
disp <- -1 / (2* mod$tot.withinss/length(mod$cluster));
distr <- exp(disp*ss);
prob <- distr / rowSums(distr);
as.data.frame(cbind(prob, sqrt(ss)))}'
特徴抽出: 各列は、1つの特徴の係数値を表します。列は、特徴IDの順に並べられます。各特徴には特徴IDが割り当てられ、これは1から始まる連続した値です。
例31-11 特徴抽出用のRALG_SCORE_FUNCTIONの例
この例は、model_setting_table
でのモデルのスコアリングに使用されるRスクリプトMY_FEATURE_EXTRACTION_SCRIPT
の名前の指定方法を示しています。
Begin
insert into model_setting_table values
(dbms_data_mining.ralg_score_function, 'MY_FEATURE_EXTRACTION_SCRIPT');
End;
/
MY_FEATURE_EXTRACTION_SCRIPT
は次のように登録されます。 'function(object, dat) { as.data.frame(predict(object, dat)) }'
この関数は、Rモデルから特徴の中央値をフェッチし、スコア・データから対応する特徴の中央値への距離に基づいて、特徴の係数を計算します。
関連トピック
31.3.5.5 RALG_WEIGHT_FUNCTION
スコアリング内の各属性の重みまたは寄与率を計算する、既存の登録済Rスクリプトの名前を指定するには、RALG_WEIGHT_FUNCTION
を使用します。指定したRスクリプトは、問合せ関数PREDICTION_DETAILS
で、属性の寄与率を評価するために使用されます。
指定したRスクリプトは、モデル・オブジェクトの最初の入力引数、およびスコアリング・データのdata.frame
の2番目の入力引数を含むR関数を定義します。マイニング機能が分類、クラスタリングまたは特徴抽出の場合、ターゲット・クラス名、クラスタIDまたは特徴IDが3番目の入力引数によって渡され、その特定のクラス、クラスタまたは特徴の重みが計算されます。スクリプトにより、各属性の影響を与える重みが行内に含まれるdata.frame
が戻されます。各行は、その入力スコアリングdata.frame
に対応しています。
例31-12 RALG_WEIGHT_FUNCTIONの例
model_setting_table
でのRモデル属性の重みまたは寄与率を計算するRスクリプトMY_PREDICT_WEIGHT_SCRIPT
の名前の指定方法を示しています。Begin
insert into model_setting_table values
(dbms_data_mining.ralg_weight_function, 'MY_PREDICT_WEIGHT_SCRIPT');
End;
/
MY_PREDICT_WEIGHT_SCRIPT
は次のように登録されます。'function(mod, data) { coef(mod)[-1L]*data }'
MY_PREDICT_WEIGHT_SCRIPT
は次のように登録されます。'function(mod, dat, clas) {
v <- predict(mod, newdata=dat, type = "response");
v0 <- data.frame(v, 1-v); names(v0) <- c("0", "1");
res <- data.frame(lapply(seq_along(dat),
function(x, dat) {
if(is.numeric(dat[[x]])) dat[,x] <- as.numeric(0)
else dat[,x] <- as.factor(NA);
vv <- predict(mod, newdata = dat, type = "response");
vv = data.frame(vv, 1-vv); names(vv) <- c("0", "1");
v0[[clas]] / vv[[clas]]}, dat = dat));
names(res) <- names(dat);
res}'
関連トピック
31.3.5.6 登録済Rスクリプト
RALG_*_FUNCTION
は、Rスクリプト・リポジトリ内に存在するRスクリプトを指定する必要があります。Rスクリプトは、Oracle R Enterpriseを使用すると登録できます。
RALG_*_FUNCTION
には、次の機能があります。
-
RALG_BUILD_FUNCTION
-
RALG_DETAILS_FUNCTION
-
RALG_SCORE_FUNCTION
-
RALG_WEIGHT_FUNCTION
ノート:
Rモデルが機能するためには、RスクリプトがRスクリプト・リポジトリに存在する必要があります。Rスクリプトは、Oracle Enterprise R (ORE)を通じて登録できます。Rスクリプトを登録するには、RQADMIN
ロールが必要です。Rモデルを作成したら、この指定したRスクリプトの名前がモデルの設定になります。Rモデルが機能し続けるためには、このRスクリプトがRスクリプト・リポジトリに存在する必要があります。
Rモデルを作成、スコアリングおよび表示するために使用されるRメモリーも、Oracle Enterprise Rで管理できます。