6.22 XGBoostモデル
ore.odmXGBクラスは、分類と回帰の両方をサポートするスケーラブルな勾配ツリー・ブースティング・システムです。これにより、オープン・ソースの勾配ブースティング・フレームワークが使用可能になります。トレーニング・データを準備し、インデータベースXGBoostをコールし、モデルを作成して保持し、予測のためにモデルを適用します。
               
ノート:
ore.odmXGBアルゴリズムは、データベース21c以降で使用できます。ore.odmXGBを独立した予測子として使用することや、クリック率予測、危険性予測、Webテキスト分類などの幅広い問題のために実社会の生産パイプラインに組み込むことができます。 
                  
ore.odmXGBアルゴリズムでは、汎用パラメータ、ブースタ・パラメータおよびタスク・パラメータの3種類のパラメータを使用します。
                  
ブースタは、一連の弱い学習者を強力な学習者に組み合せてトレーニング・エラーを最小限に抑えるアンサンブル学習方法の1つです。XGBoostのブースタによって、アンサンブルで使用されるモデルのタイプが決まります。
- 
                        
一般的なパラメータは、ブースティング、一般的なツリー・モデルまたは線形モデルの実行に使用するブースタに関連しています
 - 
                        
ブースタ・パラメータは、選択したブースタによって異なります
 - 
                        
学習タスク・パラメータによって、学習シナリオが決まります。たとえば、回帰タスクでは、ランキング・タスクとは異なるパラメータを使用できます。
 
このアルゴリズムでは、オープン・ソース・プロジェクトの設定のほとんどがサポートされています。CREATE_MODELではパラメータを指定するために個別のモデル設定表を作成する必要がありますが、CREATE_MODEL2ではより合理化されたアプローチが提供されます。これにより、関数コール内でパラメータのリストを直接渡すことができます。
                  
ore.odmXGBにより、OML4Rは、複数の分類仕様と回帰仕様、およびランキング・モデルと生存モデルをサポートします。バイナリ・モデルとマルチクラス・モデルは分類タスクに使用され、回帰は連続値を予測するために使用されます。ランキング、カウント、生存分析は、専門的な機械学習技術によって対処される個別のタスクです。
                  
また、ore.odmXGBでは、パーティション化されたモデルがサポートされており、データ準備が内部化されています。
                  
XG Boost機能相互作用制約を使用すると、どの変数に相互作用を許可するか、または許可しないかを指定できます。主要な相互作用に焦点を当て、ノイズを排除することで、予測パフォーマンスの向上に役立ちます。これによって、より一般化された予測になる可能性があります。XG Boost機能相互作用制約の詳細は、Oracle Machine Learning for SQLコンセプト・ガイドを参照してください。
XGBoostモデルの設定
次の表に、XGBoostモデルに適用される設定を示します。
表6-23 XGBoostモデルの設定
| 設定名 | 設定値 | 説明 | 
|---|---|---|
booster | 
                              
                                  次のリストのいずれかの文字列値: 
  | 
                              
                                  使用するブースタは次のとおりです。 
 
 デフォルト値は 
 ドロップアウトなしで従来の勾配ブースティングに  | 
                           
| 
                                  
  | 
                              
                                  
  | 
                              
                                  ブースティング用の丸めの数。ラウンドは、最終モデルの構築に使用される反復回数を表します。 デフォルト値は  | 
                           
| 
                                  
 ノート: Oracle Database 23aiでのみ使用できます。 | 
                              
                                  ネストされたリストの形式を持つ1つの文字列。たとえば、  | 
                              
                                  この設定では、モデル内で許可される相互作用を指定します。ネストされたリストの形式で制約を指定します。内側の各リストは、相互に作用できる特徴(列名)のグループです。相互作用で単一の列が渡された場合、入力は無視されます。 ここでは、特徴x0、x1およびx2は相互に作用できますが、他の特徴と相互に作用することはできません。同様に、x0とx4は相互に作用できるが、他の特徴と相互に作用することはできないというようになります。この設定は、2次元特徴に適用されます。サポートされていない型の列や存在しない特徴名を渡すと、エラーが発生します。  | 
                           
