3

無関係なデータ セットのマシューズ相関係数 (MCC) 値を計算するのに最適な方法はどれですか?

4

2 に答える 2

6

ここでの「最良の方法」が何を意味するのかはわかりませんが、混同行列が与えられれば、計算は簡単なはずです。Python の場合:

import math

# tp is true positives, fn is false negatives, etc
mcc = (tp*tn - fp*fn) / math.sqrt( (tp + fp)*(tp + fn)*(tn + fp)*(tn + fn) )
于 2013-12-12T16:55:12.533 に答える
1

前の答えは正しいですが、数式では、分母の 4 つの合計のいずれかがゼロである場合も考慮する必要があります。このような場合、分母は任意に 1 に設定できます。

完全を期すために、以下に R コードを追加します (元のコードはここにあります) 。

mcc <- function (actual, predicted)
{
  # handles zero denominator and verflow error on large-ish products in denominator.
  #
  # actual = vector of true outcomes, 1 = Positive, 0 = Negative
  # predicted = vector of predicted outcomes, 1 = Positive, 0 = Negative
  # function returns MCC

  TP <- sum(actual == 1 & predicted == 1)
  TN <- sum(actual == 0 & predicted == 0)
  FP <- sum(actual == 0 & predicted == 1)
  FN <- sum(actual == 1 & predicted == 0)

  sum1 <- TP+FP; sum2 <-TP+FN ; sum3 <-TN+FP ; sum4 <- TN+FN;
  denom <- as.double(sum1)*sum2*sum3*sum4 # as.double to avoid overflow error on large products

  if (any(sum1==0, sum2==0, sum3==0, sum4==0)) {
    denom <- 1
  }

  mcc <- ((TP*TN)-(FP*FN)) / sqrt(denom)
  return(mcc)
}
于 2016-10-22T17:49:13.543 に答える