kaggleぐるぐる(2) Titanic生存者問題にちょっとトライ
こんにちは。相変わらずUdacityのIntro to Machine Learningで勉強してます。
子供が小さいので朝5時半ぐらいに起きて7時半に奥さんが起きてくるまで勉強する日々です。
折角勉強してるんだから、ちょっとは使ってみたいよね!
ってことでちょこちょこkaggleで遊んでいます。
お題はこちら。Titanic問題
実に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%
もともとお題でランダムフォレストが勉強できるよ! って書いてあっただけに、ランダムフォレスト強い強い。13%差をつけて圧勝です。
気になる順位は
アップロードしていないので、パーセンテージの近いところで見てみました。
SVCだとこのくらい。約8300チーム中7800位くらいじゃほぼドベですね。
ランダムフォレストだと……なんと上位500位あたり。なんだってー!
追記:世の中そんなに甘くない
調子に乗ってkaggleにいい方のcsvファイルをアップロードしてみたら、
score:0.73684
Rank:7474
でした。%がそのままスコアじゃないんですね。
また挑戦しよう!