本日はタイタニック生存者予測をRandomForestを用いて行なってみたいと思います。
決定木で行なった記事はこちら
コード
モデルを使用するまでの部分は前回と一緒です
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へ提出してみます。
「0.71291」なので決定木のときと一緒でした。
てっきりRandomForestの方が良いスコアがでると思っていましたが、これは予想外でした。
次は、今回使用しなかった説明変数も学習させて、より良いモデルの作成を行なっていきたいと思います。