7.11 一般化線形モデル

ore.odmGLM関数は一般化線形モデル(GLM)を構築しますが、これは線形モデル(線形回帰)のクラスを含み、このクラスを拡張したものです。

一般化線形モデルは、実際には違反されることが多い線形モデルの制限を緩和したものです。たとえば、2値(yes/noまたは0/1)応答は、クラス間で同じ分散を持ちません。

GLMはパラメトリックなモデリング手法です。パラメトリック・モデルでは、データの分散を仮定します。仮定が満たされる場合、パラメトリック・モデルはノンパラメトリック・モデルよりも効率的になります。

このタイプのモデルの作成では、どの程度仮定が満たされるかを見極めることが課題となります。このため、良質なパラメトリック・モデルを作成するには質の診断が重要です。

古典的な、線形回帰における重み付き最小二乗推定およびロジスティック回帰における反復再重み付き最小二乗推定(いずれもコレスキー分解およびマトリクス反転を使用する解決)に加えて、GLMでは、マトリクス反転が不要で高次元データに最適な共役勾配法に基づく最適化アルゴリズムを提供します。アルゴリズムの選択は内部的に処理され、ユーザーに対して透過的です。

GLMを使用して、次のような分類モデルまたは回帰モデルを構築できます。

  • 分類: 2項ロジスティック回帰は、GLM分類アルゴリズムです。このアルゴリズムでは、ロジット・リンク関数および2項分散関数を使用します。

  • 回帰: 線形回帰は、GLM回帰アルゴリズムです。このアルゴリズムでは、ターゲット値の範囲に対する一定分散およびターゲット変換を想定していません。

次の表に、GLMで使用されるリンク関数を示します:

GLM関数 デフォルトのリンク関数 その他サポートされているリンク関数
線形回帰(ガウス) identity なし
ロジスティック回帰(2項) logit probit、cloglog、cauchitおよび2項分散

リンク関数の詳細は、Oracle Machine Learning for SQLコンセプト・ガイドを参照してください

ore.odmGLM関数では、2つの異なるタイプのモデルを構築できます。一部、分類モデルにのみ適用される引数、回帰モデルにのみ適用される引数があります。

ore.odmGLM関数の引数の詳細は、help(ore.odmGLM)を呼び出してください。

次の例では、GLMを使用していくつかのモデルを構築します。入力ore.frameオブジェクトは、データベースにプッシュされるRデータセットです。

一般化線形モデルの設定

次の表に、一般化線形モデルに適用される設定を示します。

表7-10 一般化線形モデルの設定

設定名 設定値 説明

GLMS_CONF_LEVEL

TO_CHAR(0 < X < 1)

信頼区間の信頼水準。

デフォルトの信頼水準は0.95です。

GLMS_FTR_GEN_METHOD

GLMS_FTR_GEN_QUADRATIC

GLMS_FTR_GEN_CUBIC

特徴生成が二次式または三次式のどちらであるかを示します。

特徴の生成を有効にすると、アルゴリズムでは、最適な特徴生成方式がデータに基づいて自動的に選択されます。

GLMS_FTR_GENERATION

GLMS_FTR_GENERATION_ENABLE

GLMS_FTR_GENERATION_DISABLE

GLMに対して特徴生成を有効にするかどうかの指定。デフォルトでは、特徴生成は有効化されていません。

ノート:

特徴生成は、特徴選択が有効な場合にのみ有効です。

GLMS_FTR_SEL_CRIT

GLMS_FTR_SEL_AIC

GLMS_FTR_SEL_SBIC

GLMS_FTR_SEL_RIC

GLMS_FTR_SEL_ALPHA_INV

モデルに特徴を追加する際の、特徴選択のペナルティ基準。

特徴選択を有効にすると、アルゴリズムでは、ペナルティ基準がデータに基づいて自動的に選択されます。

GLMS_FTR_SELECTION

GLMS_FTR_SELECTION_ENABLE

GLMS_FTR_SELECTION_DISABLE

GLMに対して特徴選択を有効にするかどうかの指定。

デフォルトでは、特徴選択は無効です。

GLMS_MAX_FEATURES

TO_CHAR(0 < X <= 2000)

特徴選択を有効にすると、この設定では、最終モデルで選択可能な特徴の最大数が指定されます。

デフォルトでは、十分なメモリーを確保するために、アルゴリズムによって特徴の数が制限されます。

GLMS_PRUNE_MODEL

GLMS_PRUNE_MODEL_ENABLE

GLMS_PRUNE_MODEL_DISABLE

