Kaggleでの実験を効率化する小技まとめこの広告は、90日以上更新していないブログに表示しています。2018-12-20コピペで使える。2018の20日目の記事です。当初の予定ではPLAsTiCCコンペの振り返りをするはずだったのですが、時空の狭間に吸い込まれた結果0サブミットでフィニッシュしてしまいました。そこで、代わりにKaggleで使える便利なスニペットまとめを書くことにします。Creditコンペで実際に送っていたログ「思考は止めてもサーバーは止めるな」とはkaggler-jaの管理者であるtkmさんの名言です。サーバーを止めないためには正常・異常問わず計算終了時に通知を送ることが重要です。パーソナルアクセストークンを発行する発行したアクセストークンをYOUR_ACCESS_TOKENに入れるこれでLINE通知を送ることができます。アクセストークンはコンペが終わったら無効化すれば、GitHubにコードをそのままpushしても大丈夫です。副作用として、計算が終了したことがわかってしまうというものがあります。処理にかかる時間を計測するどこまで処理が進んでいるか分からないのは気持ちの良いものではありません。Kernelコンペの場合はそれぞれの部分でどの程度時間がかかっているかを把握し、制限時間内に収める必要があります。Notebookの場合、計測したいセルの先頭に%%timeというマジックコマンドを書くだけで時間を計測してくれます。例として、0から9999までの和を10000回計算するのにかかる時間を測定してみます。s')使い方と出力は以下のとおりです。with文を利用し、その中の処理にかかった時間を出力します。s小技としては、ロガーを受け取れるようになっています。条件によって関数を差し替える方法を知っていると、コーディングの幅が広がると思います。_callbacklog_evaluation関数にロガーを渡してあげることで、そのロガーを利用してログを吐くことができます。callbacks=callbacks)これはこちらの記事でも紹介していますので、詳しくはそちらを確認してください。Spreadsheetに自動で記入します。複数人で同時に実験をする際、パラメータや結果を簡単に共有することができます。Spreadsheet側の設定まず、結果を記録したいスプレッドシートを用意します。スクリプトエディタを開きます。以下のコードを貼り付けます。これはjavascriptで書かれており、POSTメソッドで送られてきたデータをパースし、タイムスタンプを先頭につけてスプレッドシートに書き込みます。ウェブアプリケーションとして導入を選びます。設定画面が開くので、以下のように設定してください。導入を選択すると、アプリケーションを承認する画面が出るので、承認してください。するとウェブアプリケーションとして公開され、URLが表示されます。これをコピーしておきましょう。Spreadsheet側の設定は終了です。Spreadsheetに登録したスクリプトは、json形式でリストを送れば、その各要素をセルに書き込むというものになっています。Pythonから扱うには、以下のような関数を用意すると便利です。YOUR_ENDPOINT_URLには、先程コピーしたURLを入れてください。json.dumps(args))これを使えば、書き込みたいものを関数に渡してあげるだけで良いです。引数として渡した各要素をそれぞれ別のセルに入れてくれます。クロスバリデーションの結果などはリストやnumpyのarrayに入っていることが多いですが、その場合は先頭に*をつけることでばらばらにして引数に入れてくれます。*scores)実行結果は以下のとおりです。先頭にタイムスタンプが付き、CVの結果がそれぞれ別のセルに入っていることが分かるかと思います。Notebook上でライブラリを毎回再読込するKaggle用に自作ライブラリを使っている場合、コンペをやりながら自作ライブラリも書き換えていくことが多いと思います。Notebookでライブラリを読み込む際、普通は1回importした時点で中身は固定されてしまいます。そこで、ライブラリを書き換えた時点でリロードする必要が出てきます。2これをノートブックの先頭に書いておくと、関数を実行するたびにリロードが走るようになります。詳しくはこちらのQiitaをご覧ください。QiitaDataFrameのメモリを節約するpandasのDataFrameはintならnp.int64に、floatならnp.float64がデフォルトで使われます。ある程度データセットが大きくなってくると、DataFrameがメモリを圧迫して学習を思うように進めることができなかったりします。解決方法のひとつはpd.read_csv()などをする際にdtypesを指定して読み込むことです。この方法は最初のデータセットは適切な精度で読み込むことができる反面、途中で作成した特徴量などには一切タッチできません。そこで、各列の値の範囲を参照し、適切な型に変換します。dfオリジナルはKaggleで見たのですが、3つカスタマイズを加えてあります。ロガーを受け入れるようにしたobjectとdatetimeは変換させないnp.float16はfeather形式で書き出せないため、np.float16を使わない追記:オリジナルはこちらのKernelだそうです。20日目の記事でした。kaggle全力でやりますでした。Pairsを解いてみるです。20:00コピペで使える。Recommendationコンペに参加し...2019-01-10決定木は本当に変換に依存しないのか?決定木をベースとしたモデル(RandomForestやXGBoost、LightGBM...2018-11-01LightGBMのcallbackを利用して学習履歴をロガー経由で出力するKaggleなどでLightGBMを使っていて学習履歴を見たとき、ログフ...2018-07-05ARC100に参加した(510位)ARC100に参加しました。2018年、たいへんお世話になりました。»プロフィールえじといいます。渋谷でデータサイエンティストとして働いています。Masterになりました。