Feature Engineering + Algorithm開発に集中できるように,Kaggle用のリポジトリを作ったので簡単に解説したいと思います.リポジトリは以下
使用方法ですが,まず,適当なCompetition(competition
とします)からtrain.csv
とtest.csv
をダウンロードして,kaggle-base/input/competition/
に配置します.そして,以下のコマンドでsubmission.csv
を作成します.作成される場所は,デフォルトではkaggle-base/workspace/postprocessor/competition/
配下です.
あとはこのsubmission.csv
をKaggleにsubmitすれば完了です.
このリポジトリは以下の3つのモジュールからなります.
- preprocessor
- learner
- postprocessor
preprocessorは,train.csv
とtest.csv
を元に,以下の4つのファイルをkaggle-base/workspace/preprocessor/competition/
配下に作ります.
- x_train.pickle
- y_train.pickle
- x_test.pickle
- id_test.pickle
各ファイルの意味はscikit-learnに準拠していますが,id_testだけはテストファイルのidのリストです.
learnerは,上のファイルを元に,kaggle-base/workspace/learner/competition/
配下にmodel.pickle
を作ります.
postprocessorは,できたモデルを使ってテストデータに対して予測をし,kaggle-base/workspace/postprocessor/competition/
配下にsubmission.csv
を作ります.
これらを実行するには,kaggle-base
配下で以下のコマンドを実行します.
bash run.sh competition id_column target_column task_type random_state
各引数の意味をtitanicやhouse-pricesなどを例に解説すると,以下のような感じです.
competition
: project_name的な役割です.例えばtitanicやhouse-pricesなどを指定します.
id_column
: IDに該当するカラム名です.例えばPassengerIdやIdなどを指定します.
target_column
: 目的変数を指すカラム名です.例えば,SurvivedやSalePriceなどを指定します.
task_type
: タスクのタイプを指定します.例えばclassificationやregressionを指定します.現状classificationとregressionしかサポートしていません.
random_state
: 乱数のseedです.実験結果を再現するのに使います.
以上が簡単な使い方です.さて,ほとんどの場合,自分で実装した前処理や学習アルゴリズム,そして後処理を使いたいという場合がほとんどでしょう.その場合は,環境変数でそれらを指定します.以下の3つの独自のスクリプトを作成したとします.
kaggle-base/preprocessor/competition.py
kaggle-base/learner/competition.py
kaggle-base/postprocessor/competition.py
これらを使ってsubmission.csv
を作成するには,以下のコマンドを実行します.
env PREPROCESSOR=competiton.py LEARNER=competition.py POSTPROCESSOR=competition.py bash run.sh competition id_column target_column task_type random_state
以上が使い方になります.実際に独自スクリプトを使う際には,新しいブランチを作ることを推奨します.報酬がKnowledgeなCompetitionに対しては,competition-titanic-developer-name
みたいな感じで作って,cv score + public scoreを添えてプルリクを出していただければ,もっとも良いアルゴリズムは,competition-titanic
にマージしようと思っています.初めて使う人が,ブランチをチェックアウトすることで,最高性能のアルゴリズムを見ることができるように.もちろん,このプロジェクトが流行ればですが笑.
ぜひ使っていただければ幸いです.
Written with StackEdit.