MotoJapan's Tech-Memo

技術めも

【kaggle④】初心者がタイタニック号の生存予測モデル(Titanic: Machine Learning from Disaster)をやってみる(学習データ相関確認、分割、正規化)

これの続き~
【kaggle③】初心者がタイタニック号の生存予測モデル(Titanic: Machine Learning from Disaster)をやってみる(特徴量生成と生存関係の可視化) - MotoJapan's Tech-Memo

2.8. データ相関再確認と分割

df_train_dropna = df_train.copy()
df_train_dropna = df_train_dropna.drop('Cabin', axis = 1)
df_train_dropna = df_train_dropna.drop('PassengerId', axis = 
df_train_dropna = df_train_dropna.drop('Age', axis = 1)
df_train_dropna.corr()

f:id:motojapan:20170629232257p:plain

  • [Pclass],[Sex]は相関が高いデータ
  • [Age_1]より[Age_2]の方が傾向は良い
  • [Honorific]はかなり有効そう

データ解析の結果から次が注目点となる:

  • Pclass, Sex, FamilySize, Age_2(Honorific) を特徴量として使える可能性
  • SibSpとFamilySizeの差
  • Fareの関係性
  • Honorificは、Sexよりよい特徴量の可能性
    • maleの内、masterは生き残りやすいことが想定される

Fare等も良い相関が良いデータだか
今回は前回のグラフからも[FamilySize]からデータ傾向がうかがえたので、[FamilySize]を特徴量として活用してみる。

2.9. データセット準備

今回学習させる特徴量は、次の5つ

Pclass 客席クラス
Sex 性別
FamilySize 家族数(新規生成した特徴)
Honorific  敬称
Age_2 敬称で補完した年齢

学習データは学習用と評価用で分割しますが、pythonなら1行です。

from sklearn.cross_validation import train_test_split
#データセット作成
features = ['Pclass', 'Sex', 'FamilySize', 'Age_2', 'Honorific']
x = df_train[features]
y = df_train['Survived']
x_train, x_eval, y_train, y_eval = train_test_split(x, y, test_size=0.2, random_state=0)

2.10. データの正規化

学習データセットは、平均 0 / 分散 1 へ正規化

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(x)
x_std = sc.transform(x)
sc.fit(x_train)
x_train_std = sc.transform(x_train)
sc.fit(x_eval)
x_eval_std = sc.transform(x_eval)

詳細は次回になりますが、正規化により、K近傍法(n_neighbors=3)では
73.49% -> 78.82% 精度向上が確認できました。(100回試行の平均値)

やっぱり正規化しておいたほうがよさそうです。


次回は今回準備した学習データセットを用いて、機械学習