ギークなエンジニアを目指す男

機械学習系の知識を蓄えようとするブログ

Pythonで決定木とRandomForestを比較してみる。その2(タイタニック生存者予測)

本日はタイタニック生存者予測をRandomForestを用いて行なってみたいと思います。

決定木で行なった記事はこちら

taxa-program.hatenablog.com

コード

モデルを使用するまでの部分は前回と一緒です

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")

#トレーニングデータ欠損値処理
train['Fare'] = train['Fare'].fillna(train['Fare'].median())
train['Age'] = train['Age'].fillna(train['Age'].median())
train['Embarked'] = train['Embarked'].fillna('S')

#トレーニングデータカテゴリ変数の変換
train['Sex'] = train['Sex'].apply(lambda x: 1 if x == 'male' else 0)
train['Embarked'] = train['Embarked'].map( {'S': 0, 'C': 1, 'Q': 2} ).astype(int)

#検証データ欠損値処理
test['Fare'] = test['Fare'].fillna(test['Fare'].median())
test['Age'] = test['Age'].fillna(test['Age'].median())
test['Embarked'] = test['Embarked'].fillna('S')

#検証データカテゴリ変数の変換
test['Sex'] = test['Sex'].apply(lambda x: 1 if x == 'male' else 0)
test['Embarked'] = test['Embarked'].map( {'S': 0, 'C': 1, 'Q': 2} ).astype(int)


## RandomForest
from sklearn.ensemble import RandomForestClassifier

target = train["Survived"].values
features_one = train[["Pclass", "Sex", "Age", "Fare"]].values

# モデルの作成
clf_RF = RandomForestClassifier(random_state=0)
clf_RF = clf_RF.fit(features_one, target)

# 予測
pred_RF = clf_RF.predict(test_features)

# PassengerIdを取得
PassengerId = np.array(test["PassengerId"]).astype(int)

# my_prediction(予測データ)とPassengerIdをデータフレームへ落とし込む
my_solution = pd.DataFrame(pred, PassengerId, columns = ["Survived"])

# my_tree_one_RF.csvとして書き出し
my_solution.to_csv("my_tree_one_RF.csv", index_label = ["PassengerId"])

ここまででCSVへの書き出し処理は終了です。

Kaggleに提出してみる

今回出力したデータをKaggleへ提出してみます。

f:id:taxa_program:20180521002148p:plain

「0.71291」なので決定木のときと一緒でした。

てっきりRandomForestの方が良いスコアがでると思っていましたが、これは予想外でした。

次は、今回使用しなかった説明変数も学習させて、より良いモデルの作成を行なっていきたいと思います。