9.12 一般化線形モデル

oml.glmクラスは、一般化線形モデル(GLM)モデルを構築します。

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

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

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

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

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

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

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

oml.glmクラスを使用すると、2つの異なるタイプのモデルを構築できます。一部、分類モデルにのみ適用される引数、回帰モデルにのみ適用される引数があります。

oml.glmクラスの属性およびメソッドの詳細は、help(oml.glm)を呼び出すか、Oracle Machine Learning for Python APIリファレンスを参照してください。

一般化線形モデルの設定

次の表は、GLMモデルに適用される設定のリストです。

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

設定名 設定値 説明
CLAS_COST_TABLE_NAME

table_name

モデルのスコアリングに使用するアルゴリズムのコスト・マトリックスを格納する表の名前。コスト・マトリックスは、分類ミスに関連するコストを指定します。

コスト・マトリックス表は、ユーザーが作成します。表の列の要件は次のとおりです。

  • 列名: ACTUAL_TARGET_VALUE

    データ型: 有効なターゲット・データ型

  • 列名: PREDICTED_TARGET_VALUE

    データ型: 有効なターゲット・データ型

  • 列名: COST

    データ型: NUMBER

CLAS_WEIGHTS_BALANCED

ON

OFF

ターゲットの分布を平均化するモデルをアルゴリズムが作成する必要があるかどうかを示します。分布の平均化では、主要なクラスを重視する全体精度ではなく、平均精度(クラスごとの精度の平均)を向上できるため、この設定は稀なターゲットが存在する場合に最適です。デフォルト値はOFFです。

CLAS_WEIGHTS_TABLE_NAME

table_name

GLMロジスティック回帰モデルの個々のターゲット値の重み付け情報を格納する表の名前。アルゴリズムでは、重みを使用して、より高い重み付けのクラスを優先するようにモデルにバイアスをかけます。

クラスの重み表は、ユーザーが作成します。表の列の要件は次のとおりです。

  • 列名: TARGET_VALUE

    データ型: 有効なターゲット・データ型

  • 列名: CLASS_WEIGHT

    データ型: NUMBER

GLMS_BATCH_ROWS

0または正の整数

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

デフォルト値は2000です。

GLMS_CONF_LEVEL TO_CHAR(0< numeric_expr <1)

信頼区間の信頼水準。

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

GLMS_CONV_TOLERANCE

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

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

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

GLMS_FTR_GEN_METHOD

GLMS_FTR_GEN_CUBIC

GLMS_FTR_GEN_QUADRATIC

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

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

GLMS_FTR_GENERATION

GLMS_FTR_GENERATION_E NABLE

GLMS_FTR_GENERATION_D ISABLE

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

ノート:

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

GLMS_FTR_SEL_AIC

GLMS_FTR_SEL_ALPHA_INV

GLMS_FTR_SEL_RIC

GLMS_FTR_SEL_SBIC

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

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

GLMS_FTR_SELECTION

GLMS_FTR_SELECTION_DISABLE

GLMの特徴選択を有効または無効にします。

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

GLMS_MAX_FEATURES

TO_CHAR(0 < numeric_expr <= 2000)

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

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

GLMS_NUM_ITERATIONS

正の整数。

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

GLMS_PRUNE_MODEL

GLMS_PRUNE_MODEL_ENABLE

GLMS_PRUNE_MODEL_DISABLE

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

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(numeric_expr > 0)

リッジ・パラメータ値。この設定は、リッジ回帰を使用するようにアルゴリズムを構成した場合にのみ使用します。

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

GLMS_ROW_DIAGNOSTICS

GLMS_ROW_DIAG_ENABLE

GLMS_ROW_DIAG_DISABLE

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

デフォルトでは、行診断は無効になっています。

GLMS_SOLVER

GLMS_SOLVER_CHOL

GLMS_SOLVER_LBFGS_ADMM

GLMS_SOLVER_QR

GLMS_SOLVER_SGD

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

GLMS_SOLVER_CHOLソルバーではコレスキー分解が使用されます。

GLMS_SOLVER_SGDソルバーでは確率的勾配降下が使用されます。

GLMS_SPARSE_SOLVER

GLMS_SPARSE_SOLVER_ENABLE

GLMS_SPARSE_SOLVER_DISABLE

スパース・ソルバーの使用を有効または無効にします(使用可能な場合)。

デフォルト値はGLMS_SPARSE_SOLVER_DISABLEです。

