kaggleの始め方
アドベントカレンダー21日目です。
今日はリクエストみたいなことされたので、kaggleの始め方について書きたいとおもいます。
kaggleとは
つい先日軽く触れたのでここを少し参照してください。
コンペに参加
kaggleではいろんなコンペが開かれています。コンペの一覧はこちらから確認できます。 Competitions | Kaggle
練習用のものや、実際に賞金が出るもの、終わったコンペなどが見られます。 今回は入門用のTitanicに挑戦してみます。 https://www.kaggle.com/competitions
コンペの概要
それぞれのコンペをクリックした先のページ、Overviewに書かれています。 どのような課題があるのか、どのようなデータが与えられるのか、何を予測してほしいのか、賞金についてなど色々ここに書かれています。
今回のTitanicの例では、有名なタイタニック号の沈没の話ですが、乗船していた客に生存者がいました。生存したか、チケットの等級、性別、年齢・・・など様々な情報が学習データとして与えられます。この学習データを元に、予測を行うモデルを作成します。最終的には、生存したかどうかが抜けている本番データを用いて、生存したかどうかを予測します。
与えられるデータの中身やその説明などはDataタブに書かれています。 OverviewのEvaluationには、提出するファイルのフォーマットが書かれています。このフォーマットに基づいたファイルを提出することで、精度などのスコアが計算され、自分の順位を確認できるようになります。
データのダウンロードと予測
今回コンペのデータとして、学習に使うtrain.csv,検証に使うtest.csv,あとgender_submission.csvの3つのファイルが与えられています。train.csvを使って、予測をしていきましょう。
環境はjupyter notebook、python3でいきます。 基本的にはpandasとかいうの使うと便利なのでそれでいきましょう。
csvを読み込んでpandasのDataFrameにしました。headを使うことで指定した分だけデータを見れます。表で見れるのがいいですね。
import pandas as pd train = pd.read_csv("train.csv") train.head(3)
dtypeを見ておきます。
train.dtypes >>> PassengerId int64 Survived int64 Pclass int64 Name object Sex object Age float64 SibSp int64 Parch int64 Ticket object Fare float64 Cabin object Embarked object dtype: object
null値が入ってないか確認しましょう。
train.isnull().sum() >>> PassengerId 0 Survived 0 Pclass 0 Name 0 Sex 0 Age 177 SibSp 0 Parch 0 Ticket 0 Fare 0 Cabin 687 Embarked 2 dtype: int64
性別で生存率が違うのかなあって思ったので調べてみましょう。欠損もラッキーなことにありませんでした。まずは人数を調べます。
len(train[train.Sex == "male"]) >>> 577 len(train[train.Sex == "female"]) >>> 314
性別ごとの生存率を見てみましょう。1なら生存してます。
(train[train.Sex == "male"]["Survived"] == 1).mean() >>> 0.18890814558058924 (train[train.Sex == "female"]["Survived"] == 1).mean() >>> 0.7420382165605095
男性は19%しか生存してないけど、女性は74%も生存してますね。
何も考えずに、男性なら死亡、女性なら生存で予測するモデルということにしましょう。
本番データを読み込んで、欠損値の確認をします。
test = pd.read_csv("test.csv") test.isnull().sum() >>> PassengerId 0 Pclass 0 Name 0 Sex 0 Age 86 SibSp 0 Parch 0 Ticket 0 Fare 1 Cabin 327 Embarked 0 dtype: int64
先程の条件で、性別のみで決定をしていきます。
あとは、提出するフォーマットに合わせるため、Idと予測でセットにします。
注意点としては、index=False
にしておかないと提出したときにエラーを出します。
Survived = [] for i in test.Sex: if i == "male": Survived.append(0) else: Survived.append(1) out = pd.DataFrame(test.PassengerId) out["Survived"] = Survived out.to_csv("submission1.csv", index=False)
あとは、出力されたcsvを提出します。
Submit Predictionから提出できます。
csvファイルをアップロードし、Optionalですが、Describeを記入してもいいです。
スコアはLeaderBoardから確認できます。自分のスコアや、正しく動作したかなどが表示されます。
コンペのトップページで再び戻ってみると、順位を確認できます。
機械学習を使う
機械学習を使う際にはscikit-learnを使うと非常に楽ができます。 * 学習データと検証データの分割 * F1値などの表示 * 学習と予測 * 最適なパラメータの探索 * 混合行列の作成
使うアルゴリズムの選定は、scikit-learnに選ぶときに参考になる画像があります。そちらを見て決めていきましょう。
今回は色々検証したりしたのですが、めちゃめちゃ書くと文量が多くなるので途中でやめておきます・・・。 ソースコードは貼り付けておくので見てみてください。