LoginSignup
1
1

More than 1 year has passed since last update.

KaggleのTitanic Tutorialをはじめてみる

Posted at

image.png

今までKaggle関係のコードは見てきていたが、実際にKaggleのcompetitionsとしてやったことはなかったので、今回やってみた。

1. Kaggle登録

まずはKaggleのサイトで登録だが、Googleアカウントで一瞬で終わった。

image.png

2. Titanicチュートリアル

Kaggleへのアカウント登録が終わると、さっそくいろんなcompetitionsをやってみたくなるが、Kaggle入門者用のcompetitionsが3つほど並んでいたので、有名なタイタニック問題をやってみることにした。普通のcompetitionsは3か月程度の期間指定があるが、これらは常に挑戦出来る初心者用の問題として設置されている。

image.png

タイタニックコンペのサイトを開くと、説明等の記載があり、端っこに[Join competition]があるので参加表明する。

image.png

参加すると、[New Notebook]ボタンが現れ、ここでPythonコードを書いていく環境を使えるようになる。ここでゴリゴリ頑張っていってもよいが、タイタニックのチュートリアルがあるのを発見したので、まずはそっちをやってみる。

image.png

3. Titanic チュートリアル

ALEXIS COOKさん(Googleの人?)という方が作っているTitanicのチュートリアルページがあるのを発見したので、最初はチュートリアル通りやってみて流れをつかむことにした。

チュートリアルはKaggleアカウントの作り方から始まり、Titanic問題の簡単な予測結果をファイル出力して、KaggleへSubmitするところまではいっていた。

コードの中身はチュートリアル参照。

チュートリアルを終了して予測結果(submission.csv)をKaggleへ提出すると、My Submissionsというところで結果が表示される。ここではScore 0.77511となっている。

image.png

そして、Leaderboadにもその結果がランキングとして反映されている。ランキング表示されると、ついにKaggle始めたかという気になって地味にうれしい。
しかし予測モデルは完全にチュートリアルのコピーであり自分で考えてないので、次はほかの人がどんなモデル作っているのかを参考に考えていく。

image.png

チュートリアルでは、3時間のIntro to Machine Learning を推奨していたので、また今度こっちもやってみる。

4. 実装の復習

チュートリアルやっているなかで、一部コードの意味が分からなかったので復習をしておく。

4.1. pandasのget_dummies

データ処理をpandasを使って行っているが、get_dummiesという知らない関数があったので確認。

train_data = pd.read_csv("/kaggle/input/titanic/train.csv")
features = ["Pclass", "Sex", "SibSp", "Parch"]
X = pd.get_dummies(train_data[features])

pandas.get_dummies は、pandasのリファレンスを見ると、カテゴリカル変数をダミー変数に変換する処理と書かれている。

カテゴリカル変数とは、性別(男、女)や、血液型(A、B、AB、O)などの計数データのことである。
機械学習の前処理として、こういうカテゴリカル変数を、0,1などで扱えるようにダミー変数を用意してフォーマット変換してくれる関数のようである。

変換前のtrain_data[]は、以下のように[Sex]という変数の中に、[male/female]が入っている。

image.png

これを変換して、[Sex_female][Sex_male]というダミー変数を作る処理である。

image.png

4.2. Random Forestの使い方

次にScikit-learnのRandom Forestの使い方である。

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1) #モデル準備
model.fit(X, y)                                   #モデル学習
predictions = model.predict(X_test)              #予測

入力データXは、Titanicの元データから一部の列データ( ["Pclass", "Sex", "SibSp", "Parch"])に制限して、get_dummies()でカテゴリカル変数をSexをダミーに調整したデータ。教師データyは、そのデータに対応するSurviveデータである

image.png

image.png

次に、以下がモデル構築部分であるが、引数のパラメータの意味が分からない。

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

scikit-learnのリファレンスを見てみると細かく説明があった。n_estimatorsは決定木の数。100がデフォルト。max_depthは、決定木の深さ。過学習になるから深すぎるのはよくないようである。
random_state では、決定木を構築するときに使用されるサンプルデータのランダム性を制御することができるようであるが詳細は不明。この辺りはパラメータを変えながら結果を見て理解したいところである。

Parameters default guide
n_estimatorsint 100 The number of trees in the forest.
max_depth None The maximum depth of the tree. If None, then nodes are expanded until all leaves are pure or until all leaves contain less than min_samples_split samples.
random_state None Controls both the randomness of the bootstrapping of the samples used when building trees (if bootstrap=True) and the sampling of the features to consider when looking for the best split at each node (if max_features < n_features). See Glossary for details.
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1