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 |
モデルのスコアリングに使用するアルゴリズムのコスト・マトリックスを格納する表の名前。コスト・マトリックスは、分類ミスに関連するコストを指定します。 コスト・マトリックス表は、ユーザーが作成します。表の列の要件は次のとおりです。
|
CLAS_WEIGHTS_BALANCED |
|
ターゲットの分布を平均化するモデルをアルゴリズムが作成する必要があるかどうかを示します。分布の平均化では、主要なクラスを重視する全体精度ではなく、平均精度(クラスごとの精度の平均)を向上できるため、この設定は稀なターゲットが存在する場合に最適です。デフォルト値は |
CLAS_WEIGHTS_TABLE_NAME |
table_name |
GLMロジスティック回帰モデルの個々のターゲット値の重み付け情報を格納する表の名前。アルゴリズムでは、重みを使用して、より高い重み付けのクラスを優先するようにモデルにバイアスをかけます。 クラスの重み表は、ユーザーが作成します。表の列の要件は次のとおりです。
|
|
|
SGDソルバーで使用されるバッチ内の行数。このパラメータの値によって、SGDソルバーのバッチのサイズが設定されます。0を入力すると、データ駆動のバッチ・サイズ推定がトリガーされます。 デフォルト値は |
GLMS_CONF_LEVEL |
TO_CHAR(0< numeric_expr <1) |
信頼区間の信頼水準。 デフォルトの信頼水準は |
|
範囲は( |
GLMアルゴリズムの収束許容値の設定。 デフォルト値は、システムによって決定されます。 |
GLMS_FTR_GEN_METHOD |
|
特徴生成が三次式または二次式のどちらであるか。 特徴生成を有効にすると、アルゴリズムでは、最適な特徴生成方式がデータに基づいて自動的に選択されます。 |
GLMS_FTR_GENERATION |
|
GLMに対して特徴生成を有効にするかどうかの指定。デフォルトでは、特徴生成は有効化されていません。 ノート: ノート: 特徴生成は、特徴選択が有効な場合にのみ有効です。 |
GLMS_FTR_SEL_CRIT |
|
モデルに特徴を追加する際の、特徴選択のペナルティ基準。 特徴選択を有効にすると、アルゴリズムでは、ペナルティ基準がデータに基づいて自動的に選択されます。 |
|
|
GLMの特徴選択を有効または無効にします。 デフォルトでは、特徴選択は無効です。 |
|
|
特徴選択を有効にすると、この設定では、最終モデルで選択可能な特徴の最大数が指定されます。 デフォルトでは、十分なメモリーを確保するために、アルゴリズムによって特徴の数が制限されます。 |
|
正の整数。 |
GLMアルゴリズムの最大反復数。デフォルト値は、システムによって決定されます。 |
|
|
特徴選択を有効にすると、アルゴリズムでは、プルーニングがデータに基づいて自動的に実行されます。 |
|
target_value |
バイナリ・ロジスティック回帰モデルで参照クラスとして使用されるターゲット値。その他のクラスに対しては確率が生成されます。 デフォルトでは、参照クラスの場合、最も普及率の高い値(ほとんどのケース)がアルゴリズムによって選択されます。 |
|
|
リッジ回帰を有効または無効にします。リッジは、回帰と分類の両方の機械学習関数に適用されます。 リッジを有効にすると、 |
|
|
リッジ・パラメータ値。この設定は、リッジ回帰を使用するようにアルゴリズムを構成した場合にのみ使用します。 リッジ回帰がアルゴリズムによって内部的に有効になっている場合、リッジ・パラメータはアルゴリズムによって決定されます。 |
|
|
行診断を有効または無効にします。 デフォルトでは、行診断は無効になっています。 |
|
|
GLMソルバーを指定します。
|
|
|
スパース・ソルバーの使用を有効または無効にします(使用可能な場合)。 デフォルト値は |
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