こんにちは!
前回の投稿でKaggleのタイタニックのコンペでスコアが0.73でした。
今回は前処理で「標準化」することでスコアがどう変わるのか見ていきたいと思います!
本当投稿では前回のプログラム内容を多く含むので、解説を省略して記載します。
詳細が知りたい方は前回の投稿をご覧ください。
プログラム
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import missingno as msno
from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import StandardScaler
train = pd.read_csv('train.csv')
train["Age"] = train["Age"].fillna(train["Age"].median())
train.replace({"male":0,"female":1},inplace=True)
train = pd.concat([train, pd.get_dummies(train["Embarked"], prefix="Embarked")], axis=1).drop(columns=["Embarked"])
train = train.drop(columns=["Name", "Ticket", "Cabin"])
train.head()
結果↓
ここまでは前回と同様です。これから「標準化」を実施していきます。
標準化
columns_to_standardize = ['Age', 'SibSp', 'Parch', 'Fare']
scaler = StandardScaler()
train[columns_to_standardize] = scaler.fit_transform(train[columns_to_standardize])
train.head()
結果↓
Age・SibSp・Parch・Fareを標準化しました。次にこれら4変数のヒストグラムを見てみましょう。
-3から3の間のデータ以外(外れ値)を削除します。
train = train[(train['Age'] > -3) & (train['Age'] < 3)]
train = train[(train['SibSp'] > -3) & (train['SibSp'] < 3)]
train = train[(train['Parch'] > -3) & (train['Parch'] < 3)]
train = train[(train['Fare'] > -3) & (train['Fare'] < 3)]
fig,axis = plt.subplots(1,4,figsize=(20,5))
fig.tight_layout()
train_list = ['Age', 'SibSp', 'Parch', 'Fare']
for j in range(0,4):
sns.histplot(data=train,x=train_list[j],ax=axis[j])
ここからは前回と同様に決定木で機械学習を実施します!
train_features = train[['Pclass', 'Sex', 'Age', 'Fare', 'Embarked_C', 'Embarked_Q', 'Embarked_S']].values
train_target = train['Survived'].values
model = DecisionTreeClassifier(max_depth = 5, class_weight = 'balanced', random_state=0)
model.fit(train_features, train_target)
test_features = test[['Pclass', 'Sex', 'Age', 'Fare', 'Embarked_C', 'Embarked_Q', 'Embarked_S']].values
predict_test_target = model.predict(test_features)
submission = pd.DataFrame({'PassengerId': test['PassengerId'], 'Survived': predict_test_target})
submission.to_csv('submission_Titanic_DecisionTreeClassifier.csv', index = False )
これでデータ解析は完了しました!
保存されたcsvファイルをKaggleに提出してスコアを確認します!
スコアは0.76でした!
標準化をおこなったことで0.03上がりましたね。この結果から標準化で外れ値を除去することの重要性が分かりました!
以上で終わります。ありがとうございました!