| 
                                  
 ノート: Oracle Database 23aiでのみ使用できます。 | 
                              ネストされたリストの形式を持つ1つの文字列。たとえば、[x0,x1],[x4,x5]です。 | 
                              
                                  この設定では、減少制約に従う必要がある特徴(列名)を指定します。特徴名はカンマで区切ります。たとえば、値'x4,x5'を設定すると、特徴x4およびx5に対して減少制約が設定されます。この設定は、数値列および2次元特徴に適用されます。サポートされていない型の列や存在しない特徴名を渡すと、エラーが発生します。  | 
                           
| 
                                  
 ノート: Oracle Database 23aiでのみ使用できます。 | 
                              
                                  ネストされたリストの形式を持つ1つの文字列。たとえば、  | 
                              
                                  この設定では、増加制約に従う必要がある特徴(列名)を指定します。特徴名はカンマで区切ります。たとえば、値'x0,x3'を設定すると、特徴x0およびx3に対して増加制約が設定されます。この設定は、2次元特徴に適用されます。サポートされていない型の列や存在しない特徴名を渡すと、エラーが発生します。  | 
                           
| 
                                  
 ノート: Oracle Database 23aiでのみ使用できます。 | 
                              
                                  分類モデルの場合、次のリストのいずれかの文字列値: 
 回帰モデルの場合、次のリストのいずれかの文字列値: 
  | 
                              
                                  分類モデルの設定: 
 分類のデフォルト値 回帰モデルの設定: 
 回帰のデフォルトの  | 
                           
| 
                                  
 ノート: Oracle Database 23aiでのみ使用できます。 | 
                              
                                  [normal, logistic, extreme]  | 
                              
                                  AFTモデルのZ項の分布を指定します。これは、  | 
                           
| 
                                  
 ノート: Oracle Database 23aiでのみ使用できます。 | 
                              
                                  
  | 
                              
                                  AFTモデルのZ項のサイズをスケーリングするスケーリング係数σを指定します。デフォルト値は  | 
                           
| 
                                  
 ノート: Oracle Database 23aiでのみ使用できます。 | 
                              
                                  column_name  | 
                              
                                  AFTモデルのラベルの右境界を含む列を指定します。非AFTモデルについてこのパラメータを選択することはできません。 ノート: Oracle Machine Learningは、この設定についてBOOLEAN値をサポートしていません。
                                  | 
                           
例6-27 ore.odmXGB回帰関数の使用方法
この例では、データ・フレームを一時データベース表DATにプッシュし、XGBoostモデルを作成します。
# Turn off row ordering warnings
options(ore.warn.order=FALSE)
# Data setup
x <- seq(0.1, 5, by = 0.02)
y <- log(x) + rnorm(x, sd = 0.2)
# Create the a temporary OML4R proxy object DAT.
DAT <-ore.push(data.frame(x=x, y=y))
# Create an XGBoost regression model object. Fit the XGBoost model according to the data and setting parameters.
xgb.mod <- ore.odmXGB(y~x,dat,"regression")
# Display the model summary and attribute importance
summary(xgb.mod)
importance(xgb.mod)
# Use the model to make predictions on the input data.
xgb.res <- predict(xgb.mod,dat,supplemental.cols="x")
head(xgb.res,6)この例のリスト
>   x <- seq(0.1, 5, by = 0.02)
>   y <- log(x) + rnorm(x, sd = 0.2)
>   DAT <-ore.push(data.frame(x=x, y=y))
>   xgb.mod <- ore.odmXGB(y~x,dat,"regression")
>   summary(xgb.mod)
Call:
ore.odmXGB(formula = y ~ x, data = dat, type = "regression")
Settings: 
                                               value
odms.details                             odms.enable
odms.missing.value.treatment odms.missing.value.auto
odms.sampling                  odms.sampling.disable
prep.auto                                         ON
booster                                       gbtree
ntree.limit                                        0
num.round                                         10
Importance: 
  PNAME ATTRIBUTE_NAME ATTRIBUTE_SUBNAME ATTRIBUTE_VALUE GAIN COVER FREQUENCY
1  <NA>              x              <NA>            <NA>    1     1         1
>   importance(xgb.mod)
  PNAME ATTRIBUTE_NAME ATTRIBUTE_SUBNAME ATTRIBUTE_VALUE GAIN COVER FREQUENCY
