7.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モデルに適用される設定を示します。

表7-23 XGBoostモデルの設定

設定名 設定値 説明
booster

次のリストのいずれかの文字列値:

  • dart
  • gblinear
  • gbtree

使用するブースタは次のとおりです。

  • dart
  • gblinear
  • gbtree

dartブースタとgbtreeブースタではツリーベースのモデルが使用されるのに対し、gblinearでは線形関数が使用されます。

デフォルト値はgbtreeです。

dartを使用して、ツリーをドロップしてランダム性を導入することで、オーバーフィットを防止します。

ドロップアウトなしで従来の勾配ブースティングにgbtreeを使用します。

num_round

X >= 0

ブースティング用の丸めの数。ラウンドは、最終モデルの構築に使用される反復回数を表します。

デフォルト値は10です。

xgboost_interaction_constraints

ノート:

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

ネストされたリストの形式を持つ1つの文字列。たとえば、[[x0,x1,x2],[x0,x4],[x5,x6]]です。ここで、xi - xnは機能名または列です。

この設定では、モデル内で許可される相互作用を指定します。ネストされたリストの形式で制約を指定します。内側の各リストは、相互に作用できる特徴(列名)のグループです。相互作用で単一の列が渡された場合、入力は無視されます。

ここでは、特徴x0、x1およびx2は相互に作用できますが、他の特徴と相互に作用することはできません。同様に、x0とx4は相互に作用できるが、他の特徴と相互に作用することはできないというようになります。この設定は、2次元特徴に適用されます。サポートされていない型の列や存在しない特徴名を渡すと、エラーが発生します。

xgboost_decrease_constraints

ノート:

Oracle Database 23aiでのみ使用できます。
ネストされたリストの形式を持つ1つの文字列。たとえば、[x0,x1],[x4,x5]です。

この設定では、減少制約に従う必要がある特徴(列名)を指定します。特徴名はカンマで区切ります。たとえば、値'x4,x5'を設定すると、特徴x4およびx5に対して減少制約が設定されます。この設定は、数値列および2次元特徴に適用されます。サポートされていない型の列や存在しない特徴名を渡すと、エラーが発生します。

xgboost_increase_constraints

ノート:

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

ネストされたリストの形式を持つ1つの文字列。たとえば、[x0,x1],[x0,x3]です。

この設定では、増加制約に従う必要がある特徴(列名)を指定します。特徴名はカンマで区切ります。たとえば、値'x0,x3'を設定すると、特徴x0およびx3に対して増加制約が設定されます。この設定は、2次元特徴に適用されます。サポートされていない型の列や存在しない特徴名を渡すと、エラーが発生します。

objective

ノート:

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

分類モデルの場合、次のリストのいずれかの文字列値:

  • binary:hinge
  • binary:logistic
  • multi:softmax
  • multi:softprob

回帰モデルの場合、次のリストのいずれかの文字列値:

  • binary:logitraw
  • count:poisson
  • rank:map
  • rank:ndcg
  • rank:pairwise
  • reg:gamma
  • reg:logistic
  • reg:tweedie
  • survival:aft
  • survival:cox
  • reg:squarederror
  • reg:squaredlogerror

分類モデルの設定:

  • binary:hinge: 2項分類のヒンジ損失。この設定では、確率を生成するのではなく、0または1で予測が行われます。
  • binary:logistic: 2項分類のロジスティック回帰。出力は確率です。
  • multi:softmax: softmaxの目的を使用して多クラスの分類を実行します。また、num_class(number_of_classes)を設定する必要もあります。
  • multi:softprob: : softmaxと同じですが、出力は、ndata * nclassマトリックスにさらに形状変換できるndata * nclassのベクターです。結果には、各クラスに属する各データ・ポイントの予測確率が含まれます。

分類のデフォルト値objectivemulti:softprobです。

回帰モデルの設定:

  • binary:logitraw: バイナリ分類のロジスティック回帰。出力はロジスティック変換前のスコアです。
  • count:poisson: カウント・データのPoisson回帰。出力はPoisson分布の平均です。最適化を保護するために、デフォルトでは、Poisson回帰のmax_delta_step値は0.7に設定されます。
  • rank:map: LambdaMARTを使用して、平均精度(MAP)が最大化されるリスト単位のランキングを実行します。
  • rank:ndcg: LambdaMARTを使用して、正規化された割引累積利益(NDCG)が最大化されるリスト単位のランキングを実行します。
  • rank:pairwise: 組の損失を最小限に抑えてランキングを実行します。
  • reg:gamma: ログリンクを使用したガンマ回帰。出力はガンマ分布の平均です。この設定は、保険金請求の重大度のモデリングなど、ガンマ分布になる可能性のある結果に役立つ場合があります。
  • reg:logistic: ロジスティック回帰。
  • reg:tweedie: 対数リンクありのTweedie回帰。この設定は、保険における全損のモデリングなど、Tweedie分散される可能性のある結果に役立つ場合があります。
  • survival:aft: 打切り生存時間データに対してAccelerated Failure Time (AFT)モデルを適用します。このオプションを選択すると、eval_metricではデフォルト値としてaft-nloglikが使用されます。
  • survival:cox: 右側打切りの生存時間データのCox回帰(負の値は右側打切りとみなされます)。予測は、ハザード率スケールで(つまり、比例ハザード関数h(t) = h0(t) * HRHR = exp(marginal_prediction)として)返されます。
  • reg:squarederror: 二乗損失のある回帰。
  • reg:squaredlogerror: 二乗ログ損失のある回帰。すべての入力ラベルは-1より大きくする必要があります。

回帰のデフォルトのobjective値は、reg:squarederrorです。

xgboost_aft_loss_distribution

ノート:

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

[normal, logistic, extreme]

AFTモデルのZ項の分布を指定します。これは、survival:aft目的およびaft-nloglik評価メトリックで使用される確率密度ファンクションを指定します。デフォルト値はnormalです。

xgboost_aft_loss_distribution_scale

ノート:

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

X > 0

AFTモデルのZ項のサイズをスケーリングするスケーリング係数σを指定します。デフォルト値は1です。

xgboost_aft_right_bound_column_name

ノート:

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

column_name

AFTモデルのラベルの右境界を含む列を指定します。非AFTモデルについてこのパラメータを選択することはできません。

ノート:

Oracle Machine Learningは、この設定についてBOOLEAN値をサポートしていません。

例7-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

例7-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