当我使用Rose库计算度量时,我得到了召回率,精度和F1的度量。但是,当我手动计算召回率和精确度时,它们会有所不同。怎么来的?

install.packages("ROSE")
library(ROSE)
library(rpart)


s = sample(957,200)
training = data[-s,]
test = data[s,]

### Rose
treeimb <- rpart(Riskdrinker ~ ., data = training)
pred.treeimb <- predict(treeimb, newdata = test)
accuracy.meas(test$Riskdrinker, pred.treeimb[,2])


输出量


  呼叫:precision.meas(response = test $ Riskdrinker,预测=
  pred.treeimb [,
      2])
  
  当预测值大于0.5时,示例被标记为肯定
  
  精度:0.919召回率:0.943 F:0.465


但是,当我像这样计算这些度量时,我得到了其他结果,以提高准确性和召回率。

treeimb <- rpart(Riskdrinker ~ ., data = training)
pred.treeimb <- predict(treeimb, newdata = test)
pred <- predict(treeimb, newdata = test, type="class")
confMat <- table(test$Riskdrinker, pred)

#Precision
message("Precision: ", specify_decimal(confMat[1,1] / (confMat[1,1] + confMat[2,1])*100, 1), " %")


#Recall
message("Recall: ", specify_decimal(confMat[1] / (confMat[1] + confMat[1,2])*100, 1), " %")

#Accuracy
message("Accuracy: ", specify_decimal((confMat[1]+confMat[2,2]) / (confMat[1] + confMat[1,2] + confMat[2,1] + confMat[2,2])*100, 1), " %")


或者像这样。彼此彼此。

准确度
结果是:


  
  精度:76.9%
  召回率:69.8%
  准确度:89.0%
  


与这些代码的主要区别在于,在一种情况下,我使用type =“ class”,但那有什么区别呢?你还能从罗斯那里得到一个矩阵吗?
我会说这是一个可复制的示例,除非我放弃我的数据集ofc。

最佳答案

我对Rose包进行了一些实验,发现它们确实做错了。

这是他们的.meas函数的一些图片:

negatives: 21.8284728768508
n.negatives 45
postives 135.677199132703
n.positives 155
TP: 143
FP 16
TN 29
FN 12


与我的桌子比较混乱矩阵

pred <- predict(treeimb, newdata = test, type="class")
confMat <- table(pred, test$Riskdrinker)

          Reference
Prediction  Ja Nej
       Ja   29  12
       Nej  16 143


我们看到的是它们的TP和TN是错误的。

09-27 08:58