当我使用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是错误的。