【初心者用】kaggleのタイタニック号乗客の生存予測モデルをRでサクッと作る

スポンサーリンク
Kaggle
スポンサーリンク

仕事で機械学習をするようになったので、話題のKaggleにも手を出しました。やはり手始めはタイタニック号乗客の生存予測モデルでしょう、ということでこれに手をつけました。

facebookで言う所のイイねがKaggleにもvotersという名前であります。votersで多く投票されているのは、良い見本ということなので、チェックしてみましたが、すべからく長いです。スクロールして心が折れます。

 

心が折れないように取り敢えず提出したい、というだけであれば数行のプログラミングを書けばできますので、ここではサクッとしたロジックを掲載します。

スポンサーリンク

タイタニック号乗客の生存予測モデル

ライブラリをインポート¶

library('randomForest')
randomForest 4.6-14
Type rfNews() to see new features/changes/bug fixes.

データをロード、中身の確認¶

# ダウンロードしたトレーニングデータとテストデータの読み込み
# stringsAsFactors = F : 文字列が自動的にfactorになってしまうので、それを防ぐ
train <- read.csv('~/Desktop/analysis/R/Exploring_Survival_on_the_Titanic/input/train.csv', stringsAsFactors = F)
test  <- read.csv('~/Desktop/analysis/R/Exploring_Survival_on_the_Titanic/input/test.csv', stringsAsFactors = F)

# データの中身の確認
str(train)
'data.frame':	891 obs. of  12 variables:
 $ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...
 $ Survived   : int  0 1 1 1 0 0 0 0 1 1 ...
 $ Pclass     : int  3 1 3 1 3 3 1 3 3 2 ...
 $ Name       : chr  "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
 $ Sex        : chr  "male" "female" "female" "female" ...
 $ Age        : num  22 38 26 35 35 NA 54 2 27 14 ...
 $ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
 $ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
 $ Ticket     : chr  "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
 $ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
 $ Cabin      : chr  "" "C85" "" "C123" ...
 $ Embarked   : chr  "S" "C" "S" "S" ...

オブジェクト数が891、変数の数が12

モデルの作成¶

missing data(欠損値)のない、Pclass + SibSp + Parch + Parchを目的変数とし、randomForestで目的変数であるSurvivedを求めるモデルを作成します。

# 乱数種を設定することで、毎回、同じモデルが生成される
set.seed(754)

# Survivedが目的変数(知りたい結果)で、~以降が説明変数
# 与えられた全ての変数を利用するわけではない
rf_model <- randomForest(factor(Survived) ~ 
                                               Pclass + SibSp + Parch + Parch,
                                               data = train)

# OOB estimate of  error rateが30.75%、これは
print(rf_model)
Call:
 randomForest(formula = factor(Survived) ~ Pclass + SibSp + Parch +      Parch, data = train) 
               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 1

        OOB estimate of  error rate: 31.31%
Confusion matrix:
    0   1 class.error
0 485  64   0.1165756
1 215 127   0.6286550

作成したモデルを利用して、予測¶

# 作成したモデルを利用して、testファイルのPclass + SibSp + Parch + ParchからSurvivedを計算する
prediction <- predict(rf_model, test)

# 提出用にPassengerIdと予想したpredictionの列を持つdata.frameを作成する
solution <- data.frame(PassengerID = test$PassengerId, Survived = prediction)

# testの結果をcsvファイルに書き込む
write.csv(solution, file = 'rf_mod_Solution.csv', row.names = F)

 

スコア

上記のモデルで提出すると、スコアは0.688です。提出する、ということで初心者はこれでも良いのではないでしょうか。

コメント

タイトルとURLをコピーしました