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オンプレミスにのみ適用されます。
 このトピックは、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で管理できます。