36.7 モデル設定の指定
モデルは、モデル設定を指定して構成できます。
機械学習モデルは、作成時に多数の構成設定を使用して構成できます。CREATE_MODEL
またはCREATE_MODEL2
プロシージャでモデル設定を指定します。CREATE_MODEL
プロシージャで設定を指定するには、次の表に示す列を持つ設定表を作成し、その表をプロシージャ内で渡します。
また、CREATE_MODEL2
プロシージャを使用して、プロシージャ内で使用できる変数にモデル設定を直接渡すこともできます。変数は、DBMS_DATA_MINING.SETTING_LIST
プロシージャを使用して宣言できます。
表36-9 設定表に必要な列
列名 | データ型 |
---|---|
|
|
|
|
例36-3では、サポート・ベクター・マシン(SVM)分類モデルの設定表が作成されます。SVMはデフォルトの分類機能ではないため、ALGO_NAME
設定を使用してこのアルゴリズムを指定します。SVMS_KERNEL_FUNCTION
をSVMS_LINEAR
に設定することにより、モデルは線形カーネルを使用して作成されます。カーネル関数を指定しない場合、アルゴリズムがデータの属性の数に基づいてカーネルを選択します。
例36-4では、SETTING_LIST
の変数に格納されているモデル設定を使用して、モデルを作成します。
通常はモデルに適用される設定と、アルゴリズムに固有の設定があります。モデルの設定は表36-10および表36-11を参照してください。
表36-10 一般的なモデルの設定
設定 | 説明 |
---|---|
機械学習ファンクションの設定 |
|
アルゴリズム名 |
|
グローバルなモデルの特性 |
|
自動データ準備 |
表36-11 アルゴリズム固有のモデルの設定
アルゴリズム | 説明 |
---|---|
CUR行列分解 |
|
デシジョン・ツリー |
|
期待値の最大化 |
|
明示的セマンティック分析 |
|
指数平滑法 |
|
一般化線形モデル |
|
k-Means |
|
多変量状態推定法 - 逐次確率比検定 |
|
Naive Bayes |
|
ニューラル・ネットワーク |
|
Non-Negative Matrix Factorization |
DBMS_DATA_MINING -アルゴリズムの設定: Non-Negative Matrix Factorization |
O-Cluster |
|
ランダム・フォレスト |
|
特異値分解 |
|
サポート・ベクター・マシン |
|
XGBoost |
ノート:
XGBoostの目標には、分類機能モデルにのみ適用されるものもあれば、回帰機能モデルにのみ適用されるものもあります。互換性のないobjective
値を指定すると、エラーが発生します。DBMS_DATA_MINING.CREATE_MODEL
プロシージャで、DBMS_DATA_MINING.CLASSIFICATION
を関数として指定した場合、使用できる目標値はbinary
値およびmulti
値のみです。例外の1つはbinary: logitraw
で、これは、連続値を生成して回帰モデルにのみ適用されます。DBMS_DATA_MINING.REGRESSION
を関数として指定する場合は、binary: logitraw
またはcount
、rank
、reg
およびsurvival
のいずれかの値を目標として指定できます。
XGBoostの目標の設定値は、DBMS_DATA_MINING — アルゴリズムの設定: XGBoostの「学習タスクの設定」表にリストされています。
例36-3 CREATE.MODELプロシージャを使用した設定表の作成および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; / -- Create the model using the specified settings BEGIN DBMS_DATA_MINING.CREATE_MODEL( model_name => 'svm_model', mining_function => dbms_data_mining.classification, data_table_name => 'mining_data_build_v', case_id_column_name => 'cust_id', target_column_name => 'affinity_card', settings_table_name => 'svmc_sh_sample_settings'); END;
例36-4 CREATE_MODEL2プロシージャを使用したSVM分類モデルのモデル設定の指定
DECLARE v_setlist DBMS_DATA_MINING.SETTING_LIST; BEGIN v_setlist('PREP_AUTO') := 'ON'; v_setlist('ALGO_NAME') := 'ALGO_SUPPORT_VECTOR_MACHINES'; v_setlist('SVMS_KERNEL_FUNCTION') := 'SVMS_LINEAR'; DBMS_DATA_MINING.CREATE_MODEL2( MODEL_NAME => 'SVM_MODEL', MINING_FUNCTION => 'CLASSIFICATION', DATA_QUERY => 'select * from mining_data_build_v', SET_LIST => v_setlist, CASE_ID_COLUMN_NAME => 'CUST_ID, TARGET_COLUMN_NAME => 'AFFINITY_CARD'); END;
36.7.1 コストの指定
デシジョン・ツリー・モデルを作成するためのコスト・マトリックスを指定します。
CLAS_COST_TABLE_NAME
設定は、デシジョン・ツリー・モデルの作成に使用するコスト・マトリックス表の名前を指定します。コスト・マトリックスは、分類モデルにバイアスをかけて、コストのかかる分類ミスを最小化します。コスト・マトリックス表には、次の表に示す列が必要です。
表36-12 コスト・マトリックス表に必要な列
列名 | データ型 |
---|---|
|
有効なターゲット・データ型 |
|
有効なターゲット・データ型 |
|
|
デシジョン・ツリーは、作成時にコスト・マトリックスを指定できる唯一のアルゴリズムです。ただし、スコアリングの際には、どの分類モデルにもコスト・マトリックスを作成して関連付けることができます。
スコアリングにコストを使用する場合は、表36-12に示す列がある表を作成し、DBMS_DATA_MINING.ADD_COST_MATRIX
プロシージャを使用してコスト・マトリックス表をモデルに追加します。PREDICTION
関数を呼び出すときに、コスト・マトリックスをインラインで指定することもできます。表35-1で、有効なターゲット・データ型の詳細を示しています。
36.7.4 データ・ディクショナリにおけるモデルの設定
データ・ディクショナリ・ビューのALL/USER/DBA_MINING_MODEL_SETTINGS
について説明します。
Oracle Machine Learningモデルの設定に関する情報は、データ・ディクショナリ・ビュー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)
表36-15 ALL_MINING_MODEL_SETTINGS
列 | 説明 |
---|---|
|
機械学習モデルの所有者。 |
|
機械学習モデルの名前。 |
|
設定の名前。 |
|
設定の値。 |
|
|
次の問合せでは、サポート・ベクター・マシン(SVM)分類モデルSVMC_SH_CLAS_SAMPLEの設定をリスト表示します。ALGO_NAME
、CLAS_WEIGHTS_TABLE_NAME
およびSVMS_KERNEL_FUNCTION
の設定はユーザーが指定しています。これらの設定は、モデルの設定表で指定されています。SVMC_SH_CLAS_SAMPLEモデルは、oml4sql-classification-svm.sql
の例で作成します。
例36-5 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
36.7.5 Rモデルに対応するOracle Machine Learningモデルの設定の指定
このトピックは、Oracleオンプレミスにのみ適用されます。
ALGO_EXTENSIBLE_LANG
設定値にRを指定します。ODMS_PARTITION_COLUMNS
やODMS_SAMPLING
など、アルゴリズムを必要としない一般的な設定表を組み合せることでモデルを作成できます。また、次の設定を指定することもできます。これらは、R機械学習モデルに対して排他的な設定です。
関連トピック
36.7.5.1 ALGO_EXTENSIBLE_LANG
ALGO_EXTENSIBLE_LANG
設定は、Oracle Machine Learning for SQL拡張可能アルゴリズム・フレームワークの言語を指定するために使用します。
現在、ALGO_EXTENSIBLE_LANG
に有効な値はR
のみです。ALGO_EXTENSIBLE_LANG
の値をRに設定すると、機械学習のモデルはR言語を使用して作成されるようになります。設定表で次男設定を使用すると、Rモデルの特性を指定できます。
関連トピック
36.7.5.2 RALG_BUILD_FUNCTION
RALG_BUILD_FUNCTION
設定は、R言語を使用したOracle Machine Learning for SQLモデルを作成する場合に、既存の登録済Rスクリプトの名前を指定するために使用します。
RALG_BUILD_FUNCTION
設定とALGO_EXTENSIBLE_LANG
設定の両方を指定する必要があります。このRスクリプトでは、最初の引数としてトレーニング・データ用のR data.frame
オブジェクトを受け取るR関数を定義します。この関数は、Oracle Machine Learningモデル・オブジェクトを返します。最初のデータ引数は必須です。RALG_BUILD_FUNCTION
は、追加のモデル作成パラメータを受け入れることができます。
ノート:
入力パラメータの有効な入力は、数値および文字列のスカラー・データ型です。例36-6 RALG_BUILD_FUNCTIONの例
この例は、モデルの作成に使用する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関数が定義されます。スクリプトMY_LM_BUILD_SCRIPT
は、既存のOML4Rセキュリティ制限を使用するOracle Machine Learning for Rスクリプト・リポジトリに登録する必要があります。スクリプトの登録には、OML4R sys.rqScriptCreate
を使用できます。Rスクリプトを登録するために、OML4Rには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}'
関連トピック
36.7.5.2.1 RALG_BUILD_PARAMETER
RALG_BUILD_FUNCTION
入力パラメータは、SQL SELECT
問合せ文フォーマットの数値および文字列スカラー値のリストを指定します。
例36-7 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;
/
関連トピック
36.7.5.3 RALG_DETAILS_FUNCTION
RALG_DETAILS_FUNCTION
では、R data.frame
で返されるRモデル・メタデータを指定します。
モデル情報を生成する、既存の登録済Rスクリプトの名前を指定するには、RALG_DETAILS_FUNCTION
を使用します。このスクリプトでは、Rモデル・オブジェクトの最初の入力引数を含めるR関数を定義します。R関数の出力はdata.frame
となる必要があります。data.frame
の列は、RALG_DETAILS_FORMAT
によって定義され、数値または文字列スカラー型のみを格納できます。
例36-8 RALG_DETAILS_FUNCTIONの例
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)'
関連トピック
36.7.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_DETAILS_FORMAT
設定によって定義されます。
例36-9 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;
/
関連トピック
36.7.5.4 RALG_SCORE_FUNCTION
RALG_SCORE_FUNCTION
設定は、データのスコアリングに使用するRアルゴリズム機械学習モデルに応じた既存の登録済Rスクリプトを指定するために使用します。
指定したRスクリプトによりR関数が定義されます。最初の入力引数は、モデル・オブジェクトを定義します。2番目の入力引数では、データのスコアリングに使用されるR data.frame
を定義します。
例36-10 RALG_SCORE_FUNCTIONの例
data.frame.
のデータをスコアリングする方法を示しています関数引数object
はLMモデルです。引数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])}
R関数の出力はdata.frame
となる必要があります。各行は、入力data.frame
の対応するスコアリング・データの予測を表しています。data.frame
の列は、次のように機械学習ファンクションに固有です。
回帰: 予測対象のターゲット値の単一の数値列であり、モデル適合の標準誤差および自由度の2つのオプション列があります。オプションの列は、SQL関数PREDICTION_BOUNDS
の動作に必要なものです。
例36-11 回帰用のRALG_SCORE_FUNCTIONの例
この例は、モデルのスコアリングに使用するRスクリプトMY_LM_PREDICT_SCRIPT
の名前をモデル設定表model_setting_table
で指定する方法を示しています。
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つのターゲット・クラスの予測確率を表します。列名は、ターゲット・クラス名です。
例36-12 分類用のRALG_SCORE_FUNCTIONの例
この例は、ロジット分類モデルのスコアリングに使用されるRスクリプトMY_LOGITGLM_PREDICT_SCRIPT
の名前をモデル設定表model_setting_table
で指定する方法を示しています。
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の順で各クラスタへの距離の値を含む追加列を戻します。
例36-13 クラスタリング用のRALG_SCORE_FUNCTIONの例
この例は、モデルのスコアリングに使用するRスクリプトMY_CLUSTER_PREDICT_SCRIPT
の名前をモデル設定表model_setting_table
で指定する方法を示しています。
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の順に並べられます。特徴ごとに、1から始まる連続した値の特徴IDが割り当てられます。
例36-14 特徴抽出用のRALG_SCORE_FUNCTIONの例
この例は、モデルのスコアリングに使用するRスクリプトMY_FEATURE_EXTRACTION_SCRIPT
の名前をモデル設定表model_setting_table
で指定する方法を示しています。
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モデルから特徴の中央値をフェッチし、スコア・データから対応する特徴の中央値への距離に基づいて、特徴の係数を計算します。
関連トピック
36.7.5.5 RALG_WEIGHT_FUNCTION
RALG_WEIGHT_FUNCTION
設定は、スコアリング内の各属性の重みまたは寄与率を計算する、既存の登録済Rスクリプトの名前を指定するために使用します。指定したRスクリプトは、寄与率を評価するためにSQL関数PREDICTION_DETAILS
で使用されます。
指定したRスクリプトでは、モデル・オブジェクトの最初の入力引数と、スコアリング・データのR data.frame
の2番目の入力引数が含まれているR関数を定義します。機械学習ファンクションが分類、クラスタリングまたは特徴抽出の場合は、3番目の入力引数でターゲット・クラス名、クラスタIDまたは特徴IDが渡され、その特定のクラス、クラスタまたは特徴の重みが計算されます。スクリプトにより、各属性の影響を与える重みが行内に含まれるdata.frame
が戻されます。各行は、その入力スコアリングdata.frame
に対応しています
例36-15 RALG_WEIGHT_FUNCTIONの例
MY_PREDICT_WEIGHT_SCRIPT
の名前をmodel_setting_table
で指定しています。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}'
関連トピック
36.7.5.6 登録済Rスクリプト
RALG_*_FUNCTION
設定では、Oracle Machine Learning for Rスクリプト・リポジトリに存在するRスクリプトを指定する必要があります。
Rスクリプトの登録には、OML4R SQLプロシージャsys.rqScriptCreate
を使用できます。スクリプトを登録する場合は、RQADMIN
ロールが必要になります。
RALG_*_FUNCTION
設定には、次の関数が含まれています。
-
RALG_BUILD_FUNCTION
-
RALG_DETAILS_FUNCTION
-
RALG_SCORE_FUNCTION
-
RALG_WEIGHT_FUNCTION
ノート:
Rスクリプトは、Rモデルが機能するようにOML4Rスクリプト・リポジトリに存在している必要があります。Rモデルの作成後には、指定したRスクリプトの名前がモデル設定になります。これらのRスクリプトは、Rモデルが継続的に機能するようにOML4Rスクリプト・リポジトリに存在している必要があります。
Rモデルの作成、スコアリングおよび表示に使用されるRメモリーは、OML4Rによって管理することもできます。