Rのxgboostのobjective
とfeval
の違いは何ですか?これは非常に基本的なことですが、それらを正確に定義することはできません。
また、マルチクラス分類を行う際のソフトマックスの目的は何ですか?
目的
Objective
のxgboost
は、学習アルゴリズムが最適化する function です。定義により、1次(勾配)および2次(ヘシアン)導関数w.r.tを作成できる必要があります。特定のトレーニングラウンドでの予測。
カスタムObjective
関数の例: link
# user define objective function, given prediction, return gradient and second order gradient
# this is loglikelihood loss
logregobj <- function(preds, dtrain) {
labels <- getinfo(dtrain, "label")
preds <- 1/(1 + exp(-preds))
grad <- preds - labels
hess <- preds * (1 - preds)
return(list(grad = grad, hess = hess))
}
これはトレーニングにとって重要な関数であり、xgboost
モデルを定義せずにトレーニングすることはできません。 Objective
関数は、各ツリーの各ノードでの分割に直接使用されます。
feval
feval
のxgboost
は、モデルを直接最適化またはトレーニングする上で何の役割も果たしません。訓練するために必要なものすらありません。分割には影響しません。トレーニングした後、モデルにスコアを付けるだけです。カスタムfeval
の例を見る
evalerror <- function(preds, dtrain) {
labels <- getinfo(dtrain, "label")
err <- as.numeric(sum(labels != (preds > 0)))/length(labels)
return(list(metric = "error", value = err))
}
名前(メトリック)とスコア(値)を返すだけです。通常、feval
とobjective
は同じにすることができますが、必要なスコアリングメカニズムが少し異なるか、派生物がない可能性があります。たとえば、人々はlogloss objective
を使用してトレーニングしますが、AUC feval
を作成してモデルを評価します。
さらに、feval
を使用して、モデルが改善しなくなったらトレーニングを停止できます。また、複数のfeval
関数を使用して、さまざまな方法でモデルにスコアを付け、すべてを観察することができます。
モデルをトレーニングするためにfeval
関数は必要ありません。それを評価し、トレーニングの早期停止を支援するためだけに使用します。
概要:
Objective
は主要な主力製品です。
feval
は、xgboost
がいくつかの素晴らしいことを行えるようにするヘルパーです。
softmax
は、マルチクラス分類で一般的に使用されるobjective
関数です。これにより、すべての予測の合計が1になり、指数関数を使用してスケーリングされます。 softmax