###はじめに###
こんにちは。今回はtaitanicやっていこうと思います。初心者であり文字列データの処理を飛ばしてしまいますが、ご了承ください。モデルとしてはニューラルネットワークを使用しています。工夫点は欠損値をKNNImputerで埋めてみたことくらいです。
##taitanic提出手順##
1.ライブラリ、データ読み込み
2.データの前処理
3.モデルの構築
4.予測の出力・提出
###実行環境###
google colaboratory
###1.ライブラリ、データ読み込み###
それでは早速、ライブラリとデータを読み込むところからやっていきます。
# Google Colaboratoryで作業する場合はこちらも実行してください。
from google.colab import drive
drive.mount('/content/drive')
#各種インポート
import numpy as np
import pandas as pd
import seaborn as sns
%matplotlib inline
from matplotlib import pyplot as plt
ファイルを読み込みます
#テストファイルの読み込み
test_df = pd.read_csv("../input/titanic/test.csv")
#トレーニングデータの読み込み:訓練データ
train_df = pd.read_csv("../input/titanic/train.csv")
#生存or死亡についてのデータ
test_output_df = pd.read_csv("../input/titanic/gender_submission.csv")
###2.データの前処理###
まず、はじめの10データを見てみます。
df.head(10)
欠損値があるか確かめます。
df.isnull().sum()
トレーニングデータについても同様に確かめます
df_test.isnull().sum()
欠損値があるage以外の特徴量は削除しました。
df.drop('Cabin', axis=1, inplace=True)
df_test.drop('Cabin', axis=1, inplace=True)
#df.drop('Age', axis=1, inplace=True)
#df_test.drop('Age', axis=1, inplace=True)
df.drop('Fare', axis=1, inplace=True)
df_test.drop('Fare', axis=1, inplace=True)
df.drop('PassengerId', axis=1, inplace=True)
df_test.drop('PassengerId', axis=1, inplace=True)
#df.drop('Pclass', axis=1, inplace=True)
#df_test.drop('Pclass', axis=1, inplace=True)
df.drop('Name', axis=1, inplace=True)
df_test.drop('Name', axis=1, inplace=True)
df.drop('Ticket', axis=1, inplace=True)
df_test.drop('Ticket', axis=1, inplace=True)
df.drop('Embarked', axis=1, inplace=True)
df_test.drop('Embarked', axis=1, inplace=True)
df.isnull().sum()
カテゴリー変数を数値に置き換え、欠損値AgeをKNNImputerでうめてあげます。
df.replace({'Sex': {'male': 0, 'female': 1}}, inplace=True)
df_test.replace({'Sex': {'male': 0, 'female': 1}}, inplace=True)
from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=5)
df = pd.DataFrame(imputer.fit_transform(df))
df_test = pd.DataFrame(imputer.fit_transform(df_test))
XにtrainのSurvive以外、yにtrainのSurveveを入れます。
X_testは、そのままです。.shapeにて形を確認しておきます。
X = df.iloc[:, 1:].values
y = df.iloc[:, 0].values
X_test = df_test.iloc[:, 0:].values
print(X_test.shape)
print(X.shape)
print(y.shape)
ホールドアウト方にて、データを分割します。
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.3, random_state=42)
隠れ層を100,100,10としたニューラルネットワークをモデルとし、予測します。
mlpc = MLPClassifier(hidden_layer_sizes=(100, 100, 10), random_state=0)
mlpc.fit(X_train, y_train)
print('Multilayer Perceptron \n')
print('Train Score: {}'.format(round(mlpc.score(X_train, y_train), 3)))
print(' Test Score: {}'.format(round(mlpc.score(X_valid, y_valid), 3)))
.predictメソッドにて予測値をpredに代入します。
pred = mlpc.predict(X_test)
print(pred.shape)
submissionの'Survived'列を予測値で置き換えます。
submission['Survived'] = pred
submission
# JupyterLabなどローカルで作業する場合
# パスは必要に応じて変更の必要あり
submission.to_csv('../gender_submission.csv', index=False)
ダウンロードして完了です。
# Google Drive・Google Colaboratoryで作業する場合
submission.to_csv('gender_submission.csv',index=False)
from google.colab import files
files.download('gender_submission.csv')
####最後に####
本当は、DataWizを用いた欠損値補完をやろうと思いましたができませんでした。もしよければお願いします。