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 ~タイタニック沈没事故の生存予測~ 決定木#1

Last updated at Posted at 2024-04-14

こんにちは! 初投稿です!
kaggleのタイタニック沈没事故の生存予測を実施してみたので投稿します!:frowning2:
分かりやすくするためにプログラムの記述と結果を細かく記載しています。
今回は決定木を使いました!

ライブラリをインポート
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import missingno as msno
from sklearn.tree import DecisionTreeClassifier
データを取得
train = pd.read_csv('train.csv') #学習用データ
test = pd.read_csv('test.csv')  #予測データ
trainデータを確認
train.head()

結果↓
image.png

変数の解説↓
"Survived":生死(0:死亡 1:生存)
"Pclass":チケットのランク
"Name":名前
"Sex":性別
"Age":年齢
"SibSp":同乗している兄弟・配偶者の数
"Parch":同乗している親・子供の数
"Ticket":チケット番号
"Fare":料金
"Cabin":客室番号
"Embarked":出港地

trainデータの欠損を確認
msno.bar(train)

image.png

データ数を見ると、Age・Cabinのデータ数が少ないようです。

trainデータの前処理1
#Ageの欠損部分に中央値を代入します。
train["Age"] = train["Age"].fillna(train["Age"].median())
msno.bar(train)

image.png
Ageのデータが埋まったのを確認できましたね。

trainデータの前処理2
#Sexを数値化 「male」→0 「female」→1
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
データが数値化されて見やすくなりました。これでtrainデータの前処理は終了です。
続いてtestデータを見てみましょう!

testデータを確認
test.head()

結果↓
image.png
テストデータなので目的変数のSurvivedがありませんね。
次にtrainデータと同じようにtestデータの欠損を確認してみましょう。

testデータの欠損を確認
msno.bar(test)

image.png
Age・Fare・Cabinのデータ数が少ないことが分かります。

testデータの前処理1
#Age・Fareの欠損部分に中央値を代入します。
test['Age'] = test['Age'].fillna(test['Age'].median())
test['Fare'] = test['Fare'].fillna(test['Fare'].median())
msno.bar(test)

image.png
Age・Fareのデータが埋まったのを確認できましたね。

testデータの前処理2
#Sexを数値化 「male」→0 「female」→1
test.replace({"male":0,"female":1},inplace=True)
#出港場所を質的変換
test = pd.concat([test, pd.get_dummies(test["Embarked"], prefix="Embarked")], axis=1).drop(columns=["Embarked"])
#不要な列を削除
test = test.drop(columns=["Name", "Ticket", "Cabin"])
test.head()

結果↓
image.png

予測モデルの作成と予測の実施
#「Pclass(チケットのランク)」、「Sex(性別)」、「Age(年齢)」、「Fare(料金)」を元に、目的変数「Survived(生死のフラグ)」を予測するモデルを作成
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)
予測データをcsv化
submission = pd.DataFrame({'PassengerId': test['PassengerId'], 'Survived': predict_test_target})
submission.to_csv('submission_Titanic_DecisionTreeClassifier.csv', index = False )

これで決定木の機械学習は終了です。
さて、今回の予測結果をkaggleに提出してみましょう。
image.png
スコアは0.73でした。まだまだ改善の余地がありそうです。前処理に標準化・正規化などをするとスコアが上がるかもしれません。
今後もkaggleのタイタニックコンペに関する投稿をしていきます!:relaxed:
ありがとうございました!

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?