# Load required packages
library(ggplot2)
library(grid)
library(pdp)

# Test function
iris_test <- function(object, ...) {
  trn <- subset(iris, select = -Species)
  pd1 <- partial(object, pred.var = "Petal.Length", which.class = 1, 
                 prob = TRUE, train = trn, ...)
  pd2 <- partial(object, pred.var = "Petal.Length", which.class = 2, 
                 prob = TRUE, train = trn, ...)
  pd3 <- partial(object, pred.var = "Petal.Length", which.class = 3, 
                 prob = TRUE, train = trn, ...)
  pd <- rbind(cbind(pd1, "Class" = "1"), cbind(pd2, "Class" = "2"),
              cbind(pd3, "Class" = "3"))
  ggplot(pd, aes(x = Petal.Length, y = yhat, color = Class)) +
    geom_line() +
    xlab("Petal length") +
    ylab("Probability") +
    ggtitle(deparse(substitute(object))) +
    theme_light()
}

Discriminant analysis

Package: MASS

iris_lda <- MASS::lda(Species ~ ., data = iris)
iris_test(iris_lda)
iris_qda <- MASS::qda(Species ~ ., data = iris)
iris_test(iris_qda)

Package: mda

iris_fda <- mda::fda(Species ~ ., data = iris)
iris_test(iris_fda)
iris_fda <- mda::mda(Species ~ ., data = iris)
iris_test(iris_fda)

Decision trees

Package: rpart

iris_rpart <- rpart::rpart(Species ~ ., data = iris)
iris_test(iris_rpart)

Package: C50

set.seed(101)  # for reproducibility
iris_C5.0 <- C50::C5.0(Species ~ ., data = iris, trials = 100)
iris_test(iris_C5.0)

Package: party

iris_ctree <- party::ctree(Species ~ ., data = iris)
iris_test(iris_ctree)

Package: partykit

iris_ctree2 <- partykit::ctree(Species ~ ., data = iris)
iris_test(iris_ctree2)

Bagging

Package: adabag

set.seed(101)  # for reproducibility
iris_bagging <- adabag::bagging(Species ~ ., data = iris)
iris_test(iris_bagging)

Package: ipred

set.seed(101)  # for reproducibility
iris_ipred <- ipred::bagging(Species ~ ., data = iris, nbagg = 500)
iris_test(iris_ipred)

Random forests

Package: randomForest

set.seed(101)  # for reproducibility
iris_rf <- randomForest::randomForest(Species ~ ., data = iris)
iris_test(iris_rf)

Package: party

set.seed(101)  # for reproducibility
iris_crf <- party::cforest(Species ~ ., data = iris)
iris_test(iris_crf, quantiles = TRUE)

Package: partykit

set.seed(101)  # for reproducibility
iris_crf2 <- partykit::cforest(Species ~ ., data = iris)
iris_test(iris_crf2, quantiles = TRUE)

Package: ranger

set.seed(101)  # for reproducibility
iris_ranger <- ranger::ranger(Species ~ ., data = iris, probability = TRUE)
iris_test(iris_ranger)

Boosting

Package: adabag

set.seed(101)  # for reproducibility
iris_boosting <- adabag::boosting(Species ~ ., data = iris)
iris_test(iris_boosting)

Package: gbm

set.seed(101)  # for reproducibility
iris_gbm <- gbm::gbm(Species ~ ., 
                     data = iris,
                     distribution = "multinomial",
                     n.trees = 5000,
                     interaction.depth = 3,
                     shrinkage = 0.001,
                     cv.folds = 5,
                     verbose = FALSE)
best.iter <- gbm::gbm.perf(iris_gbm, method = "cv", plot.it = FALSE)
iris_test(iris_gbm, n.trees = best.iter)

Package: xgboost

set.seed(101)  # for reproducibility
iris_xgb <- xgboost::xgboost(
  data = data.matrix(subset(iris, select = -Species)), 
  label = unclass(iris$Species) - 1, num_class = 3, 
  objective = "multi:softprob", nrounds = 100, max_depth = 3, eta = 0.1, 
  gamma = 0, colsample_bytree = 0.8, min_child_weight = 1, subsample = 0.7,
  verbose = 0
)
iris_test(iris_xgb)

Neural networks

Package: nnet

set.seed(101)  # for reproducibility
iris_nnet <- nnet::nnet(Species ~ ., data = iris, size = 10, decay = 0.1, 
                        maxit = 500, trace = FALSE)
iris_test(iris_nnet)

Support vector machines

Package: e1071

iris_svm <- e1071::svm(Species ~ ., data = iris, type = "C-classification", 
                       probability = TRUE)
iris_test(iris_svm)

Package: kernlab

iris_ksvm <- kernlab::ksvm(Species ~ ., data = iris, type = "C-svc", 
                           prob.model = TRUE)
iris_test(iris_ksvm)

Linear/generalized linear models

Package: nnet

set.seed(101)  # for reproducibility
iris_multinom <- nnet::multinom(Species ~ ., data = iris, trace = FALSE)
iris_test(iris_multinom)


bgreenwell/pdp documentation built on June 2, 2022, 2:55 p.m.