小ネタ:LightGBM の callback が何を受け取るのか確認する
懲りずにまた LightGBM ネタです。前回*1が重すぎてしばらくブログ書くことは無いだろうと思っていたのですがふと思い付きました。
諸事情により LightGBM の callback を実装したくなったのですが、公式 docs の説明*2を読んだだけだと、
関数っぽいものを渡すんだろうけど何を受け取るのかよくわからんなということで、調べると共に備忘録を残すことにしました。
目次
- callback 関数が受け取るもの
- 百聞は一見に如かず
- おわりに
- 余談
*1:https://tawara.hatenablog.com/entry/2020/05/14/120016
*2:https://lightgbm.readthedocs.io/en/latest/pythonapi/lightgbm.train.html#lightgbm.train
LightGBM で強引に Multi-Task(は???) Regression を行う
!!注意!!:この記事の内容は率直に言って全く褒められた行為ではありません。それをご了承の上でネタとしてご覧ください。
はじめに
前回*1に引き続き今回も LightGBM のお話です*2。前回はちょい使いどころがある話でしたが、今回に関しては本当に誰得ネタだと思います。
僕自身は DSB2019 の反省*3*4をしている際に Regression 用の Custom Objective の作り方を学び、前回の記事を書いている中で Binary Classification についても作り方を学びました*5 。 その流れで「んじゃ今度は Multi-Class でもやってみるか~」となり、更にその流れで「Multi-Task はどうなんや?」となってこの記事を書くに至りました。タイトルで「Multi-Task(は???) Regression」となっているのはこの表現が合っているのか自信が無い & 実装上の理由*6があって、 これについては後程説明します。
先におことわりしておくと、僕は GBDT の仕組みを何となくしか理解しておらずあくまで外部仕様を把握して使っているという状態です。なので、この記事が誤った内容や不正確な内容を含んでいる可能性は多分にあり、またそれを非常に恐れています。読む方は疑いの目線を持って読んで頂きつつ、誤りを発見してもどうか...どうか優しくしてください😇
目次
- はじめに
- 準備:Multi-Class Classification 用に Custom Objective を作る
- 本題:じゃあ Multi-Task はどう?
- これって意味あるの?
- 本当に... 本当に意味は無い?
- おわりに
- 参考: GBDT の multi-class classification に関する情報
- おまけ:他に方法はあるの?
*1:https://tawara.hatenablog.com/entry/2020/05/09/162633
*2:小ネタにしては長すぎたのでタグは付けていない
*3:https://umi-log.com/kaggle-dsb-mtg/
*4:https://www.slideshare.net/TakujiTahara/201200229-lt-dsb2019-ordered-logit-model-for-qwk-tawara
*5:長くなるので記事中には登場しませんでしたが。
*6:LightGBM の 内部実装を理解している方はこの時点で多分わかると思います。
小ネタ:LightGBM の objective を metric から消し去る
今回は知ってる人が沢山いそうという意味で誰得な小ネタです。でも個人的には気付きにくかったので備忘録がてら書きます。
kaggle 等の分析コンペにおいてとりあえず使っとけとなる GBDT ですが、ときに自作の目的(損失)関数・評価関数を用いて学習させたくなるときがあります。
例えば LightGBM だと lightgbm.train
にfobj
、feval
という引数が存在し、これらに自作関数を渡すことが可能です。
今回のネタはタスクの評価指標が特殊なときに、それを自作して学習中の early stopping に使いたいようなときに必要になる話だと思っています。
目次
- feval だけ設定すると"事故"る
- 解決策
- おわりに
- おまけ:でも loss も確認したくない?
小ネタ:pathlib.Path と Kaggle Notebooks のディレクトリ構成
誰得小ネタ第三弾です。今回は pathlib.Path
の話になります。
実は知ったきっかけは ASHRAE*1 で一位を獲られた方*2 が公開した notebook で使われているのを見たからでした。 python 歴が長いくせに知ったのはずいぶん最近という。もっとはやく知りたかった... 😇
この記事では説明の都合で kaggle 上で Titanic コンペ*3 のデータを用いて例を挙げています。Public にしといたのでご参考まで。
僕自身 pathlib
の機能をちゃんと把握していなかったのですが、python 側からディレクトリを削除するといったファイル操作系がまとまっていて実はめっちゃ便利みたいです*4*5、なんだこの神がかった標準ライブラリは... 記事を書くついでに調べる内に色々知って衝撃を受けました(os.mkdir()
とかを未だに使っていた顔)。
ここではあくまでディレクトリ/ファイルパスの操作について触れます。
目次
- Kaggle / Titanic コンペで実行する notebook とコンペデータの位置関係
- 相対 / 絶対 path の取得
- / による path の結合
- ファイルの読み込み / 書き込み
- おわりに /
- おまけ / Kaggle Notebooks に合わせてローカルのディレクトリ構造を作る
*1:https://www.kaggle.com/c/ashrae-energy-prediction
*2:https://www.kaggle.com/yamsam
*3:https://www.kaggle.com/c/titanic
*4:Python, pathlibの使い方(パスをオブジェクトとして操作・処理): https://note.nkmk.me/python-pathlib-usage/
*5:Pathlibチートシート: https://qiita.com/meznat/items/a1cc61edb1e340d0b1a2