最終モデルでの特徴のプルーニングを有効また無効にします。プルーニングは、線形回帰の場合はt検定統計に、ロジスティック回帰の場合はWald検定統計に基づきます。すべての特徴が全データに対して統計的な意味付けを持つまで、これらの特徴はループ処理でプルーニングされます。

特徴選択を有効にすると、アルゴリズムでは、プルーニングがデータに基づいて自動的に実行されます。

GLMS_REFERENCE_CLASS_NAME

target_value

バイナリ・ロジスティック回帰モデルで参照クラスとして使用されるターゲット値。非参照クラスに対しては確率が生成されます。

デフォルトでは、参照クラスの場合、最も普及率の高い値(ほとんどのケース)がアルゴリズムによって選択されます。

GLMS_RIDGE_REGRESSION

GLMS_RIDGE_REG_ENABLE

GLMS_RIDGE_REG_DISABLE

リッジ回帰を有効または無効にします。リッジは、回帰と分類の両方のマイニング機能に適用されます。

リッジを有効にすると、PREDICTION_BOUNDS SQLファンクションによって予測限界は生成されません。

ノート:

リッジは、特徴選択が指定されていない場合または明示的に無効にされている場合にのみ有効です。リッジ回帰と特徴選択を両方とも明示的に有効にすると、例外が発生します。

GLMS_RIDGE_VALUE

TO_CHAR(X > 0)

リッジ・パラメータ値。この設定は、アルゴリズムでリッジ回帰の使用が構成されている場合にのみ使用されます。

リッジ回帰がアルゴリズムによって内部的に有効になっている場合、リッジ・パラメータはアルゴリズムによって決定されます。

GLMS_ROW_DIAGNOSTICS

GLMS_ROW_DIAG_ENABLE

GLMS_ROW_DIAG_DISABLE (default).

行診断を有効または無効にします。

GLMS_CONV_TOLERANCE

範囲は(0, 1)です(この値を含めない)。

GLMアルゴリズムの収束許容値の設定

デフォルト値は、システムによって決定されます。

GLMS_NUM_ITERATIONS

X >= 0

GLMアルゴリズムの最大反復数。デフォルト値は、システムによって決定されます。

GLMS_BATCH_ROWS

0またはX >= 0

SGDソルバーで使用されるバッチ内の行数。このパラメータの値によって、SGDソルバーのバッチのサイズが設定されます。0を入力すると、データ駆動のバッチ・サイズの推定値がトリガーされます。

デフォルトは2000です

GLMS_SOLVER

GLMS_SOLVER_SGD (StochasticGradient Descent)

GLMS_SOLVER_CHOL (Cholesky)

GLMS_SOLVER_QR

GLMS_SOLVER_LBFGS_ADMM

この設定により、ユーザーがGLMソルバーを選択できます。GLMS_FTR_SELECTION設定が有効である場合、ソルバーは選択できません。デフォルト値は、システムによって決定されます。

GLMS_SPARSE_SOLVER

GLMS_SPARSE_SOLVER_ENABLE

GLMS_SPARSE_SOLVER_DISABLE (デフォルト)。

この設定により、ユーザーはスパース・ソルバーを使用できます(使用可能な場合)。デフォルト値はGLMS_SPARSE_SOLVER_DISABLEです。

GLMS_LINK_FUNCTION

ノート:

Oracle Database 23aiでのみ使用できます。

GLMS_IDENTITY_LINK

GLMS_LOGIT_LINK

GLMS_PROBIT_LINK

GLMS_CLOGLOG_LINK

GLMS_CAUCHIT_LINK

この設定を使用すると、ユーザーは、GLMモデルを作成するためのリンク・ファンクションを指定できます。リンク・ファンクションはマイニング機能に固有です。分類については、次のものが適用可能です。

  • GLMS_LOGIT_LINK (default)
  • GLMS_PROBIT_LINK
  • GLMS_CLOGLOG_LINK
  • GLMS_CAUCHIT_LINK

回帰については、次のものが適用可能です。

  • GLMS_IDENTITY_LINK (デフォルト)

例7-10 線形回帰モデルの構築

この例では、longleyデータセットを使用して線形回帰モデルを構築します。

longley_of <- ore.push(longley)
longfit1 <- ore.odmGLM(Employed ~ ., data = longley_of)
summary(longfit1)

この例のリスト

R> longley_of <- ore.push(longley)
R> longfit1 <- ore.odmGLM(Employed ~ ., data = longley_of)
R> summary(longfit1)
 
Call:
ore.odmGLM(formula = Employed ~ ., data = longely_of)
 
Residuals:
     Min       1Q   Median       3Q      Max 
