私はxgboostが最初の勾配と2番目の勾配を必要としていることを知っていますが、誰もが "mae"をobj関数として使用していますか?Xgboost - "mae"を目的関数として使用するには?
4
A
答えて
3
まず少し理論がありますが、申し訳ありません。あなたはMAEのgradとhessianを求めましたが、MAEはcontinuously differentiableではありませんので、第一次と第二次の導関数を計算しようとするのは本当に不可能です。以下では、MAEが連続的に分化できないようにする「キンク」をx=0
に見ることができます。私たちの最善の策は、それに近似しようとすることです。
私たちは、絶対値を近似するいくつかの機能があること上記を参照することができます。明らかに、非常に小さな値の場合、Squared Error(MSE)はMAEのかなり良い近似値です。しかし、これはあなたのユースケースでは十分ではないと思います。
Huber損失は十分に文書化された損失関数である。以下のように
import xgboost as xgb
dtrain = xgb.DMatrix(x_train, label=y_train)
dtest = xgb.DMatrix(x_test, label=y_test)
param = {'max_depth': 5}
num_round = 10
def huber_approx_obj(preds, dtrain):
d = dtrain.get_labels() - preds #remove .get_labels() for sklearn
h = 1 #h is delta in the graphic
scale = 1 + (d/h) ** 2
scale_sqrt = np.sqrt(scale)
grad = d/scale_sqrt
hess = 1/scale/scale_sqrt
return grad, hess
bst = xgb.train(param, dtrain, num_round, obj=huber_obj)
その他の機能はobj=huber_obj
を置換することによって使用することができ、PythonのXGBoostで実施することができます。
公正損失は完全に文書化されていませんが、かなりうまくいくようです。以下のコードで定義されているようにgradを知ると、公平な損失関数が得られるように積分を取る:
、このコードはKaggleオールステートチャレンジ第二場所solutionから取り出され、適合されているような、
def fair_obj(preds, dtrain):
"""y = c * abs(x) - c * np.log(abs(abs(x) + c))"""
x = dtrain.get_labels() - preds
c = 1
den = abs(x) + c
grad = c*x/den
hess = c*c/den ** 2
return grad, hess
として実装することができます。
Log-Coshロス機能。
最後に、上記の関数をテンプレートとして使用して独自のカスタム損失関数を作成することができます。
関連する問題
- 1. カスタム目的Fscoreを最適化する関数 - XGBOOST
- 2. xgboostの目的とfevalの違い
- 3. 目的関数cでasin()関数を使用する方法
- 4. Pythonでカテゴリデータのカスタム目的関数をxgboostに与えることは可能ですか?
- 5. ステップ関数を使用した目的関数の最適化
- 6. "fsolve"を使用して目的関数を最適化する方法は?
- 7. RでXGBoostを使用してクラス変数を予測する
- 8. 関数の引数の前に&を使用する目的は何ですか?
- 9. プラグインを使用してアプリケーション(特にEllie Mae Encompass)にパネルを追加します。
- 10. .each関数はのonchange目的球に隠された要素と使用して複数のセレクタをスキップし
- 11. TensorFlow:目的関数としてスピアマン距離を実装する
- 12. 目的関数cで補完ハンドラを使用するメソッド
- 13. MSStickerBrowserViewControllerを目的関数で使用する
- 14. iOSアプリケーションで目的のcランタイム関数を使用する
- 15. 目的関数CのEXC_BAD_EXCESSがゲッターを使用する場合
- 16. DEAPを使用した多目的関数の最小化
- 17. NSXML目的関数Cを使って解析する
- 18. 「アイデンティティ関数」の目的は?
- 19. 関数はオブジェクトとオブジェクトを使用して関数を使用します
- 20. cでcons char関数を使用して目的のCラベルを設定するには
- 21. 関数を返すIIFEとして関数を定義する目的は何ですか?
- 22. 複数の目的地を使用するには?
- 23. 一般的な目的として使用するMIMEタイプは何ですか?
- 24. 引数としての関数の効率的な使用
- 25. テンプレート関数をパラメータとして使用するC++テンプレート関数
- 26. 関数を別の関数のパラメータとして使用する
- 27. 目的関数Cの値を返すswift関数の使い方は?
- 28. 不明なリスト項目を使用して、同時にすべての項目を使用する関数を書くことはできますか?
- 29. SOCIを使用してPL/pgSQL関数に動的にバインドする方法は?
- 30. 目的関数CへのSwift関数