tests/testthat/testMeasureInterface.R

context("Evaluation Measure Interface")

resamplingParams <- list(method = "cv", number = 5)
fittingParams <- list(preProc = c("center", "scale"), metric = "Accuracy", tuneGrid = expand.grid(k = seq(1, 10, by = 2)))
wra <- wrapperEvaluator("knn",resamplingParams, fittingParams)

measures <- list(MDLC(), chiSquared(), cramer(), binaryConsistency(), IEConsistency(), IEPConsistency(), roughsetConsistency(), mutualInformation(), gainRatio(), symmetricalUncertain(), fscore(), giniIndex(), Jd(), relief(), normalizedRelief(), normalizedReliefFeatureSetMeasure(), ReliefFeatureSetMeasure(), wra)
setMeasures <- list(MDLC(), binaryConsistency(), IEConsistency(), IEPConsistency(), roughsetConsistency(), mutualInformation(), gainRatio(), symmetricalUncertain(), giniIndex(), Jd(), ReliefFeatureSetMeasure(), wra)
individualMeasures <- list(chiSquared(), cramer(), fscore(), relief())
discreteMeasures <- list(binaryConsistency(), IEConsistency(), IEPConsistency(), roughsetConsistency(), mutualInformation(), gainRatio(), symmetricalUncertain())
mixedMeasures <- list(chiSquared(), cramer(), fscore(), giniIndex(), Jd(), relief(), normalizedRelief(), ReliefFeatureSetMeasure(), normalizedReliefFeatureSetMeasure(), wra)
continuousMeasures <- list(MDLC())

streetNumber <- rep(seq(1,12),10)
doorLetter <- rep(c("A","B","C"),40)
classValue <- rep(seq(1,3),40)
discreteDataset <- data.frame(streetNumber, doorLetter, classValue)

x1 <- seq(1,30)
x2 <- rep(seq(1,10),3)
classValue <- rep(c("A","B"),15)
testDataset <- data.frame(x1, x2, classValue)


for (measure in measures) {
  test_that(paste(attr(measure,'name')," has target attribute"), {
    expect_true((attr(measure,'target') == 'maximize') || (attr(measure,'target') == 'minimize'))
  })
}

for (measure in individualMeasures) {
  result <- measure(testDataset, 'classValue', c('x1'))
  test_that(paste(attr(measure,'name')," returns numeric value"), {
    expect_true(is.numeric(result))
  })
}


for (measure in setMeasures) {
  result <- measure(testDataset, 'classValue', c('x1', 'x2'))
  test_that(paste(attr(measure,'name')," returns numeric value"), {
    expect_true(is.numeric(result))
  })
  test_that(paste(attr(measure,'name')," has right kind"), {
    expect_equal(attr(measure,'kind'), "Set measure")
  })
}

for (measure in individualMeasures) {
  test_that(paste(attr(measure,'name')," has right kind"), {
    expect_equal(attr(measure,'kind'), "Individual measure")
  })
}

for (measure in discreteMeasures) {
  test_that(paste(attr(measure,'name')," needs discrete data"), {
    expect_equal(attr(measure,'needsDataToBeDiscrete'), TRUE)
  })
  test_that(paste(attr(measure,'name')," does not need continuous data"), {
    expect_equal(attr(measure,'needsDataToBeContinuous'), FALSE)
  })
  test_that(paste(attr(measure,'name')," throws warning when using a continuous dataset"), {
    expect_warning(measure(iris, 'Species', c('Petal.Width', 'Petal.Length')), 'The data seems not to be discrete, as it should be')
  })
  test_that(paste(attr(measure,'name')," does not throw a warning when using a discrete dataset"), {
    expect_warning(measure(discreteDataset, 'classValue', c('streetNumber', 'doorLetter')), regexp = NA)
  })
}

for (measure in mixedMeasures) {
  test_that(paste(attr(measure,'name')," does not need discrete data"), {
    expect_equal(attr(measure,'needsDataToBeDiscrete'), FALSE)
  })
  test_that(paste(attr(measure,'name')," does not need continuous data"), {
    expect_equal(attr(measure,'needsDataToBeContinuous'), FALSE)
  })
}

for (measure in continuousMeasures) {
  test_that(paste(attr(measure,'name')," needs continuous data"), {
    expect_equal(attr(measure,'needsDataToBeContinuous'), TRUE)
  })
  test_that(paste(attr(measure,'name')," does not need discrete data"), {
    expect_equal(attr(measure,'needsDataToBeDiscrete'), FALSE)
  })
  test_that(paste(attr(measure,'name')," does not throw a warning when using a continuous dataset"), {
    expect_warning(measure(iris, 'Species', c('Petal.Width', 'Petal.Length')), regexp = NA)
  })
}

Try the FSinR package in your browser

Any scripts or data that you put into this service are public.

FSinR documentation built on Nov. 23, 2020, 5:10 p.m.