仕事で機械学習をするようになったので、話題の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です。提出する、ということで初心者はこれでも良いのではないでしょうか。
コメント