周回遅れでIT業界デビューしたエンジニアのブログ

就職氷河期にモロにぶち当たり、人生で混迷を極めた末にIT業界に安寧を見出そうとしているアラフォーのお勉強日記です。

kaggleぐるぐる(2) Titanic生存者問題にちょっとトライ

こんにちは。相変わらずUdacityのIntro to Machine Learningで勉強してます。
子供が小さいので朝5時半ぐらいに起きて7時半に奥さんが起きてくるまで勉強する日々です。

折角勉強してるんだから、ちょっとは使ってみたいよね!
ってことでちょこちょこkaggleで遊んでいます。

お題はこちら。Titanic問題

f:id:sionff:20171003110945p:plain
実に8000チーム超が参加。ワーオ!すごい!

どんなコード書いたの?

#データの前処理をする部分
import numpy as np
import pandas as pd

train_data = pd.read_csv("./train.csv")
test_data = pd.read_csv("./test.csv")
test_lavel = pd.read_csv("./gender_submission.csv")
train_lavel = train_data.drop((["PassengerId","Pclass","Name","Sex","Age","SibSp","Parch","Ticket","Fare","Cabin","Embarked"]), axis=1)
#print(train_lavel)

train_data = train_data.drop((["PassengerId","Survived","Name","Ticket","Cabin","Embarked"]), axis=1)
Sex_Dummy = pd.get_dummies(train_data["Sex"])
train_data = pd.concat((train_data, Sex_Dummy), axis=1)
train_data = train_data.drop((["Sex", "female"]), axis=1)
Age_ave_train = train_data["Age"].mean()
train_data = train_data.fillna(Age_ave_train)
#print(train_data)

ids = test_data["PassengerId"].values
test_data = test_data.drop((["PassengerId","Name","Ticket","Cabin","Embarked"]), axis=1)
Sex_Dummy = pd.get_dummies(test_data["Sex"])
test_data = pd.concat((test_data, Sex_Dummy), axis=1)
test_data = test_data.drop((["Sex", "female"]), axis=1)
Age_ave_test = test_data["Age"].mean()
test_data = test_data.fillna(Age_ave_test)
#print(test_data)

#test_lavel = test_lavel.drop((["PassengerId"]), axis=1)
#print(test_lavel)

#データを学習させて答え合わせする部分
#解析に使うものによってimportとインスタンス宣言を変える
from sklearn import ensemble

clf = ensemble.RandomForestClassifier()
clf.fit(train_data, train_lavel)
pred = clf.predict(test_data)
#print(pred)

#csvに出力する部分
#解析で使ったものによって出力ファイル名を変える
import csv
submit_file = open("./titanic_submit_RandomForestClassifier.csv", "w")
file_object = csv.writer(submit_file)
file_object.writerow(["PassengerId", "Survived"])
file_object.writerows(zip(ids, pred))
submit_file.close()

そんなに難しいことはやってないです。3分クッキング。

#上の前処理でこんな感じのデータが作れます。今回はざっくり
     Pclass        Age  SibSp  Parch      Fare  male
0         3  22.000000      1      0    7.2500     1
1         1  38.000000      1      0   71.2833     0
2         3  26.000000      0      0    7.9250     0

判定結果

今回はSVMとランダムフォレストの2種類でやってみました。

SVM

total 418
o 284
x 134
% 67.9%

■RandomForest

total 418
o 338
x 80
% 80.9%

f:id:sionff:20171003111005p:plain

もともとお題でランダムフォレストが勉強できるよ! って書いてあっただけに、ランダムフォレスト強い強い。13%差をつけて圧勝です。

気になる順位は

アップロードしていないので、パーセンテージの近いところで見てみました。

SVCだとこのくらい。約8300チーム中7800位くらいじゃほぼドベですね。
f:id:sionff:20171003111009p:plain

ランダムフォレストだと……なんと上位500位あたり。なんだってー!
f:id:sionff:20171003111012p:plain

調子に乗って続けたい

予想外のイイ結果がでてびっくりしました。

折角機械学習を勉強しているのだから、kaggleで遊んで楽しく身に着けて行きたいですね!

追記:世の中そんなに甘くない

調子に乗ってkaggleにいい方のcsvファイルをアップロードしてみたら、

score:0.73684
Rank:7474

でした。%がそのままスコアじゃないんですね。
また挑戦しよう!