2016-01-22 36 views
1

我现在的问题:我用caret包生成分类预测模型和我的意思来验证我的模型与具体的指标(AUC ROC)。 AUC度量可用于训练集(内部验证)训练模型,但不能预测(外部验证)。曲线下面的pROC区域是否不正确?

1.内部验证:

Fit <- train(X, Y$levels, method= "svmRadial", trControl = fitControl, tuneLength = 20, metric = "ROC")

结果:

sigma C ROC Sens Spec ROCSD SensSD SpecSD 0.0068 2.00 0.83 0.82 0.57 0.149 0.166 0.270

2.外部验证:

为了访问外部验证AUC,我尝试预测我的训练集,并用pROC直接计算此度量。

predictions <- as.vector(predict(Fit$finalModel, newdata = X)) data <- data.frame(pred=as.numeric(predictions),obs=as.numeric(Y$levels)) pROC::roc(data$pred, data$obs)

结果: Area under the curve: 0.9057

结论:

结果:AUC(internal validation) != AUC(external validation)而我用相同的数据(训练集)来检查我的依靠外部验证标准。在最好的情况下,我应该能够获得0.83的最大值。然而,这似乎很奇怪,我认为AUC(internal validation) < AUC(external validation).

我也没办法解决这个谜(8 /怀疑)。欢迎所有协助。

+1

我建议建立一些数据表格摘要,获得一对夫妇的说明你的问题地块,再不敢在这里发布了这个问题,但在堆栈交换称为“交叉验证”。那些人专门研究这类问题。虽然也有很多人在这里闲逛,但你还没有给我们太多的东西继续下去。 –

+1

到底有多不同?由于训练集中的AUC将比“高概率”测试集高,但这并不意味着它不会发生。现在,如果它的实际情况不同,那么可能会出现一些时髦的事情。 – mbiron

+0

差值= 0.08(〜10%)。我试过'pROC','ROCR'和'puSummary'(这里介绍的功能(https://github.com/benmack/oneClass/blob/master/R/puSummary.R))。所有给我相同的结果(AUC = 0.9057) –

回答

0

所以你的结果是可以预料的。在一般的“内部验证”的AUC是通过使用来自训练的情况下分开,而在你的“外部验证”你与你的训练相同的情况下(这是一种欺骗行为,当然)测试的测试用例生成。因此,内部验证的AUC预计将小于外部验证的AUC。我想下面的图应该予以澄清:

enter image description here

+0

是的,我明白了。很明显,非常感谢Mike。 –