【kaggle③】初心者がタイタニック号の生存予測モデル(Titanic: Machine Learning from Disaster)をやってみる(特徴量生成と生存関係の可視化)
2.7. 特徴量毎の生存分布確認(可視化)と特徴量生成
データの可視化は非常に重要。
pandasを使うと1~2行程度表やグラフを描けるのでどんどん使います。
可視化方法においては※1を参考にさせて頂きました。
データを表/グラフ化し、機械学習を行う特徴量を選定していきます。
2.7.1 可視化(表化、グラフ化)
各特徴量と[Survived]の相関を見てみます。
ちなみに1行で書けます。
df_train[['Pclass', 'Survived']].groupby(['Pclass'], as_index=False).mean()
結果はこんな以下のような感じです。
上級クラスの方が平均的には生き残っているようです。
ということで他も見てみます。
df_train[['Sex', 'Survived']].groupby(['Sex'], as_index=False).mean() df_train[['SibSp', 'Survived']].groupby(['SibSp'], as_index=False).mean() df_train[['Parch', 'Survived']].groupby(['Parch'], as_index=False).mean() df_train[['Honorific', 'Survived']].groupby(['Honorific'], as_index=False).mean()
- 女性が残る傾向あり
- 1人乗船、もしくは、兄弟配偶者の数は2人以下の生存率が高い
- 家族ずれの生存率は高いが、多すぎると逆に生存率が下がる
- 1:Mrs, 2:Miss 3:Master が同様に生き残る傾向にあり、
女性子供が優先的に救命ボートに乗れたようです。
グラフ化もしておきますが、gitに書いてあるのでコードは割愛します。
- 乗船クラスが高い程、生存率が高い
- 女性の生存率が高い
- 素のAge分布(欠損あり)
- Age_1) 20代前半にピークが際立っており、偏りがある
- Age_2) Age_1に比べて年齢がばらついている
- 0:Mrの生存率がかなり悪い
だいぶ直観的になってきました。
前回補完した[Age_1]に比べて、[Age_2]の方が、ピークが抑えられている。
2.7.2 特徴量生成
難しいことはしていません。
乗客自身を含めた家族人数[FamilySize]という特徴量を生成します。
これで、[SibSp][Parch]をまとめて意味のある次元圧縮が可能となります。
次元の呪いを避けるためにも、次元削減は検討しましょう。
次元圧縮には、正規分布を仮定したPCA(主成分分析)やそれを仮定しないICA(独立成分分析)、などもありますが、今回は触れません。
df_train["FamilySize"] = df_train["SibSp"] + df_train["Parch"] + 1 df_train[['FamilySize', 'Survived']].groupby(['FamilySize'], as_index=False).mean()
家族の人数が1~4人の生存率は高い。
特に1人乗りは、総じて生存率が高いわけではなく、
ある程度人数がいた方が生存率が高いです。
救命ボートに乗りやすかったのか、
危険な情報の共有ができたのかもしれません。
可視化と特徴量生成は以上です。
次回は、いままでの情報を元に学習用データセットを準備です。