对于分类问题,我使用平衡准确度,灵敏度和特异性来评估模型。最近,我看到校准可以捕获那些无法通过准确度和AUC捕获的。所以,我想尝试一下,可靠性图是可视化校准。
我正在使用R Verification包,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")
我想这个问题可能是由我在函数中放入的变量引起的,但还有什么可以观察和预测的频率?你知道如何绘制正确的可靠性图吗?