ローズライブラリで測定値を計算すると、リコール、精度、およびF1の測定値が得られます。しかし、私がそれらを手動で計算すると、リコールと精度の測定値は異なります。どうして?ROSEパッケージの潜在的なバグ:Rの精度、リコール、精度の差
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])
出力
コール:accuracy.meas(応答=試験の$ Riskdrinker、= pred.treeimb予測[2 ])
例は、場合陽性と標識されています予測が0.5より大きい。
精度:0.919再呼び出し:0.943F: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), " %")
このようにしてください。同じ同じ。
精度< - 和(DIAG(confMat))/ SUM(confMat)
これはもたらす:
- 精度:76.9パーセント
- リコール:69.8パーセント
- 精度:89.0%
コードとの主な違いは、ケースの1つでtype = "class"を使用していることですが、その違いは何ですか?あなたもローズから行列を得ることができますか? これは私のデータセットを公開しない限り、再現可能な例であると言えます。
あなたはどういう意味ですか? max(p、r)> = f> = min(p、r)? – sockevalley
F値は常に精度とリコールの間にある必要があります。これらの2つの境界よりも小さくても大きくてもできません。したがって、ROSEによって報告されたF値、精度、およびリコールの少なくとも1つが間違っていなければなりません。 –
私は正確で新しいバージョンをフォークし、コミットしました。今すぐNicolaからの回答を待っています。 – sockevalley