R,Package- Caret,function extractProb()

时间:2017-10-27 20:21:01

标签: r model modeling

我正在尝试为预测模型生成一个roc(),因此需要来自extractProb()的概率。我跟随Max Kuhn的小插图作为指导。

当我运行extractPrediction()(下面的代码)时,我没有收到任何错误。

> predValues <-  extractPrediction(models, 
                             testX = testTransformed,
                             testY = test_death)

然而,当我运行extractProb()时,看似相同的代码,我收到一个错误:

(代码)

> probValues <- extractProb(models, 
                              testX = testTransformed,                         
                              testY = test_death)

(误差)

> Error in `$<-.data.frame`(`*tmp*`, "obs", value = c(1L, 1L, 1L, 1L, 1L,
           :replacement has 4216 rows, data has 6324 In addition: Warning messages: 
           1: In method$prob(modelFit = modelFit, newdata = newdata, submodels = param) :   
           kernlab class probability calculations failed; returning NAs 2: 
           In method$prob(modelFit = modelFit, newdata = newdata, submodels = param) :   
           kernlab class probability calculations failed; returning NAs


> str(testTransformed)
  'data.frame': 1054 obs. of  7 variables:
 $ moi.0      : num  -1.497 0.667 -1.497 0.667 -1.497 ...
 $ moi.1      : num  -0.388 -0.388 -0.388 -0.388 -0.388 ...
 $ moi.3      : num  -0.302 -0.302 -0.302 -0.302 3.312 ...
 $ moi.4      : num  3.12 -0.32 3.12 -0.32 -0.32 ...
 $ gcs_tot    : num  -3.097 -1.776 0.204 0.534 0.534 ...
 $ tbi_surgery: num  1.831 1.831 1.831 -0.546 -0.546 ...
 $ time_2_hosp: num  0.0221 0.0191 0.0214 0.0261 0.0227 ...

> str(test_death)
 Factor w/ 2 levels "0","1": 2 1 1 1 1 1 1 1 1 1 ...

str()提供了FYI。我尝试使用test_death作为数字运行extractProb()。没运气。 testTransformed或test_death中没有NA。

我想做什么:

> models     <- list(svm = svmFit, gbm = gbmFit)
> probValues      <- extractProb(models, testX = testTransformed,
                      testY = test_death) 
> testProbs       <- subset(probValues, dataType == "Test")
> svmProb  <- subset(testProbs, model == "svmRadial")
> svmROC   <- roc(svmProb$pred, svmProb$obs)

任何帮助非常感谢。尊敬。

1 个答案:

答案 0 :(得分:0)

为什么不计算概率? 让我们说你想要矩阵中每个元素的概率。

prob <- vector()
for(i in 1:length(yourdata)){
   his <- hist(yourdata, plot=F)
   for(j in 1:length(his$density)){
      prob[i] <- his$density[i]*(his$breaks[i+1]-his$breaks[i])
   }
}

您可以调整代码。