context("classification accuracy and uncertainty")
# a good classifier
d.good <- data.frame(
a = c(0.05, 0.05, 0.10),
b = c(0.90, 0.85, 0.75),
c = c(0.05, 0.10, 0.15),
actual = c('b', 'b', 'b'),
stringsAsFactors = FALSE
)
# a rather bad classifier
d.bad <- data.frame(
a = c(0.05, 0.05, 0.10),
b = c(0.90, 0.85, 0.75),
c = c(0.05, 0.10, 0.15),
actual = c('c', 'c', 'c'),
stringsAsFactors = FALSE
)
# class labels are factors
d.factors <- data.frame(
a = c(0.05, 0.05, 0.10),
b = c(0.90, 0.85, 0.75),
c = c(0.05, 0.10, 0.15),
actual = c('b', 'b', 'b'),
stringsAsFactors = TRUE
)
# hypothetical three class probabilitites: 0.5 0.3 0.2
probs <- c(5,3,2) / 10
test_that("shannonEntropy", {
expect_equal(round(shannonEntropy(probs), 4), 1.4855)
expect_equal(round(shannonEntropy(probs, 3), 4), 0.9372)
})
test_that("confusionIndex", {
expect_equal(confusionIndex(probs), 0.8)
})
test_that("brierScore", {
dff <- data.frame(diag(3))
expect_equal(brierScore(dff, c("X1","X2","X3")), 1)
set.seed(1)
dff2 <- data.frame(matrix(runif(9), 3, 3))
expect_equal(round(brierScore(dff2, c("X1","X2","X3")), 2), 1.31)
# factor -> character conversion emits a message
expect_message(brierScore(x = d.factors, classLabels = c('a', 'b', 'c'), actual = 'actual'))
# results should be the same
bs1 <- brierScore(x = d.good, classLabels = c('a', 'b', 'c'), actual = 'actual')
bs2 <- brierScore(x = d.factors, classLabels = c('a', 'b', 'c'), actual = 'actual')
expect_equal(bs1, bs2)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.