Nothing
## Tests for class weights
library(ranger)
context("ranger_classweights")
test_that("No error if class weights used", {
expect_silent(ranger(Species ~ ., iris, num.trees = 5, class.weights = c(0.5, 1, 0.1)))
})
test_that("Prediction accuracy for minority class increases with higher weight", {
n <- 100
x <- rnorm(n)
beta0 <- -3
beta <- 1
y <- factor(rbinom(n, 1, plogis(beta0 + beta * x)))
dat <- data.frame(y = y, x)
rf <- ranger(y ~ ., dat, num.trees = 5, min.node.size = 50, class.weights = c(1, 1))
acc_major <- mean((rf$predictions == dat$y)[dat$y == "0"], na.rm = TRUE)
acc_minor <- mean((rf$predictions == dat$y)[dat$y == "1"], na.rm = TRUE)
rf <- ranger(y ~ ., dat, num.trees = 5, min.node.size = 50, class.weights = c(0.01, 0.99))
acc_major_weighted <- mean((rf$predictions == dat$y)[dat$y == "0"], na.rm = TRUE)
acc_minor_weighted <- mean((rf$predictions == dat$y)[dat$y == "1"], na.rm = TRUE)
expect_gt(acc_minor_weighted, acc_minor)
})
# test_that("Prediction error worse if class weights 0", {
# rf <- ranger(Species ~ ., iris, num.trees = 5)
# rf_weighted <- ranger(Species ~ ., iris, num.trees = 5, class.weights = c(1, 0, 0))
# expect_lt(rf$prediction.error, rf_weighted$prediction.error)
# })
test_that("Error if class weights of wrong size", {
expect_error(ranger(Species ~ ., iris, num.trees = 5, class.weights = c(0.5, 1)),
"Error: Number of class weights not equal to number of classes.")
})
test_that("Error if class weights NA", {
expect_error(ranger(Species ~ ., iris, num.trees = 5, class.weights = c(0.5, 1, NA)),
"missing value where TRUE/FALSE needed")
})
test_that("Error if class weights not numeric", {
expect_error(ranger(Species ~ ., iris, num.trees = 5, class.weights = c(0.5, 1, "a")),
"Error: Invalid value for class.weights. Please give a vector of non-negative values.")
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.