無料で高性能のGPUを使って機械学習が可能な「Google Colaboratory」。
僕自身、最近になってKaggleコンペに参加し始めたのですが、その際にGoogle Colaboratoryを導入し使い始めました。
Google Colaboratoryを使っていく中で、Google Colaboratory上でのKaggleデータセットの読み込みからモデルのsubmitという一連の流れについて色々調べたので、本記事にまとめてみました。
Google ColaboratoryでKaggleコンペに参加しようと思われている方は、是非、参考にしてみてください。
それでは、Titanicコンペのデータセットの読み込みからモデルのSubmitまでの一連の流れを解説していきます。
Google Colaboratory上でデータセットをダウンロード
この記事を読んでくださっている方であればご存知かと思いますが、Kaggleコンペでは基本的に機械学習を構築するためのデータセットをダウンロードすることから始まります。
もちろん、Kaggleコンペのページからデータセットをダウンロードすることも可能なわけですが、Google Colaboratory上のJupyter Notebookからコマンド1つでデータセットをダウンロードする方法があります。
それが、「Kaggle APIを使う」という方法です。
何それ?という方もいらっしゃるかもしれませんが、百聞は一見に如かずということで、とりあえずこの「Kaggle API」を使ってTitanicコンペのデータセットをダウンロードしてみましょう(以下、Google Colaboratory上のJupyter Notebookでの操作になります)。
まずは、kaggleパッケージをpipでインストールしましょう。
Google Colaboratory上でコマンドを実行する際には、先頭に!をつけてください。
!pip install kaggle
続いて、APIを作成していきます。
まずは、Kaggleのアカウントページへ行き、
kaggle.jsonをダウンロードします。
このkaggle.jsonを~/.kaggle/に配置する必要があるわけですが、Google Colaboratoryには「ランタイムリセット」というものがあり、一定時間が経過すると実行環境が初期化されてしまうので、せっかく配置したkaggle.jsonが~/.kaggleディレクトリごと消えてしまいます。
毎回~/.kaggleディレクトリにkaggle.jsonを配置するのは面倒なので、My Drive上にkaggle.jsonを保存しておき(当然ですが、My Drive上のデータは初期化されません)、以下のようにして毎回~/.kaggleディレクトリを作成し、ここへDrive上に保存したkaggle.jsonをコピーするのが分かりやすく、おすすめです。
# Google Colaboratory上からGoogle Drive上のファイルにアクセスできるようにする
from google.colab import drive
drive.mount('/content/drive')
# ~/.kaggleディレクトリを作成し、ここへDrive上のkaggle.jsonをコピーしてくる
!mkdir ~/.kaggle
!cp /content/drive/MyDrive/kaggle/kaggle.json ~/.kaggle/
# アクセス権限の設定
!chmod 600 ~/.kaggle/kaggle.json
最初の2行のコードは、Google CoraboratoryからGoogle Drive上のファイルを操作できるようにするためのもので、最後のコードはアクセス権限の設定のためのものです。
ちなみに、Google Colaboratoryでkaggleを使う で紹介されていた方法(「著者のやり方」で紹介されている方法)のように、kaggle.jsonのパラメータを環境変数に渡すという方法でも良いと思いますが、環境変数って何?って方は前者の方法をオススメします。
これでAPIの作成は終わりです。
それでは早速、Titanicコンペのデータセットをダウンロードしましょう。
KaggleのTitanicコンペのデータダウンロードページへ行くと、以下のようにそのコンペのデータセットをコマンドラインでダウンロードするためのコードが書かれているので、これをコピーし実行します。
なお、Google Colaboratory上にデータセットを保存してしまうと、前述した「ランタイムリセット」によってせっかくダウンロードしたデータセットが消えてしまうので、Google Driveに保存するのがオススメです。
やり方は、先程コピーしたコードに加えて、以下のようにDrive上保存先ディレクトリのパスを指定します(僕はkaggle_competition/titanicフォルダを作成し、そこへデータセットを保存しました)。
!kaggle competitions download -c titanic -p /content/drive/MyDrive/kaggle_compete/titanic
あとは、pandas.read_csv()でデータセットを読み込むだけです。
import pandas as pd
df_train = pd.read_csv("/content/drive/MyDrive/kaggle_compete/titanic/train.csv")
df_test = pd.read_csv("/content/drive/MyDrive/kaggle_compete/titanic/test.csv")
df_submission = pd.read_csv("/content/drive/MyDrive/kaggle_compete/titanic/gender_submission.csv")
これでデータ解析の準備が整いました。
Google Colaboratory上で構築したモデルを提出
それでは、モデルをSubmitしてみましょう。
今回はとりあえずSubmitの方法を知ってもらいたいので、データセットをもとにモデルを構築し目的変数を予測するということはせずに、Submit用のcsvファイルであるgender_submission.csvファイルをそのままSubmitしてみたいと思います(ちなみにgender_submission.csvファイルでは、女性のみが生存するというモデルになっています)。
まずは、Kaggleコンペのページにある「Submit Prediction」をクリックしてください。
そうすると以下のようにコマンドラインでcsvファイルをSubmitするためのコードが載っているので、これをそのまま実行します。
!kaggle competitions submit -c titanic -f submission.csv -m "Message"
これで完了です(-mオプションの"Message"はそのモデルに関する任意のメッセージをつけてください)。
ちなみに、データのダウンロードやモデルのSubmitの際に使ったkaggleコマンドの詳細についてはKaggle-api に記載されているので、オプションの指定などの細かいことについてはここで確認してください。
おわりに
今回は、Google Colaboratory上でKaggleのデータセットをダウンロードし、モデルをSubmitするというKaggleコンペにおける基礎の基礎について解説しました。
僕自身、これからKaggleコンペに積極的に参加していく予定なので、その際に記事にしたいことがあれば、どんどん投稿していきたいと思います。