Open8
LightGBMコード探訪

コンテキスト: https://bsky.app/profile/nnc5522.bsky.social/post/3laq3ensoj22x
二値分類はデフォルトでラベルが0より大きいか、どうかで1/-1を使ってloglossのgrad/hessを計算する。L37でis_pos_に無名関数がセットされてる。
この関数を使って、L113のGetGradients内で1/-1のラベルを作ってる。
is_pos_関数がtrue/falseを返す
→変数定義部分でintに暗黙的にキャスト
→0/1でclass_val_には[-1, 1]が入っててこれによってサンプルごとのラベルを作成
→作成したラベルを使ってloglossのgrad/hessを計算してる

callback使うと、lrの減衰みたいなこともできるらしい。どれだけ効くかはわからないけど。収束の速さを保ったまま精度保てる?

lgb.Sequenceを継承したDatasetでHDF5使ってメモリに乗り切らないデータで学習できるってこと?

train APIでは基本中でBooster.updateを呼んでる。
その中で_LIB.LGBM_BoosterUpdateOneIterを読んでC++側の実装を呼び出してる。

C++側の実装の場所はこれで探してる

ここから新しい木を構成

初期化してるTreeの実態。interfaceはheaderにある。