使用R可靠性图的正确方法

时间:2016-12-30 02:00:02

标签: r plot calibration

对于分类问题,我使用平衡准确度,灵敏度和特异性来评估模型。最近,我看到校准可以捕获那些无法通过准确度和AUC捕获的。所以,我想尝试一下,可靠性图是可视化校准。

我正在使用R Verification包,reliability.plot()函数。然而结果看起来很奇怪:

reliability plot

也许是因为我输入函数的变量是错误的,但我不知道如何修改。这是我的代码:

训练模型并获得预测的概率

library(verification)
library(mlr)

svm_learner <- makeLearner("classif.ksvm", predict.type = "prob")
svm_param <- makeParamSet(
  makeDiscreteParam("C", values = 2^c(-8,-4,-2,0)), #cost parameters
  makeDiscreteParam("sigma", values = 2^c(-8,-4,0,4)) #RBF Kernel Parameter
)
ctrl <- makeTuneControlRandom()
cv_svm <- makeResampleDesc("CV",iters = 5L)
svm_tune <- tuneParams(svm_learner, task = train_task, resampling =   cv_svm, par.set = svm_param, control = ctrl,measures = acc)
svm_tune$x
svm_tune$y
t.svm <- setHyperPars(svm_learner, par.vals = svm_tune$x)
svm_model <- mlr::train(svm_learner, train_task)
svmpredict <- predict(svm_model, test_task)
svmpredict

我正在尝试计算观察到的频率和预测频率,并将它们放入函数中

xy <- data.table(Truth=svmpredict$data$truth,   Response=svmpredict$data$response)
summary(xy$Truth)
summary(xy$Response)
xy[, ObservedFreq := ifelse(Truth==0, 1806/(1806+48), 48/(1806+48))]
xy[, ForecastedFreq := ifelse(Truth==0, 1807/(1807+47), 47/(1807+47))]
reliability.plot(svmpredict$data$prob.1, xy$ObservedFreq, xy$ForecastedFreq, positive="1")

我想这个问题可能是由我在函数中放入的变量引起的,但还有什么可以观察和预测的频率?你知道如何绘制正确的可靠性图吗?

0 个答案:

没有答案