読者です 読者をやめる 読者になる 読者になる

INPUTしたらOUTPUT!

忘れっぽいんでメモっとく

タイタニック号の生死判定の精度をC5.0とRandomForestとGBMで比較してみた

R

仕事でC5.0とRandomForest、GBMを比較することがあったのでタイタニック号の生死判定をcaretパッケージでやってみた。 caretの使い方は以下を参考にさせて頂いた。

以下コード

library(caret)

data(Titanic)

# Create Data
tmp.titanic <- data.frame(Titanic)
titanic <- data.frame(
  Class    = rep(tmp.titanic$Class, tmp.titanic$Freq), 
  Sex      = rep(tmp.titanic$Sex, tmp.titanic$Freq), 
  Age      = rep(tmp.titanic$Age, tmp.titanic$Freq), 
  Survived = rep(tmp.titanic$Survived, tmp.titanic$Freq)
)
rm(tmp.titanic)
rm(Titanic)

# Training
train.c50 <- train(Survived~., titanic, method="C5.0")
train.rf <- train(Survived~., titanic, method="rf", importance=TRUE)
train.gbm <- train(Survived~., titanic, method="gbm")

# Importance of Variance
varImp.c50 <- varImp(train.c50)
varImp.rf <- varImp(train.rf)
varImp.gbm <- varImp(train.gbm)

# Prediction
## extractPrediction()だとエラーになるので個別に予測
test.c50 <- predict(train.c50, newdata=titanic)
test.rf <- predict(train.rf, newdata=titanic)
test.gbm <- predict(train.gbm, newdata=titanic)

# ConfusionMatrix
confmat.c50 <- confusionMatrix(test.c50, titanic$Survived)
confmat.rf <- confusionMatrix(test.rf, titanic$Survived)
confmat.gbm <- confusionMatrix(test.gbm, titanic$Survived)


変数の重要度をプロットしてみる。どの手法も性別は重要らしい。

C5.0

f:id:tak95:20131214230152p:plain

RandomForest

f:id:tak95:20131214230159p:plain

GBM

f:id:tak95:20131214230207p:plain

予測の精度はC5.0 < RandomForest = GBMだった

> confmat.c50
Confusion Matrix and Statistics

          Reference
Prediction   No  Yes
       No  1364  351
       Yes  126  360
                                          
               Accuracy : 0.7833          
                 95% CI : (0.7655, 0.8003)
    No Information Rate : 0.677           
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.4598          
 Mcnemar's Test P-Value : < 2.2e-16       
                                          
            Sensitivity : 0.9154          
            Specificity : 0.5063          
         Pos Pred Value : 0.7953          
         Neg Pred Value : 0.7407          
             Prevalence : 0.6770          
         Detection Rate : 0.6197          
   Detection Prevalence : 0.7792          
                                          
       'Positive' Class : No              
                                          
> confmat.rf
Confusion Matrix and Statistics

          Reference
Prediction   No  Yes
       No  1470  441
       Yes   20  270
                                          
               Accuracy : 0.7905          
                 95% CI : (0.7729, 0.8074)
    No Information Rate : 0.677           
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.4334          
 Mcnemar's Test P-Value : < 2.2e-16       
                                          
            Sensitivity : 0.9866          
            Specificity : 0.3797          
         Pos Pred Value : 0.7692          
         Neg Pred Value : 0.9310          
             Prevalence : 0.6770          
         Detection Rate : 0.6679          
   Detection Prevalence : 0.8682          
                                          
       'Positive' Class : No              
                                          
> confmat.gbm
Confusion Matrix and Statistics

          Reference
Prediction   No  Yes
       No  1470  441
       Yes   20  270
                                          
               Accuracy : 0.7905          
                 95% CI : (0.7729, 0.8074)
    No Information Rate : 0.677           
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.4334          
 Mcnemar's Test P-Value : < 2.2e-16       
                                          
            Sensitivity : 0.9866          
            Specificity : 0.3797          
         Pos Pred Value : 0.7692          
         Neg Pred Value : 0.9310          
             Prevalence : 0.6770          
         Detection Rate : 0.6679          
   Detection Prevalence : 0.8682          
                                          
       'Positive' Class : No   

時間があったらルールを可視化してみる。(party-kitでツリーを描けなかった。。。)