-0.41011 -0.15767 -0.02816  0.10155  0.45539 
 
Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -3.482e+03  8.904e+02  -3.911 0.003560 ** 
GNP.deflator  1.506e-02  8.492e-02   0.177 0.863141    
GNP          -3.582e-02  3.349e-02  -1.070 0.312681    
Unemployed   -2.020e-02  4.884e-03  -4.136 0.002535 ** 
Armed.Forces -1.033e-02  2.143e-03  -4.822 0.000944 ***
Population   -5.110e-02  2.261e-01  -0.226 0.826212    
Year          1.829e+00  4.555e-01   4.016 0.003037 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
 
Residual standard error: 0.3049 on 9 degrees of freedom
Multiple R-squared:  0.9955,    Adjusted R-squared:  0.9925 
F-statistic: 330.3 on 6 and 9 DF,  p-value: 4.984e-10

例7-11 ore.odmGLMモデルの係数に対するリッジ推定の使用方法

この例では、前の例のlongley_ofore.frameを使用します。この例では、ore.odmGLM関数を呼び出し、係数のリッジ推定を使用して指定します。

longfit2 <- ore.odmGLM(Employed ~ ., data = longley_of, ridge = TRUE,
                       ridge.vif = TRUE)
summary(longfit2)

この例のリスト

R> longfit2 <- ore.odmGLM(Employed ~ ., data = longley_of, ridge = TRUE,
+                         ridge.vif = TRUE)
R> summary(longfit2)
 
Call:
ore.odmGLM(formula = Employed ~ ., data = longley_of, ridge = TRUE, 
    ridge.vif = TRUE)
 
Residuals:
    Min      1Q  Median      3Q     Max 
-0.4100 -0.1579 -0.0271  0.1017  0.4575 
 
Coefficients:
               Estimate   VIF
(Intercept)  -3.466e+03 0.000
GNP.deflator  1.479e-02 0.077
GNP          -3.535e-02 0.012
Unemployed   -2.013e-02 0.000
Armed.Forces -1.031e-02 0.000
Population   -5.262e-02 0.548
Year          1.821e+00 2.212
 
Residual standard error: 0.3049 on 9 degrees of freedom
Multiple R-squared:  0.9955,    Adjusted R-squared:  0.9925 
F-statistic: 330.2 on 6 and 9 DF,  p-value: 4.986e-10

例7-12 ロジスティック回帰GLMの構築

この例では、ロジスティック回帰(分類)モデルを構築します。ここでは、infertデータセットを使用します。この例では、ore.odmGLM関数を呼び出し、logistictype引数(二項分布GLMを構築します)として指定します。

infert_of <- ore.push(infert)
infit1 <- ore.odmGLM(case ~ age+parity+education+spontaneous+induced,
                     data = infert_of, type = "logistic")
infit1

この例のリスト

R> infert_of <- ore.push(infert)
R> infit1 <- ore.odmGLM(case ~ age+parity+education+spontaneous+induced,
+                       data = infert_of, type = "logistic")
R> infit1
 
Response:
case == "1"
 
Call:  ore.odmGLM(formula = case ~ age + parity + education + spontaneous + 
    induced, data = infert_of, type = "logistic")
 
Coefficients:
     (Intercept)               age            parity   education0-5yrs  education12+ yrs       spontaneous           induced  
        -2.19348           0.03958          -0.82828           1.04424          -0.35896           2.04590           1.28876  
 
Degrees of Freedom: 247 Total (i.e. Null);  241 Residual
Null Deviance:      316.2 
Residual Deviance: 257.8        AIC: 271.8

例7-13 ロジスティック回帰GLMの構築での参照値の指定

この例では、ロジスティック回帰(分類)モデルを構築し、参照値を指定します。この例では、例7-12infert_ofore.frameを使用します。

infit2 <- ore.odmGLM(case ~ age+parity+education+spontaneous+induced,
                     data = infert_of, type = "logistic", reference = 1)
infit2

この例のリスト

infit2 <- ore.odmGLM(case ~ age+parity+education+spontaneous+induced,
                     data = infert_of, type = "logistic", reference = 1)
infit2

Response:
case == "0"
 
Call:  ore.odmGLM(formula = case ~ age + parity + education + spontaneous + 
    induced, data = infert_of, type = "logistic", reference = 1)
 
Coefficients:
     (Intercept)               age            parity   education0-5yrs  education12+ yrs       spontaneous           induced  
         2.19348          -0.03958           0.82828          -1.04424           0.35896          -2.04590          -1.28876  
 
Degrees of Freedom: 247 Total (i.e. Null);  241 Residual
Null Deviance:      316.2 
Residual Deviance: 257.8        AIC: 271.8