BETA

Kaggle Titanic competitionをチュートリアル通りに進めてみた

投稿日:2020-03-02
最終更新:2020-03-02

前回:Kaggleの始め方(Titanicコンペに参加する)の続きです。

前回は提供されたサンプルファイルを提出しただけでした。
今回から予測精度の向上を図っていきます。

引き続き、チュートリアルを参考に進めていきます。

[1] Kaggleが用意してくれた環境を使う

KaggleではNotebook(旧Kernel)と呼ばれる、クラウドの実行環境を用意してくれています。

[1-1] Notebookを作成する

[Notebook]タブの[New Notebook]をクリックします。

[1-2] Notebookの設定

言語は「Python」、タイプは「Notebook」を選択します。

気になったのは私だけかもしれませんが、ADBANCED SETTINGSの内容は以下の通りでした。
Google Cloudとの連携は便利かもしれません。

[1-3] Notebookの作成完了

[Create]をクリックすると数10秒後に、Notebookの作成が完了します。

[1-4] ファイルの場所

作成時に用意されているコードをそのまま実行すると、ファイルの場所が出力されます。
画面右側の[Data]からも確認できます。

[1-5] Notebookのスペック

NotebokkのスペックはNotebooks Documentation | Kaggleに書いてありました。
本格的なデータ分析を行うにあたっては心許無いですが、無料でこれだけの環境を用意してくれているのはありがたいです。

スペック CPU環境 GPU環境
CPUコア 4コア 2コア
RAM 16GB 13GB
実行時間 9時間 9時間
自動保存ディスク容量 5GB 5GB

[2] チュートリアル通りに進める

[2-1] データの中身を出力する


[2-2] ランダムフォレストを使う

チュートリアルではランダムフォレストを使っています。
ランダムフォレストは決定木の一種です。

チュートリアルに載っていたコードは次の通りです。
各コードの意味を整理していきます。

from sklearn.ensemble import RandomForestClassifier  

y = train_data["Survived"]  

features = ["Pclass", "Sex", "SibSp", "Parch"]  
X = pd.get_dummies(train_data[features])  
X_test = pd.get_dummies(test_data[features])  

model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)  
model.fit(X, y)  
predictions = model.predict(X_test)  

output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': predictions})  
output.to_csv('my_submission.csv', index=False)  
print("Your submission was successfully saved!")  

[2-3] 必要な特徴量だけを取り出す

予測結果に影響のありそうな'Pclass', 'Sex', 'SibSp', 'Parchのデータを取り出しています。

features = ['Pclass', 'Sex', 'SibSp', 'Parch']  

[2-4] カテゴリ変数の数値化

features = ["Pclass", "Sex", "SibSp", "Parch"]  
X = pd.get_dummies(train_data[features])  
X_test = pd.get_dummies(test_data[features])  

元のデータは数値だけではありませんでした。
例えば、Sex(性別)はカテゴリデータ('male', 'female')ですが、機械学習を行うにあたり数値化する必要があります。pandasのget_dummiesで数値化しています。

下記が元データです。

下記が数値化後のデータです。
Sexが0と1だけで構成されるダミーデータ(Sex_female, Sex_male)に変換されています。

[2-5] モデルの作成

今回使用するモデルはランダムフォレストです。

model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)    

n_estimators:決定木の数
max_depth:木の深さの最大値
random_state:乱数を制御するパラメータ(1はシード値)

[2-6] 学習

model.fitで学習を行います。

y = train_data['Survived']  

model.fit(X, y)  

y = train_data['Survived']は学習における正解の取り出しです。
正解に近づくように学習を行います。

[2-7] テスト

学習に使用していないデータで予測を行い、モデルの精度を確認します。

predictions = model.predict(X_test)  

[2-8] 予測結果を出力する

予測結果のフォーマットは'PassengerId', 'Survived'の2列のデータでした。
フォーマットを合わせてCSVファイル出力します。

output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': predictions})  
output.to_csv('my_submisson.csv', index=False)  

[3] 予測結果の提出

出力した予測結果「my_submisson.csv」を提出します。

[3-1] チュートリアルの実行結果

以下の画像は、チュートリアルをNotebookで実行した結果です。
まずは編集したNotebookをコミットするために、右上の[Commit]ボタンをクリックします。

[3-2] コミット


少し待つとコミットが終了します。

終了したら[Open Version]をクリックします。

[3-3] 予測結果の提出

[Open Version]クリック後の画面で、右側の[Output]をクリックします。

先ほど出力した「my_submisson.csv」が表示されるので、選択して[Submit to Competition]をクリックします。

[3-4] Leaderboardの確認

予測結果が提出されました。

Leaderboardで順位を確認すると、前回の12900位から若干上がりました。

[4] 終わりに

チュートリアル通りに進めてみた結果、Kaggleで予測結果を提出するまでの流れが理解できました。
期限のある本番のコンペティションであれば、チームを組んだり、上位者のコードを参考にしたり、また新しく覚えることが増えるのかもしれません。
しかし、チュートリアルのおかげでスタートラインに立つことは出来た気がします。

最後に、お世話になったチュートリアルのいいねボタン?をクリックして感謝の意を示しましょう。

参考にさせていただいたサイト

pandasでカテゴリ変数をダミー変数に変換(get_dummies)
scikit-learnを用いたサンプルデータ生成

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

役に立つことから立たないことまで日々のアウトプットを綴る

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう