This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.
Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Ctrl+Shift+Enter.
library(caret)
Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.
When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).
library(mlbench)
data(BostonHousing)
set.seed(280)
bh_index <- createDataPartition(BostonHousing$medv, p = .75, list = FALSE)
bh_tr <- BostonHousing[ bh_index, ]
bh_te <- BostonHousing[-bh_index, ]
set.seed(7279)
lm_fit <- train(medv ~ . + rm:lstat,
data = bh_tr,
method = "lm")
bh_pred <- predict(lm_fit, bh_te)
lm_fit
postResample(pred = bh_pred, obs = bh_te$medv)
set.seed(144)
true_class <- factor(sample(paste0("Class", 1:2),
size = 1000,
prob = c(.2, .8), replace = TRUE))
true_class <- sort(true_class)
class1_probs <- rbeta(sum(true_class == "Class1"), 4, 1)
class2_probs <- rbeta(sum(true_class == "Class2"), 1, 2.5)
test_set <- data.frame(obs = true_class,
Class1 = c(class1_probs, class2_probs))
test_set$Class2 <- 1 - test_set$Class1
test_set$pred <- factor(ifelse(test_set$Class1 >= .5, "Class1", "Class2"))
ggplot(test_set, aes(x = Class1)) +
geom_histogram(binwidth = .05) +
facet_wrap(~obs) +
xlab("Probability of Class #1")
confusionMatrix(data = test_set$pred, reference = test_set$obs)
confusionMatrix(data = test_set$pred, reference = test_set$obs, mode = "prec_recall")
postResample(pred = test_set$pred, obs = test_set$obs)
twoClassSummary(test_set, lev = levels(test_set$obs))
prSummary(test_set, lev = levels(test_set$obs))
mnLogLoss(test_set, lev = levels(test_set$obs))
multiClassSummary(test_set, lev = levels(test_set$obs))
set.seed(2)
lift_training <- twoClassSim(1000)
lift_testing <- twoClassSim(1000)
ctrl <- trainControl(method = "cv", classProbs = TRUE,
summaryFunction = twoClassSummary)
set.seed(1045)
fda_lift <- train(Class ~ ., data = lift_training,
method = "fda", metric = "ROC",
tuneLength = 20,
trControl = ctrl)
set.seed(1045)
lda_lift <- train(Class ~ ., data = lift_training,
method = "lda", metric = "ROC",
trControl = ctrl)
set.seed(1045)
c5_lift <- train(Class ~ ., data = lift_training,
method = "C5.0", metric = "ROC",
tuneLength = 10,
trControl = ctrl,
control = C5.0Control(earlyStopping = FALSE))
## Generate the test set results
lift_results <- data.frame(Class = lift_testing$Class)
lift_results$FDA <- predict(fda_lift, lift_testing, type = "prob")[,"Class1"]
lift_results$LDA <- predict(lda_lift, lift_testing, type = "prob")[,"Class1"]
lift_results$C5.0 <- predict(c5_lift, lift_testing, type = "prob")[,"Class1"]
head(lift_results)
trellis.par.set(caretTheme())
lift_obj <- lift(Class ~ FDA + LDA + C5.0, data = lift_results)
plot(lift_obj, values = 60, auto.key = list(columns = 3,
lines = TRUE,
points = FALSE))
trellis.par.set(caretTheme())
cal_obj <- calibration(Class ~ FDA + LDA + C5.0,
data = lift_results,
cuts = 13)
plot(cal_obj, type = "l", auto.key = list(columns = 3,
lines = TRUE,
points = FALSE))
ggplot(cal_obj)
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2sgXyBNZWFzdXJpbmcgUGVyZm9ybWFuY2UiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpUaGlzIGlzIGFuIFtSIE1hcmtkb3duXShodHRwOi8vcm1hcmtkb3duLnJzdHVkaW8uY29tKSBOb3RlYm9vay4gV2hlbiB5b3UgZXhlY3V0ZSBjb2RlIHdpdGhpbiB0aGUgbm90ZWJvb2ssIHRoZSByZXN1bHRzIGFwcGVhciBiZW5lYXRoIHRoZSBjb2RlLiANCg0KVHJ5IGV4ZWN1dGluZyB0aGlzIGNodW5rIGJ5IGNsaWNraW5nIHRoZSAqUnVuKiBidXR0b24gd2l0aGluIHRoZSBjaHVuayBvciBieSBwbGFjaW5nIHlvdXIgY3Vyc29yIGluc2lkZSBpdCBhbmQgcHJlc3NpbmcgKkN0cmwrU2hpZnQrRW50ZXIqLiANCg0KYGBge3J9DQpsaWJyYXJ5KGNhcmV0KQ0KYGBgDQoNCkFkZCBhIG5ldyBjaHVuayBieSBjbGlja2luZyB0aGUgKkluc2VydCBDaHVuayogYnV0dG9uIG9uIHRoZSB0b29sYmFyIG9yIGJ5IHByZXNzaW5nICpDdHJsK0FsdCtJKi4NCg0KV2hlbiB5b3Ugc2F2ZSB0aGUgbm90ZWJvb2ssIGFuIEhUTUwgZmlsZSBjb250YWluaW5nIHRoZSBjb2RlIGFuZCBvdXRwdXQgd2lsbCBiZSBzYXZlZCBhbG9uZ3NpZGUgaXQgKGNsaWNrIHRoZSAqUHJldmlldyogYnV0dG9uIG9yIHByZXNzICpDdHJsK1NoaWZ0K0sqIHRvIHByZXZpZXcgdGhlIEhUTUwgZmlsZSkuDQoNCmBgYHtyfQ0KbGlicmFyeShtbGJlbmNoKQ0KZGF0YShCb3N0b25Ib3VzaW5nKQ0KDQpzZXQuc2VlZCgyODApDQpiaF9pbmRleCA8LSBjcmVhdGVEYXRhUGFydGl0aW9uKEJvc3RvbkhvdXNpbmckbWVkdiwgcCA9IC43NSwgbGlzdCA9IEZBTFNFKQ0KYmhfdHIgPC0gQm9zdG9uSG91c2luZ1sgYmhfaW5kZXgsIF0NCmJoX3RlIDwtIEJvc3RvbkhvdXNpbmdbLWJoX2luZGV4LCBdDQoNCnNldC5zZWVkKDcyNzkpDQpsbV9maXQgPC0gdHJhaW4obWVkdiB+IC4gKyBybTpsc3RhdCwNCiAgICAgICAgICAgICAgICBkYXRhID0gYmhfdHIsIA0KICAgICAgICAgICAgICAgIG1ldGhvZCA9ICJsbSIpDQpiaF9wcmVkIDwtIHByZWRpY3QobG1fZml0LCBiaF90ZSkNCg0KbG1fZml0DQpwb3N0UmVzYW1wbGUocHJlZCA9IGJoX3ByZWQsIG9icyA9IGJoX3RlJG1lZHYpDQpgYGANCg0KYGBge3IgTWVhc3VyZXMgZm9yIFByZWRpY3RlZCBDbGFzc2VzfQ0Kc2V0LnNlZWQoMTQ0KQ0KdHJ1ZV9jbGFzcyA8LSBmYWN0b3Ioc2FtcGxlKHBhc3RlMCgiQ2xhc3MiLCAxOjIpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gMTAwMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9iID0gYyguMiwgLjgpLCByZXBsYWNlID0gVFJVRSkpDQp0cnVlX2NsYXNzIDwtIHNvcnQodHJ1ZV9jbGFzcykNCmNsYXNzMV9wcm9icyA8LSByYmV0YShzdW0odHJ1ZV9jbGFzcyA9PSAiQ2xhc3MxIiksIDQsIDEpDQpjbGFzczJfcHJvYnMgPC0gcmJldGEoc3VtKHRydWVfY2xhc3MgPT0gIkNsYXNzMiIpLCAxLCAyLjUpDQp0ZXN0X3NldCA8LSBkYXRhLmZyYW1lKG9icyA9IHRydWVfY2xhc3MsDQogICAgICAgICAgICAgICAgICAgICAgIENsYXNzMSA9IGMoY2xhc3MxX3Byb2JzLCBjbGFzczJfcHJvYnMpKQ0KdGVzdF9zZXQkQ2xhc3MyIDwtIDEgLSB0ZXN0X3NldCRDbGFzczENCnRlc3Rfc2V0JHByZWQgPC0gZmFjdG9yKGlmZWxzZSh0ZXN0X3NldCRDbGFzczEgPj0gLjUsICJDbGFzczEiLCAiQ2xhc3MyIikpDQpgYGANCg0KYGBge3IgUExPVDF9DQpnZ3Bsb3QodGVzdF9zZXQsIGFlcyh4ID0gQ2xhc3MxKSkgKyANCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAuMDUpICsgDQogIGZhY2V0X3dyYXAofm9icykgKyANCiAgeGxhYigiUHJvYmFiaWxpdHkgb2YgQ2xhc3MgIzEiKQ0KYGBgDQoNCmBgYHtyIENvbmZ1c2lvbiBNYXRyaXh9DQpjb25mdXNpb25NYXRyaXgoZGF0YSA9IHRlc3Rfc2V0JHByZWQsIHJlZmVyZW5jZSA9IHRlc3Rfc2V0JG9icykNCmNvbmZ1c2lvbk1hdHJpeChkYXRhID0gdGVzdF9zZXQkcHJlZCwgcmVmZXJlbmNlID0gdGVzdF9zZXQkb2JzLCBtb2RlID0gInByZWNfcmVjYWxsIikNCnBvc3RSZXNhbXBsZShwcmVkID0gdGVzdF9zZXQkcHJlZCwgb2JzID0gdGVzdF9zZXQkb2JzKQ0KYGBgDQoNCmBgYHtyIE1lYXN1cmVzIGZvciBDbGFzcyBQcm9iYWJpbGl0aWVzfQ0KdHdvQ2xhc3NTdW1tYXJ5KHRlc3Rfc2V0LCBsZXYgPSBsZXZlbHModGVzdF9zZXQkb2JzKSkNCnByU3VtbWFyeSh0ZXN0X3NldCwgbGV2ID0gbGV2ZWxzKHRlc3Rfc2V0JG9icykpDQptbkxvZ0xvc3ModGVzdF9zZXQsIGxldiA9IGxldmVscyh0ZXN0X3NldCRvYnMpKQ0KbXVsdGlDbGFzc1N1bW1hcnkodGVzdF9zZXQsIGxldiA9IGxldmVscyh0ZXN0X3NldCRvYnMpKQ0KYGBgDQoNCmBgYHtyIExpZnQgQ3VydmVzfQ0Kc2V0LnNlZWQoMikNCmxpZnRfdHJhaW5pbmcgPC0gdHdvQ2xhc3NTaW0oMTAwMCkNCmxpZnRfdGVzdGluZyAgPC0gdHdvQ2xhc3NTaW0oMTAwMCkNCg0KY3RybCA8LSB0cmFpbkNvbnRyb2wobWV0aG9kID0gImN2IiwgY2xhc3NQcm9icyA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5RnVuY3Rpb24gPSB0d29DbGFzc1N1bW1hcnkpDQoNCnNldC5zZWVkKDEwNDUpDQpmZGFfbGlmdCA8LSB0cmFpbihDbGFzcyB+IC4sIGRhdGEgPSBsaWZ0X3RyYWluaW5nLA0KICAgICAgICAgICAgICAgICAgbWV0aG9kID0gImZkYSIsIG1ldHJpYyA9ICJST0MiLA0KICAgICAgICAgICAgICAgICAgdHVuZUxlbmd0aCA9IDIwLA0KICAgICAgICAgICAgICAgICAgdHJDb250cm9sID0gY3RybCkNCnNldC5zZWVkKDEwNDUpDQpsZGFfbGlmdCA8LSB0cmFpbihDbGFzcyB+IC4sIGRhdGEgPSBsaWZ0X3RyYWluaW5nLA0KICAgICAgICAgICAgICAgICAgbWV0aG9kID0gImxkYSIsIG1ldHJpYyA9ICJST0MiLA0KICAgICAgICAgICAgICAgICAgdHJDb250cm9sID0gY3RybCkNCg0Kc2V0LnNlZWQoMTA0NSkNCmM1X2xpZnQgPC0gdHJhaW4oQ2xhc3MgfiAuLCBkYXRhID0gbGlmdF90cmFpbmluZywNCiAgICAgICAgICAgICAgICAgbWV0aG9kID0gIkM1LjAiLCBtZXRyaWMgPSAiUk9DIiwNCiAgICAgICAgICAgICAgICAgdHVuZUxlbmd0aCA9IDEwLA0KICAgICAgICAgICAgICAgICB0ckNvbnRyb2wgPSBjdHJsLA0KICAgICAgICAgICAgICAgICBjb250cm9sID0gQzUuMENvbnRyb2woZWFybHlTdG9wcGluZyA9IEZBTFNFKSkNCg0KIyMgR2VuZXJhdGUgdGhlIHRlc3Qgc2V0IHJlc3VsdHMNCmxpZnRfcmVzdWx0cyA8LSBkYXRhLmZyYW1lKENsYXNzID0gbGlmdF90ZXN0aW5nJENsYXNzKQ0KbGlmdF9yZXN1bHRzJEZEQSA8LSBwcmVkaWN0KGZkYV9saWZ0LCBsaWZ0X3Rlc3RpbmcsIHR5cGUgPSAicHJvYiIpWywiQ2xhc3MxIl0NCmxpZnRfcmVzdWx0cyRMREEgPC0gcHJlZGljdChsZGFfbGlmdCwgbGlmdF90ZXN0aW5nLCB0eXBlID0gInByb2IiKVssIkNsYXNzMSJdDQpsaWZ0X3Jlc3VsdHMkQzUuMCA8LSBwcmVkaWN0KGM1X2xpZnQsIGxpZnRfdGVzdGluZywgdHlwZSA9ICJwcm9iIilbLCJDbGFzczEiXQ0KaGVhZChsaWZ0X3Jlc3VsdHMpDQpgYGANCg0KYGBge3IgUExPVDJ9DQp0cmVsbGlzLnBhci5zZXQoY2FyZXRUaGVtZSgpKQ0KbGlmdF9vYmogPC0gbGlmdChDbGFzcyB+IEZEQSArIExEQSArIEM1LjAsIGRhdGEgPSBsaWZ0X3Jlc3VsdHMpDQpwbG90KGxpZnRfb2JqLCB2YWx1ZXMgPSA2MCwgYXV0by5rZXkgPSBsaXN0KGNvbHVtbnMgPSAzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IEZBTFNFKSkNCmBgYA0KDQpgYGB7ciBDYWxpYnJhdGlvbiBDdXJ2ZXN9DQp0cmVsbGlzLnBhci5zZXQoY2FyZXRUaGVtZSgpKQ0KY2FsX29iaiA8LSBjYWxpYnJhdGlvbihDbGFzcyB+IEZEQSArIExEQSArIEM1LjAsDQogICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBsaWZ0X3Jlc3VsdHMsDQogICAgICAgICAgICAgICAgICAgICAgIGN1dHMgPSAxMykNCnBsb3QoY2FsX29iaiwgdHlwZSA9ICJsIiwgYXV0by5rZXkgPSBsaXN0KGNvbHVtbnMgPSAzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gRkFMU0UpKQ0KZ2dwbG90KGNhbF9vYmopDQpgYGANCg0K