1  <NA>              x              <NA>            <NA>    1     1         1
>   xgb.res <- predict(xgb.mod,dat,supplemental.cols="x")
>   head(xgb.res,6)
     x PREDICTION
1 0.10  -1.957506
2 0.12  -1.957506
3 0.14  -1.957506
4 0.16  -1.484602
5 0.18  -1.559072
6 0.20  -1.559072例6-28 ore.odmXGB分類関数の使用方法
この例では、データ・フレームmtcarsを一時データベース表MTCARSにプッシュし、XGBoostモデルを作成します。
# Turn off row ordering warnings
options(ore.warn.order=FALSE)
# Data setup
m <- mtcars
m$gear <- as.factor(m$gear)
m$cyl  <- as.factor(m$cyl)
m$vs   <- as.factor(m$vs)
m$ID   <- 1:nrow(m)
# Create the a temporary OML4R proxy object DAT.
MTCARS <- ore.push(m)
# Create an XGBoost classification model object. Fit the XGBoot model according to the data and setting parameters.
xgb.mod <- ore.odmXGB(gear ~ .-ID, MTCARS, "classification")
# Display the model summary and attribute importance
summary(xgb.mod)
importance(xgb.mod)
# Use the model to make predictions on the input data.
xgb.res <- predict (xgb.mod, MTCARS,"gear")
# Generate a confusion matrix.
with(xgb.res, table(gear, PREDICTION))この例のリスト
>   m <- mtcars
>   m$gear <- as.factor(m$gear)
>   m$cyl  <- as.factor(m$cyl)
>   m$vs   <- as.factor(m$vs)
>   m$ID   <- 1:nrow(m)
>   MTCARS <- ore.push(m)
>   xgb.mod  <- ore.odmXGB(gear ~ .-ID, MTCARS,"classification")
>   summary(xgb.mod)
Call:
ore.odmXGB(formula = gear ~ . - ID, data = MTCARS, type = "classification")
Settings: 
                                               value
clas.weights.balanced                            OFF
odms.details                             odms.enable
odms.missing.value.treatment odms.missing.value.auto
odms.sampling                  odms.sampling.disable
prep.auto                                         ON
booster                                       gbtree
ntree.limit                                        0
num.round                                         10
objective                             multi:softprob
Importance: 
  PNAME ATTRIBUTE_NAME ATTRIBUTE_SUBNAME ATTRIBUTE_VALUE         GAIN
1  <NA>             am              <NA>            <NA> 0.1062399524
2  <NA>           carb              <NA>            <NA> 0.0001902411
3  <NA>           disp              <NA>            <NA> 0.1903797590
4  <NA>           drat              <NA>            <NA> 0.5099772379
5  <NA>             hp              <NA>            <NA> 0.0120000788
6  <NA>            mpg              <NA>            <NA> 0.0040766784
7  <NA>           qsec              <NA>            <NA> 0.1771360524
        COVER  FREQUENCY
1 0.121840842 0.13924051
2 0.009026413 0.02531646
3 0.292335393 0.36708861
4 0.320671772 0.24050633
5 0.028994248 0.02531646
6 0.022994361 0.03797468
7 0.204136970 0.16455696
>   importance(xgb.mod)
  PNAME ATTRIBUTE_NAME ATTRIBUTE_SUBNAME ATTRIBUTE_VALUE         GAIN
1  <NA>             am              <NA>            <NA> 0.1062399524
2  <NA>           carb              <NA>            <NA> 0.0001902411
3  <NA>           disp              <NA>            <NA> 0.1903797590
4  <NA>           drat              <NA>            <NA> 0.5099772379
5  <NA>             hp              <NA>            <NA> 0.0120000788
6  <NA>            mpg              <NA>            <NA> 0.0040766784
7  <NA>           qsec              <NA>            <NA> 0.1771360524
        COVER  FREQUENCY
1 0.121840842 0.13924051
2 0.009026413 0.02531646
3 0.292335393 0.36708861
4 0.320671772 0.24050633
5 0.028994248 0.02531646
6 0.022994361 0.03797468
7 0.204136970 0.16455696
>   xgb.res  <- predict (xgb.mod, MTCARS,"gear")
>   with(xgb.res, table(gear,PREDICTION))  
    PREDICTION
gear  3  4  5
   3 15  0  0
   4  0 12  0
   5  0  0  5