0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kaggle ~タイタニック沈没事故の生存予測~ 決定木#2

Posted at

こんにちは!:nerd:
前回の投稿で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()

結果↓
image.png
ここまでは前回と同様です。これから「標準化」を実施していきます。

標準化
columns_to_standardize = ['Age', 'SibSp', 'Parch', 'Fare']
scaler = StandardScaler()
train[columns_to_standardize] = scaler.fit_transform(train[columns_to_standardize])
train.head()

結果↓
image.png
Age・SibSp・Parch・Fareを標準化しました。次にこれら4変数のヒストグラムを見てみましょう。
image.png

-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])

image.png
以上では「標準化」による外れ値の除去が完了しました!

ここからは前回と同様に決定木で機械学習を実施します!

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に提出してスコアを確認します!

image.png

スコアは0.76でした!
標準化をおこなったことで0.03上がりましたね。この結果から標準化で外れ値を除去することの重要性が分かりました!

以上で終わります。ありがとうございました!:blush:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?