機械学習 -タイタニック号の生存予測-

2024年2月17日土曜日

Python 機械学習

t f B! P L

タイタニック号の生存予測

機械学習の入門としてタイタニック号の生存予測をやってみる

機械学習の練習問題として、タイタニック号の生存予測というものがあります。 これは、タイタニック号の乗客のデータセットをもとに機械学習のモデルを作成し乗客の生死を判定するものです。 機械学習の分野で有名なコミュニティにkagglというものがあります。 kagglでは機械学習についての様々なデータセットの公開、それらの機械学習のモデル作成のソースコードの公開、さらに、 あるお題のデータセットに対してコンペ(competition)と呼ばれる形式で賞金をかけて高精度の機械学習モデル作成を競い合う大会のような催しがなされていたりと、機械学習に関する非常に有用なコミュニティです。 上述のタイタニック号の生存予測も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でした。

このブログを検索

ブログ アーカイブ

自己紹介

自分の写真
新しい物好きで飽き性。化学をもっと身近にするために日夜勉強中。

QooQ