やってみよう!Google Colabで機械学習の準備
前回は、機械学習を学習するための*1環境として、Google Colabをセットアップしてみました。
今回は、そこで実際に機械学習を実行するための、作業環境を作っていってみたいと、思います。
目次
はじめに
機械学習をするためには、基本的に、CSVファイルを読み込んで、入力データをモデルに読み込ませる必要が、あります。そして、SIGNATEなどのコンペサイトに投稿するためには、学習結果をCSVファイルに出力する必要が、あります。ローカルのJupyter Notebookでやる分には何の問題もないですが、Google Colabでやる分には、ファイルをGoogle ドライブにアップロードしなければならず、また読み込みにも、一仕掛けいります。
今回は、そんなGoogle ドライブを通したPythonのファイル入出力と、ついでに今後必要になってくるであろう以下のやり方について、実際の機械学習に入る前に、整理してみたいと思います。
- GPUの使い方
- 追加パッケージのインストール
- キーボードショートカット
- とりあえず、Jupyterでよく使っていた、セルの追加・削除、セルの種類の変換あたり。
- ついで、コード補完のやり方
作業環境の作成
作業ディレクトリの作成
まずは、マイドライブの直下にファイルを置くのもあれなので、作業ディレクトリを作っていきたいと思います。Google ドライブへのアクセスについては、前回の投稿をご参照ください。
なんと、Google ドライブでは、Webアプリであるにも関わらず、右クリックが使えます*2。マイドライブのフォルダ一覧の適当なところで右クリックして、「新しいフォルダ」を選択します*3。
以下のような画面が出てくるので、「colab」と入力し、Google Colab用のルートフォルダにしたいと思います。
すると、以下のようにフォルダが出来上がるので、出来上がったフォルダをダブルクリックします。Webでダブルクリックとは、斬新・・・
colabフォルダを開いたら、同様の手順で、銀行の顧客ターゲティングをする用の「bank」フォルダを、作ります。
最後に、同様の手順で、bankフォルダの下に、CSVファイルを置くための「dataset」フォルダを置きます。また、好み次第ではありますが、図中の赤四角の場所をクリックすれば、以下のような詳細表示に、変わります。
データファイルの準備
データは、以下の場所から、「学習用データ (train.csv)」「検証用データ (test.csv)」「応募用サンプル (submit_sample.csv)」の三つを、ダウンロードします。
ダウンロードするためには、SIGNATEにアカウントを作って、コンペに参加するための参加規約に同意する必要がありますが、ここでは手順は割愛します。一点、独自のアカウントを作らずとも、TwitterやFacebook、Googleアカウントなどでもログインできますが、ランキングサイト等に投稿者名が載ってしまうため、本名でこれらのアカウントを作っているものの、ここでは本名を出したくない人などは、注意が必要です。
データファイルのアップロード
まずは、図5で作った「dataset」フォルダに、移動します。フォルダ名をダブルクリックすれば、移動可能です。
「ここにファイルをドロップ」とか書いてある適当なあたりで右クリックし、「ファイルをアップロード」を選びます。
SIGNATEからダウンロードされた3ファイルを、選択します。
アップロードされました。
早くも容量が0.1GB増えることに・・・
容量対策についてはまた考えよう。
ノートブックの作成
それでは早速、ノートブックを作っていきたいと思います。まずは、赤枠の部分をクリックし、作業ディレクトリに戻ります。ここはクリックなんですね・・・まぁ、Windowsのエクスプローラでも、そうですけど。
戻った先の「dataset」フォルダの下あたりで右クリックし、その他⇒Colaboratoryで新規に追加します。
開いたら、ファイル⇒名前の変更から、とりあえず「Test」とでも名前を変えておきたいと思います。
名前欄にカーソルが当たって編集可能状態になり、ここで直接入力して、エーターキーを押すと、名前変更が確定するようです。
これでようやく、準備が整いました。
検証してみる
基本的な使い方
基本的には、通常のJupyter Notebook同様、「セル」と呼ばれる箱にPythonコードを入力して、Shift+Enterを押すことにより、プログラムを実行出来ます。ただ、通常のJupyter Notebookと違って、「編集モード」「選択モード」はないみたいで、これのおかげかショートカットキーの設定がちょっと違うみたいです。これは後でまとめたいと思います。
ファイルを読み込んでみる
それでは、早速やっていってみたいと、思います。Google Colabでは、pandasでpd.read_csv()としてCSVを読み込む前にまず、以下のように、Google ドライブをマウントする必要が、あるみたいです。
from google.colab import drive
drive.mount('/content/gdrive/')
マウントを実行すると、以下のように、「/content」というディレクトリがカレントディレクトリになっているみたいです。
!pwd
!ls
%cd ./gdrive
!pwd
!ls
なので、図4で作った「bank」フォルダに、移動してみたいと思います。
%cd ./My\ Drive/colab/bank
!pwd
!ls
移動できたみたいなので、直下のdatasetディレクトリから、train.csvを読み込んで、head()してみたいと思います。
import pandas as pd
train = pd.read_csv("./dataset/train.csv")
train.head()
出来ました!!!
ファイルを書き出してみる
ここまでいけば特に問題ないかと思いますが、一応、to_csvでCSV出力してみたいと思います。
train.to_csv("./test_out.csv")
Google ドライブの方を見てみると、問題なく出力できていました*4。
GPUの使い方
Google Colabの目玉と言えば無料でGPUが使えることですが、具体的な使い方としてはまず、ランタイム⇒ランタイムタイプの変更を、選びます。
その後、ハードウェアアクセラレータから、GPUを選びます。
・・・TPU?
GPUだけじゃなく、TPUも使えるみたいです。Googleが開発した、Tensor Processing Unitの略のあれですね。ぱっとぐぐった感じ、その名の通り、TensorFlow使って畳み込みニューラルネットワーク(CNN)やるときは、早くなるみたいです。
追加パッケージのインストール
上の方でも書きましたが、Google Colabの場合、!に続けてUnixコマンドを打つことができます。なので、以下のように、!に続けてpipコマンドを打つことで、任意のパッケージを、追加インストールすることが出来ます。以下は試しに、LightGBMを追加インストールしてみたところです。
!pip install lightgbm
import lightgbm as lgb
model = lgb.LGBMClassifier(random_state=1234)
なんか、ローカルでインストールするよりは早い感はありますが、問題は、毎回コレをやらなければならない点です。インストール済みの環境を取っておくことは、出来ないようなので、ちょっとめんどくさいかも、しれません。
キーボードショートカット
上の方でも書きましたが、Google Colabではセルの選択モードが無い代わりに、Ctrl+Mを押すことにより、セル操作のキーボードショートカットが出来ます。例えば、上にセルを挿入するには以下のように、Ctrl+M Aを押します。
同様に、Ctrl+M Bで下にセルが挿入され、Ctrl+M Dでセルを削除することが出来ます。また、「ツール⇒コマンド パレット」からキーボードショートカットを確認でき、例えばプログラムを入力するためのコードセルから、メモを入力するためのテキストセルに変換するには、Ctrl+M Mを押せば良いことが、分かります。ちなみに、テキストセルをコードセルに変換するには、Ctrl+M Yを押します。
コード補完のやり方
最後に、コード補完についてです。通常のJupyter Notebookだと、nbextentionsを入れることによりコード補完が有効になりますが、Google Colabど最初から有効なようです。TabキーまたはCtrl+スペースを押すことにより、補完が表示されます。ただ、ネットワークを介しているためか、ローカルのJupyter Notebookと比べると、Tabキーを押して候補ウィンドウが出るまで、少しもっさりしています。
おわりに
いかがだったでしょうか。今回やってみて分かりましたが、一見デメリットが無いように思えたGoogl Colab、以下などは使うにあたり、注意が必要かなと思いました。
- ネットワークを介しているためか、ちょっとしたコマンドを実行して帰ってくるまでが、ローカルよりちょっと遅い。
- 環境を取っておけない。LightGBMなど、デフォルトでインストールされていないパッケージは、毎回インストールする必要がある。
- ファイルI/Oは基本的にGoogle ドライブ経由。毎度マウントして、認証コードを貼らないといけない。
- 同じく、Google ドライブの容量を消費するため、データセットの容量管理には注意が必要。
というわけで、ようやく環境の整理も出来たので、次回からようやく、銀行の顧客ターゲティングについて考えていってみたいと、思います。最後まで読んでいただいて、ありがとうございました。