タイタニック号の生存予測
機械学習の練習問題として、タイタニック号の生存予測というものがあります。 これは、タイタニック号の乗客のデータセットをもとに機械学習のモデルを作成し乗客の生死を判定するものです。 機械学習の分野で有名なコミュニティにkagglというものがあります。 kagglでは機械学習についての様々なデータセットの公開、それらの機械学習のモデル作成のソースコードの公開、さらに、 あるお題のデータセットに対してコンペ(competition)と呼ばれる形式で賞金をかけて高精度の機械学習モデル作成を競い合う大会のような催しがなされていたりと、機械学習に関する非常に有用なコミュニティです。 上述のタイタニック号の生存予測もkagglのコンペに用いられ、現在では練習問題として広く知られています。 kagglにおいて、タイタニック号の生存予測のチュートリアルが公開されていますので、今回はそれをこのまま実施します。
kagglからデータセットを取得
(1)kagglのタイタニック号の生存予測のページにアクセス
(2)kagglのアカウント作成してログイン
(3)Dataから"Download all"でデータセットを取得
titanic.zipというフォルダがダウンロードできたかと思います。これを解凍すると、test.csv、train.csv、gender_submission.csvという三つのファイルが入っています。一般的に、機械学習を行う際にはデータセットを訓練用とテスト用のデータに分割します。titanicのデータセットではすでに訓練用とテスト用のデータがそれぞれtrain.csv、test.csvに分けらています。学習結果のモデルは最後kagglにアップロードして正答率を計算してもらいます。gender_submission.csvはこの提出データの参考です。
機械学習
それではタイタニック号の生存予測を概ねチュートリアルの通りに行います。実行はGoogle Colaboratoryにて実施します。
(1)モジュールのインポート
import numpy as np
import pandas as pd
(2)訓練用データのインポート
train_data = pd.read_csv("{train.csvのディレクトリ}/train.csv")
train_data.head()
(3)テスト用データのインポート
test_data = pd.read_csv("test.csv")
test_data.head()
train_data.head()、test_data.head()でそれぞれ最初の4行のデータが表示されている。test_dataの方はSurvived(乗客の生死)の列がなくなっている。
(4)データの解析
women = train_data.loc[train_data.Sex == 'female']["Survived"]
rate_women = sum(women)/len(women)
print("% of women who survived:", rate_women)
men = train_data.loc[train_data.Sex == 'male']["Survived"]
rate_men = sum(men)/len(men)
print("% of men who survived:", rate_men)
rate_women、rate_menでそれぞれ、女性と男性の乗客の生存率を計算して表示しています。女性と男性の生存率はそれぞれ74.2 %と18.9 %です。これはタイタニック号の事故では、女性の避難が優先的に行われたためであると推測できそうです。
(5)機械学習の実施と結果の出力
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('submission.csv', index=False)
print("Your submission was successfully saved!")
RandomForestClassifierというモジュールを用いて、ランダムフォレストというアルゴリズムにより機械学習を実施。 学習の結果がsubmission.csvで出力されます。
結果の提出
(1)kagglのタイタニック号の生存予測のページにアクセス
(2)"Submit Pridiction"をクリック
(3)submission.csvをドラック&ドロップ
(4)"submit"をクリック
採点結果が以下のように表示されます。チュートリアルの通りに実施すると正答率が0.775でした。