素面この広告は、90日以上更新していないブログに表示しています。2018の16日目の記事となります。実験の記録まとめ参考にさせていただいた諸々なぜKaggleでLogを取りたいかKaggleのようなコンペティションにおいて、ログを取る目的は大きく二つ。プログラムの実行記録。デバッグやボトルネックの発見のため機械学習プログラムの実行時間は長くなりがち。試行錯誤の回数を得るためにもボトルネックは把握して解消したい。バグもエラーが出るものばかりではない。自分の意図した処理になっているのか後から確認できるようにしたい。学習過程の記録のためいろいろ思いついたことを片っ端から試していくことになる。何をやって何をやってないのかの記録が必要。機械学習を行った際の学習過程は次の試行の方針を決めるために必要な情報。いう情報が欲しいか次に、前節を踏まえてどのような情報がどのような形式で欲しいかを考える。実行時間の記録それぞれのモジュール単位で確認できればベスト。なくともログの記録時には時間も一緒に記録してほしい。実行時には標準出力に実行過程の概略を流しつつ詳細は別途ログファイルに保存とかしたい。出来れば簡潔に記述したい。timeモジュールを使って挟みこむようなものはあまり書きたくない。DataFrameの列数を記録するなどはしたい。学習直前に行えば利用している特徴量の記録になる。詳細な記録や処理状況はDataFrameのhead()やdescribe()を利用する方が良いか。実験の記録ログファイルで記録したいのはハイパーパラメータと学習過程の記録になる。学習過程の記録はフォーマットをそろえて後からスクリプトやノートブックで取り扱いがしやすい形にしておくと便利。上記の記録をそれぞれ管理しつつコンペ中に実施する多量の実験ごとに整理したい。基本pythonのloggingモジュールを利用して記録する。loggerは使わずにすましたい。複数のモジュールに渡って同じ実験ごとのloggerにログを投げ込んでほしい。言ってすべての関数にloggerを引数として与えるなんてことはしたくない。そこで以下のようなモジュールを作りこれを利用して関数としてloggerを取得することにする。getLogger(exp_version)あとは上記のモジュールを実際の実験スクリプトや各種モジュールで読み込んで以下のように記述する。VERSION.log"が生成され実験番号に応じたログが取れる。実行時間の記録こちらの記事を参考にしてデコレータを用いた実行時間計測を行う。この時にデコレータ側で実験番号に応じたloggerを呼び出してあげれば実行時間をloggerを利用して計測と記録ができる。_stop_watchあとは上記のモジュールを利用するだけ。function()これで行ける。処理過程の記録これは一番最初の方法を用いて"メッセージ"に適宜ほしい情報を入れてしまうのが良いと思われるので省略。実験の記録LightGBMこの辺りは先達のkagglerの方たちの記事があるのでコレとかソレの方を見ていただいた方が良いかもしれない。いうか二つ目のamaotone(@SakuEji)さんの記事なんかもろ一致。ここで何を書くのかだが素直にコードを載せるくらいにしておく。方針は今までと一緒で外部モジュールにして読み込んで実験スクリプトで利用することを想定している。_callbackあとは上記のモジュールをよしなに。function()まとめ一応Kaggleアドカレの記事ということでkaggleで実際に自分が使って便利だと感じたlogの取り方をまとめた。片手落ちの状態なので今参加しているコンペが一段落したら諸々追記します。月別アーカイブはてなブログをはじめよう!icebeeさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。