9

私はしばらくRを使用していないので、まだ慣れていないかもしれませんが、.. 2つの列を持つRのテーブルがあり、最初のテーブルには予測値があります(値は0または1のいずれかです)。 )、2番目の値には実際の値(これも0または1)があります。再現率、適合率、適合率を見つける必要がありますが、Rで適切な関数を見つけることができません(ROCRについても読みましたが、いくつかのプロットを作成することしかできませんでしたが、実際にはプロットは必要ありません。数字が必要です)。

Rの適合率、再現率、f値を見つけるための優れた関数はありますか?それを行うためのさまざまな方法はありますか?

4

4 に答える 4

23

まず、次のようにデータセットを作成します

> predict <- sample(c(0, 1), 20, replace=T)
> true <- sample(c(0, 1), 20, replace=T)

予測値の1が取得されたと思います。取得された総数は

> retrieved <- sum(predict)

関連する取得されたインスタンスの割合である精度は、

> precision <- sum(predict & true) / retrieved

取得される関連インスタンスの割合であるリコールは、

> recall <- sum(predict & true) / sum(true)

Fメジャーは2*適合率*再現率/(適合率+再現率)は

> Fmeasure <- 2 * precision * recall / (precision + recall)
于 2012-09-24T22:40:21.267 に答える
10

パトリックの素晴らしい答えを関数にきちんとパッケージ化するだけです...

measurePrecisionRecall <- function(predict, actual_labels){
  precision <- sum(predict & actual_labels) / sum(predict)
  recall <- sum(predict & actual_labels) / sum(actual_labels)
  fmeasure <- 2 * precision * recall / (precision + recall)

  cat('precision:  ')
  cat(precision * 100)
  cat('%')
  cat('\n')

  cat('recall:     ')
  cat(recall * 100)
  cat('%')
  cat('\n')

  cat('f-measure:  ')
  cat(fmeasure * 100)
  cat('%')
  cat('\n')
}
于 2016-02-14T15:14:47.730 に答える
6

パッケージの関数confusionMatrix()を使用して、これらすべてのメトリックを取得できます。caret

# Create a sample
predicted <- as.factor(sample(c(0, 1), 100, replace=T))
realized  <- as.factor(sample(c(0, 1), 100, replace=T))

# Compute the confusion matrix and all the statistics
result <- confusionMatrix(predicted, realized, mode="prec_recall")

result
result$byClass["Precision"]
result$byClass["Recall"]
result$byClass["F1"]
于 2018-10-18T21:12:33.870 に答える
0
measurePrecisionRecall <- function(actual_labels, predict){
  conMatrix = table(actual_labels, predict)
  precision <- conMatrix['0','0'] / ifelse(sum(conMatrix[,'0'])== 0, 1, sum(conMatrix[,'0']))
  recall <- conMatrix['0','0'] / ifelse(sum(conMatrix['0',])== 0, 1, sum(conMatrix['0',]))
  fmeasure <- 2 * precision * recall / ifelse(precision + recall == 0, 1, precision + recall)

  cat('precision:  ')
  cat(precision * 100)
  cat('%')
  cat('\n')

  cat('recall:     ')
  cat(recall * 100)
  cat('%')
  cat('\n')

  cat('f-measure:  ')
  cat(fmeasure * 100)
  cat('%')
  cat('\n')
}
于 2018-08-23T03:57:57.193 に答える