4.8 モデル設定の指定
機械学習モデルの作成時の構成方法について理解します。
機械学習モデルは、作成時に多数の構成設定を使用して構成できます。設定を指定するには、次の表に示す列を持つ設定表を作成し、その表をCREATE_MODEL
に渡します。
CREATE_MODEL2
プロシージャを使用できます。これは、プロシージャで使用できる変数にモデル設定を直接渡すことができます。変数は、DBMS_DATA_MINING.SETTING_LIST
プロシージャを使用して宣言できます。
表4-78 設定表に必要な列
列名 | データ型 |
---|---|
|
|
|
|
例4-4では、サポート・ベクター・マシン(SVM)分類モデルの設定表が作成されます。SVMはデフォルトの分類機能ではないため、ALGO_NAME
設定を使用してこのアルゴリズムを指定します。SVMS_KERNEL_FUNCTION
をSVMS_LINEAR
に設定することにより、モデルは線形カーネルを使用して作成されます。カーネル関数を指定しない場合、アルゴリズムがデータの属性の数に基づいてカーネルを選択します。
例4-5では、SETTING_LIST
の変数に格納されているモデル設定を使用して、モデルを作成します。
通常はモデルに適用される設定と、アルゴリズムに固有の設定があります。モデルの設定は表4-79および表4-80を参照してください。
表4-80 アルゴリズム固有のモデルの設定
アルゴリズム | 説明 |
---|---|
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の「学習タスクの設定」表にリストされています。
例4-4 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;
例4-5 CREATE_MODEL2プロシージャを使用したGLM回帰モデルのモデル設定の指定
DECLARE v_setlist DBMS_DATA_MINING.SETTING_LIST; BEGIN v_setlist('PREP_AUTO') := 'ON'; v_setlist('ALGO_NAME') := 'ALGO_GENERALIZED_LINEAR_MODEL'; v_setlist('GLMS_DIAGNOSTICS_TABLE_NAME') := 'GLMR_DIAG'; v_setlist('GLMS_FTR_SELECTION') := 'GLMS_FTR_SELECTION_ENABLE'; v_setlist('GLMS_FTR_GENERATION') := 'GLMS_FTR_GENERATION_ENABLE'; DBMS_DATA_MINING.CREATE_MODEL2( MODEL_NAME => 'GLM_REGR', MINING_FUNCTION => 'REGRESSION', DATA_QUERY => 'select * from TRAINING_DATA', SET_LIST => v_setlist, CASE_ID_COLUMN_NAME => 'HID', TARGET_COLUMN_NAME => 'MEDV'); END;
4.8.1 コストの指定
デシジョン・ツリー・モデルを作成するためのコスト・マトリックスを指定します。
CLAS_COST_TABLE_NAME
設定は、デシジョン・ツリー・モデルの作成に使用するコスト・マトリックス表の名前を指定します。コスト・マトリックスは、分類モデルにバイアスをかけて、コストのかかる分類ミスを最小化します。コスト・マトリックス表には、次の表に示す列が必要です。
表4-81 コスト・マトリックス表に必要な列
列名 | データ型 |
---|---|
|
有効なターゲット・データ型 |
|
有効なターゲット・データ型 |
|
|
デシジョン・ツリーは、作成時にコスト・マトリックスを指定できる唯一のアルゴリズムです。ただし、スコアリングの際には、どの分類モデルにもコスト・マトリックスを作成して関連付けることができます。
スコアリングにコストを使用する場合は、表4-81に示す列を持つ表を作成し、DBMS_DATA_MINING.ADD_COST_MATRIX
プロシージャを使用してコスト・マトリックス表をモデルに追加します。PREDICTION
関数を呼び出すときに、コスト・マトリックスをインラインで指定することもできます。表3-1で、有効なターゲット・データ型の詳細を示しています。
4.8.4 RモデルのOracle Machine Learningモデル設定の指定
このトピックは、Oracleオンプレミスにのみ適用されます。
ALGO_EXTENSIBLE_LANG
設定の値にRを指定します。アルゴリズムを必要としない一般的な設定(ODMS_PARTITION_COLUMNS
、ODMS_SAMPLING
など)を設定表で組み合せることによって、モデルを作成できます。Rの機械学習モデル専用の次の設定も指定できます。
関連トピック
4.8.4.1 ALGO_EXTENSIBLE_LANG
Oracle Machine Learning for SQLの拡張アルゴリズム・フレームワークの言語を指定するには、ALGO_EXTENSIBLE_LANG
設定を使用します。
現在、R
のみがALGO_EXTENSIBLE_LANG
設定の有効な値です。ALGO_EXTENSIBLE_LANG
の値にRを設定した場合、機械学習モデルは、R言語を使用して作成されます。設定表の次の設定を使用して、Rモデルの特性を指定できます。
関連トピック
4.8.4.2 RALG_BUILD_FUNCTION
R言語を使用するOracle Machine Learning for SQLモデルを作成するために既存の登録済Rスクリプトの名前を指定するには、RALG_BUILD_FUNCTION
設定を使用します。
RALG_BUILD_FUNCTION
設定とALGO_EXTENSIBLE_LANG
設定の両方を指定する必要があります。Rスクリプトは、最初の入力引数としてトレーニング・データ用のRのdata.frame
オブジェクトを持つR関数を定義します。この関数は、Oracle Machine Learningのモデルのオブジェクトを戻します。最初のデータ引数は必須です。RALG_BUILD_FUNCTION
は、追加のモデル作成パラメータを受け入れることができます。
ノート:
入力パラメータの有効な入力は、数値および文字列のスカラー・データ型です。例4-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関数が定義されます。既存のOML4Rセキュリティ制限を使用するOracle Machine Learning for Rスクリプト・リポジトリにスクリプトMY_LM_BUILD_SCRIPT
を登録する必要があります。OML4Rのsys.rqScriptCreate
プロシージャを使用して、スクリプトを登録できます。OML4Rで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}'
関連トピック
4.8.4.2.1 RALG_BUILD_PARAMETER
RALG_BUILD_FUNCTION
入力パラメータは、SQL SELECT
問合せ文フォーマットの数値および文字列スカラー値のリストを指定します。
例4-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;
/
関連トピック
4.8.4.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
設定によって定義され、数値または文字列スカラー型のみを含むことができます。
例4-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)'
関連トピック
4.8.4.4 RALG_DETAILS_FORMAT
モデル・ビュー内の名前および列タイプを指定するには、RALG_DETAILS_FORMAT
設定を使用します。
設定の値は、モデル・ビュー列の名前およびタイプの数値および文字列スカラー・データ型のリストを指定するSELECT
文を含む文字列です。
RALG_DETAILS_FORMAT
とRALG_DETAILS_FUNCTION
設定の両方が指定されている場合、名前DM$VD
<model_name>
によるモデル・ビューが、Rモデルとともに現在のスキーマに作成されます。モデル・ビューの最初の列はPARTITION_NAME
です。パーティション化されていないモデルの場合はNULL
値となります。モデル・ビューの他の列は、RALG_DETAILS_FORMAT
設定によって定義されます。
例4-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;
/
関連トピック
4.8.4.5 RALG_SCORE_FUNCTION
データのスコアリングに使用するRアルゴリズム機械学習モデルに既存の登録済Rスクリプトを指定するには、RALG_SCORE_FUNCTION
設定を使用します。
指定したRスクリプトによりR関数が定義されます。最初の入力引数は、モデル・オブジェクトを定義します。2番目の入力引数は、データのスコアリングに使用されるR data.frame
を定義します。
例4-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
が動作するために必要です。
例4-11 回帰用の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つのターゲット・クラスの予測確率を表します。列名は、ターゲット・クラス名です。
例4-12 分類用の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の順で各クラスタへの距離の値を含む追加列を戻します。
例4-13 クラスタリング用の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から始まる連続した値です。
例4-14 特徴抽出用の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モデルから特徴の中央値をフェッチし、スコア・データから対応する特徴の中央値への距離に基づいて、特徴の係数を計算します。
関連トピック
4.8.4.6 RALG_WEIGHT_FUNCTION
スコアリング内の各属性の重みまたは寄与率を計算する、既存の登録済Rスクリプトの名前を指定するには、RALG_WEIGHT_FUNCTION
設定を使用します。指定したRスクリプトは、SQL関数PREDICTION_DETAILS
で、属性の寄与率を評価するために使用されます。
指定したRスクリプトは、モデル・オブジェクトの最初の入力引数、およびスコアリング・データのR data.frame
の2番目の入力引数を含むR関数を定義します。機械学習機能が分類、クラスタリングまたは特徴抽出の場合、ターゲット・クラス名、クラスタIDまたは特徴IDが3番目の入力引数によって渡され、その特定のクラス、クラスタまたは特徴の重みが計算されます。スクリプトにより、各属性の影響を与える重みが行内に含まれるdata.frame
が戻されます。各行は、その入力スコアリングdata.frame
に対応しています
例4-15 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}'
関連トピック
4.8.4.7 登録済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で管理できます。