【kaggle④】初心者がタイタニック号の生存予測モデル(Titanic: Machine Learning from Disaster)をやってみる(学習データ相関確認、分割、正規化)
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()
- [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回試行の平均値)
やっぱり正規化しておいたほうがよさそうです。