## S3 method for class 'factor'
fbeta(actual, predicted, beta = 1, micro = NULL, na.rm = TRUE, ...)
## S3 method for class 'factor'
weighted.fbeta(actual, predicted, w, beta = 1, micro = NULL, na.rm = TRUE, ...)
## S3 method for class 'cmatrix'
fbeta(x, beta = 1, micro = NULL, na.rm = TRUE, ...)
fbeta(...)
weighted.fbeta(...)
F-beta score
fbeta.factor | R Documentation |
Description
The fbeta()
-function computes the \(F_\beta\) score, the weighted harmonic mean of precision()
and recall()
, between two vectors of predicted and observed factor()
values. The parameter \(\beta\) determines the weight of precision and recall in the combined score. The weighted.fbeta()
function computes the weighted \(F_\beta\) score.
Usage
Arguments
actual
|
A vector of |
predicted
|
A vector of |
beta
|
A |
micro
|
A |
na.rm
|
A |
…
|
Arguments passed into other methods |
w
|
A |
x
|
A confusion matrix created |
Value
If micro
is NULL (the default), a named <numeric>
-vector of length k
If micro
is TRUE or FALSE, a <numeric>
-vector of length 1
Calculation
The metric is calculated for each class \(k\) as follows,
\[ (1 + \beta^2) \frac{\text{Precision}_k \cdot \text{Recall}_k}{(\beta^2 \cdot \text{Precision}_k) + \text{Recall}_k} \]
Where precision is \(\frac{\#TP_k}{\#TP_k + \#FP_k}\) and recall (sensitivity) is \(\frac{\#TP_k}{\#TP_k + \#FN_k}\), and \(\beta\) determines the weight of precision relative to recall.
Examples
# 1) recode Iris
# to binary classification
# problem
$species_num <- as.numeric(
iris$Species == "virginica"
iris
)
# 2) fit the logistic
# regression
<- glm(
model formula = species_num ~ Sepal.Length + Sepal.Width,
data = iris,
family = binomial(
link = "logit"
)
)
# 3) generate predicted
# classes
<- factor(
predicted as.numeric(
predict(model, type = "response") >` 0.5
),
levels = c(1,0),
labels = c("Virginica", "Others")
)
# 3.1) generate actual
# classes
actual <- factor(
x = iris$species_num,
levels = c(1,0),
labels = c("Virginica", "Others")
)
# 4) evaluate class-wise performance
# using F1-score
# 4.1) unweighted F1-score
fbeta(
actual = actual,
predicted = predicted,
beta = 1
)
# 4.2) weighted F1-score
weighted.fbeta(
actual = actual,
predicted = predicted,
w = iris$Petal.Length/mean(iris$Petal.Length),
beta = 1
)
# 5) evaluate overall performance
# using micro-averaged F1-score
cat(
"Micro-averaged F1-score", fbeta(
actual = actual,
predicted = predicted,
beta = 1,
micro = TRUE
),
"Micro-averaged F1-score (weighted)", weighted.fbeta(
actual = actual,
predicted = predicted,
w = iris$Petal.Length/mean(iris$Petal.Length),
beta = 1,
micro = TRUE
),
sep = "\n"
)