2016-06-11 11 views
0

私はカテゴリーデータと、私が最適化しようとしている目的関数を持っています。 xgboostのドキュメントでは、独自の目的関数を与えることができると言われていますが、グラデーションとヘッセ行列を返す必要があります。私はカテゴリーデータがあるときヘッセンまたは勾配が何を意味するのかよくわかりません。目的関数は次のようになりますPythonでカテゴリデータのカスタム目的関数をxgboostに与えることは可能ですか?

sum_{all classes i} ((number of correct predictions in class_i)/(number in class i)) 

この場合、カスタム目的関数を作成することはできますか?

答えて

0

目的関数の勾配とヘッセン(2次微分)を解析的に計算するには、モデルの予測と真のラベルを使って定義する必要があります。

目的関数から、重みの精度(パーセントなし)のメトリックを最適化していることは明らかです。クラスの重みは、そのクラスの数インスタンスに依存します。 私たちは三つのクラス、ABCために次のことを定義してみましょう:
- C_AC_BC_Cも対応するクラス内の正しい予測の数。
- N_AN_BN_Cは、これらの各クラスのインスタンス数です。
- N_A+N_B+N_C = Tをインスタンスの総数として指定します。
次に、目的関数はC_A/N_A + C_B/N_B + C_C/N_Cに変換されます。
これは、(C_A/T)*(T/N_A) + (C_B/T)*(T/N_B) + (C_C/T)*(T/N_C)と書くこともできます。
これは全体的な精度と直接比較することができます:C_A/T + C_B/T + C_C/T

これは、xgboostの "multi:softmax" inbuilt目的関数を使用して目的を間接的に最適化できることを意味します。

関連する問題