ODMS_ROW_WEIGHT_COLUMN_ NAME

column_name

行の重み係数を含むトレーニング・データ内の列の名前。列のデータ・タイプはNUMBERであることが必要です。

行の重みは、特定の構成が複数回繰り返される試用を設計する場合のように、繰返し行のコンパクトな表現として使用できます。また、行の重みを使用して、モデルの作成中に特定の行を強調することもできます。たとえば、より新しい行を優先し、古い可能性のあるデータを避けるようにバイアスをかける場合に使用できます。

例9-12 oml.glmクラスの使用

この例では、oml.glmクラスの様々なメソッドの使用方法を示します。この例のリストでは、省略記号で示されているように、出力の一部が表示されていません。

import oml
import pandas as pd
from sklearn import datasets

# Load the iris data set and create a pandas.DataFrame for it.
iris = datasets.load_iris()
x = pd.DataFrame(iris.data,
                 columns = ['Sepal_Length','Sepal_Width',
                            'Petal_Length','Petal_Width'])
y = pd.DataFrame(list(map(lambda x:
                           {0: 'setosa', 1: 'versicolor',
                            2:'virginica'}[x], iris.target)),
                 columns = ['Species'

try:
    oml.drop('IRIS')
except:
    pass

# Create the IRIS database table and the proxy object for the table.
oml_iris = oml.create(pd.concat([x, y], axis=1), table = 'IRIS')

# Create training and test data.
dat = oml.sync(table = 'IRIS').split()
train_x = dat[0].drop('Petal_Width')
train_y = dat[0]['Petal_Width']
test_dat = dat[1]

# Specify settings.
setting = {'GLMS_SOLVER': 'dbms_data_mining.GLMS_SOLVER_QR'}

# Create a GLM model object.
glm_mod = oml.glm("regression", **setting)

# Fit the GLM model according to the training data and parameter
# settings.
glm_mod = glm_mod.fit(train_x, train_y)

# Show the model details.
glm_mod

# Use the model to make predictions on the test data.
glm_mod.predict(test_dat.drop('Petal_Width'), 
                supplemental_cols = test_dat[:,
                  ['Sepal_Length', 'Sepal_Width', 
                   'Petal_Length', 'Species']])

# Return the prediction probability.
glm_mod.predict(test_dat.drop('Petal_Width'),                 
                supplemental_cols = test_dat[:,
                  ['Sepal_Length', 'Sepal_Width', 
                   'Petal_Length', 'Species']],
                proba = True)

glm_mod.score(test_dat.drop('Petal_Width'), 
              test_dat[:, ['Petal_Width']])

# Change the parameter setting and refit the model.
new_setting = {'GLMS_SOLVER': 'GLMS_SOLVER_SGD'}
glm_mod.set_params(**new_setting).fit(train_x, train_y)

この例のリスト

>>> import oml
>>> import pandas as pd
>>> from sklearn import datasets
>>>
>>> # Load the iris data set and create a pandas.DataFrame for it.
... iris = datasets.load_iris()
>>> x = pd.DataFrame(iris.data, 
...                  columns = ['Sepal_Length','Sepal_Width',
...                             'Petal_Length','Petal_Width'])
>>> y = pd.DataFrame(list(map(lambda x: 
...                            {0: 'setosa', 1: 'versicolor', 
...                             2:'virginica'}[x], iris.target)), 
...                  columns = ['Species'])
>>>
>>> try:
...    oml.drop('IRIS')
... except:
...    pass
>>>
>>> # Create the IRIS database table and the proxy object for the table.
... oml_iris = oml.create(pd.concat([x, y], axis=1), table = 'IRIS')
>>>
>>> # Create training and test data.
... dat = oml.sync(table = 'IRIS').split()
>>> train_x = dat[0].drop('Petal_Width')
>>> train_y = dat[0]['Petal_Width']
>>> test_dat = dat[1]
>>>
>>> # Specify settings.
... setting = {'GLMS_SOLVER': 'dbms_data_mining.GLMS_SOLVER_QR'}
>>>
>>> # Create a GLM model object.
... glm_mod = oml.glm("regression", **setting)
>>>
>>> # Fit the GLM model according to the training data and parameter
... # settings.
>>> glm_mod = glm_mod.fit(train_x, train_y)
>>> 
>>> # Show the model details.
... glm_mod

Algorithm Name: Generalized Linear Model

Mining Function: REGRESSION

Target: Petal_Width

Settings: 
	            setting name                  setting value
0                     ALGO_NAME  ALGO_GENERALIZED_LINEAR_MODEL
1               GLMS_CONF_LEVEL                            .95
2           GLMS_FTR_GENERATION    GLMS_FTR_GENERATION_DISABLE
3            GLMS_FTR_SELECTION     GLMS_FTR_SELECTION_DISABLE
4                   GLMS_SOLVER                 GLMS_SOLVER_QR
5                  ODMS_DETAILS                    ODMS_ENABLE
6  ODMS_MISSING_VALUE_TREATMENT        ODMS_MISSING_VALUE_AUTO
7                 ODMS_SAMPLING          ODMS_SAMPLING_DISABLE
8                     PREP_AUTO                             ON

Computed Settings: 
	     setting name            setting value
0    GLMS_CONV_TOLERANCE  .0000050000000000000004
1    GLMS_NUM_ITERATIONS                       30
2  GLMS_RIDGE_REGRESSION    GLMS_RIDGE_REG_ENABLE

Global Statistics:
            attribute name  attribute value
0        ADJUSTED_R_SQUARE         0.949634
1                      AIC         -363.888
2                COEFF_VAR          14.6284
3                CONVERGED              YES
4       CORRECTED_TOTAL_DF              103
5         CORRECTED_TOT_SS          58.4565
6           DEPENDENT_MEAN          1.15577
7                 ERROR_DF               98
8        ERROR_MEAN_SQUARE         0.028585
9        ERROR_SUM_SQUARES          2.80131
10                 F_VALUE          389.405
11                   GMSEP         0.030347
12              HOCKING_SP         0.000295
13                     J_P         0.030234
14                MODEL_DF                5
15         MODEL_F_P_VALUE                0
16       MODEL_MEAN_SQUARE           11.131
17       MODEL_SUM_SQUARES          55.6552
18              NUM_PARAMS                6
19                NUM_ROWS              104
20         RANK_DEFICIENCY                0
21            ROOT_MEAN_SQ          0.16907
22                    R_SQ         0.952079
23                    SBIC         -348.021
24 VALID_COVARIANCE_MATRIX              YES
[1 rows x 25 columns]

Attributes: 
Petal_Length
Sepal_Length
Sepal_Width
Species

Partition: NO

Coefficients: 

          name       level  estimate
0   (Intercept)        None -0.600603
1  Petal_Length        None  0.239775
2  Sepal_Length        None -0.078338
3   Sepal_Width        None  0.253996
4       Species  versicolor  0.652420
5       Species   virginica  1.010438

Fit Details: 
                       name         value
0         ADJUSTED_R_SQUARE  9.496338e-01
1                       AIC -3.638876e+02
2                 COEFF_VAR  1.462838e+01
3        CORRECTED_TOTAL_DF  1.030000e+02
...
21             ROOT_MEAN_SQ  1.690704e-01
22                     R_SQ  9.520788e-01
23                     SBIC -3.480213e+02
24  VALID_COVARIANCE_MATRIX  1.000000e+00

Rank: 
 
6

Deviance: 

2.801309

AIC: 

-364

Null Deviance: 

58.456538

DF Residual: 

98.0

DF Null: 

103.0

Converged: 

True

>>> 
>>> # Use the model to make predictions on the test data.
... glm_mod.predict(test_dat.drop('Petal_Width'),
...                 supplemental_cols = test_dat[:,
...                   ['Sepal_Length', 'Sepal_Width', 
...                    'Petal_Length', 'Species']])
    Sepal_Length  Sepal_Width  Petal_Length     Species  PREDICTION
0            4.9          3.0           1.4      setosa    0.113215
1            4.9          3.1           1.5      setosa    0.162592
2            4.8          3.4           1.6      setosa    0.270602
3            5.8          4.0           1.2      setosa    0.248752
...           ...          ...           ...         ...         ...
42           6.7          3.3           5.7   virginica    2.89876
43           6.7          3.0           5.2   virginica    1.893790
44           6.5          3.0           5.2   virginica    1.909457
45           5.9          3.0           5.1   virginica    1.932483

>>> # Return the prediction probability.
... glm_mod.predict(test_dat.drop('Petal_Width'), 
...                 supplemental_cols = test_dat[:,
...                   ['Sepal_Length', 'Sepal_Width', 
...                    'Petal_Length', 'Species']]),
...                 proba = True)
    Sepal_Length  Sepal_Width     Species  PREDICTION
0            4.9          3.0      setosa    0.113215
1            4.9          3.1      setosa    0.162592
2            4.8          3.4      setosa    0.270602
3            5.8          4.0      setosa    0.248752
...          ...          ...         ...         ...
42           6.7          3.3   virginica    2.089876
43           6.7          3.0   virginica    1.893790
44           6.5          3.0   virginica    1.909457
45           5.9          3.0   virginica    1.932483
>>> 
>>> glm_mod.score(test_dat.drop('Petal_Width'), 
...               test_dat[:, ['Petal_Width']])
0.951252
>>>
>>> # Change the parameter setting and refit the model.
... new_setting = {'GLMS_SOLVER': 'GLMS_SOLVER_SGD'}
>>> glm_mod.set_params(**new_setting).fit(train_x, train_y)

Algorithm Name: Generalized Linear Model

Mining Function: REGRESSION

Target: Petal_Width

Settings: 
                   setting name                  setting value
0                     ALGO_NAME  ALGO_GENERALIZED_LINEAR_MODEL
1               GLMS_CONF_LEVEL                            .95
2           GLMS_FTR_GENERATION    GLMS_FTR_GENERATION_DISABLE
3            GLMS_FTR_SELECTION     GLMS_FTR_SELECTION_DISABLE
4                   GLMS_SOLVER                GLMS_SOLVER_SGD
5                  ODMS_DETAILS                    ODMS_ENABLE
6  ODMS_MISSING_VALUE_TREATMENT        ODMS_MISSING_VALUE_AUTO
7                 ODMS_SAMPLING          ODMS_SAMPLING_DISABLE
8                     PREP_AUTO                             ON

Computed Settings: 
            setting name          setting value
0        GLMS_BATCH_ROWS                   2000
1    GLMS_CONV_TOLERANCE                  .0001
2    GLMS_NUM_ITERATIONS                    500
3  GLMS_RIDGE_REGRESSION  GLMS_RIDGE_REG_ENABLE
4       GLMS_RIDGE_VALUE                    .01

Global Statistics: 
            attribute name  attribute value
0        ADJUSTED_R_SQUARE          0.94175
1                      AIC         -348.764
2                COEFF_VAR          15.7316
3                CONVERGED               NO
4       CORRECTED_TOTAL_DF              103
5         CORRECTED_TOT_SS          58.4565
6           DEPENDENT_MEAN          1.15577
7                 ERROR_DF               98
8        ERROR_MEAN_SQUARE         0.033059
9        ERROR_SUM_SQUARES          3.23979
10                 F_VALUE          324.347
11                   GMSEP         0.035097
12              HOCKING_SP         0.000341
13                     J_P         0.034966
14                MODEL_DF                5
15         MODEL_F_P_VALUE                0
16       MODEL_MEAN_SQUARE          10.7226
17       MODEL_SUM_SQUARES           53.613
18              NUM_PARAMS                6
19                NUM_ROWS              104
20         RANK_DEFICIENCY                0
21            ROOT_MEAN_SQ          0.181821
22                    R_SQ          0.944578
23                    SBIC         -332.898
24 VALID_COVARIANCE_MATRIX               NO

[1 rows x 25 columns]

Attributes: 
Petal_Length
Sepal_Length
Sepal_Width
Species

Partition: NO

Coefficients: 

           name      level  estimate
0   (Intercept)       None -0.338046
1  Petal_Length       None  0.378658
2  Sepal_Length       None -0.084440
3   Sepal_Width       None  0.137150
4       Species  versicolor 0.151916
5       Species  virginica  0.337535

Fit Details:

                       name         value
0         ADJUSTED_R_SQUARE  9.417502e-01
1                       AIC -3.487639e+02
2                 COEFF_VAR  1.573164e+01
3        CORRECTED_TOTAL_DF  1.030000e+02
...                     ...           ...
21             ROOT_MEAN_SQ  1.818215e-01
22                     R_SQ  9.445778e-01
23                     SBIC -3.328975e+02
24  VALID_COVARIANCE_MATRIX  0.000000e+00

Rank:

6

Deviance: 

3.239787

AIC: 

-349

Null Deviance: 

58.456538

Prior Weights: 

1

DF Residual: 

98.0

DF Null: 

103.0

Converged: 

False