如何计算 R 中的 F1 分数?
在本文中,我们将研究使用 R 语言中的各种包及其各种功能来计算 F1 分数的方法。
F1分数
F-score 或 F-measure 是衡量测试准确性的指标。它由测试的精度和召回率计算得出,其中精度是真阳性结果的数量除以所有阳性结果的数量,包括未正确识别的结果,而召回率是真阳性结果的数量除以应该被确定为阳性的所有样本的数量。
方法 1:使用 Mlmetrics 包中的 F1_Score函数
在这种计算 f1 分数的方法下,用户需要在当前工作的 R 控制台中安装和导入 Mlmetrics 包,此外,用户需要从该包中调用 F1_Score()函数并将其传递给所需的参数以获得预测值和实际值的 F1 分数,作为回报,此函数将返回给定实际值和预测值的 F1 分数。
在 R 语言中安装和导入 Mlmetrics 包的语法:
install.package("MLmetrics")
library("MLmetrics")
F1_Score()函数:该函数用于计算 F1 分数。
Syntax: F1_Score(y_true, y_pred, positive = NULL)
Parameters:
- y_true: Ground truth (correct) 0-1 labels vector
- y_pred: Predicted labels vector, as returned by a classifier
- positive: An optional character string for the factor level that corresponds to a “positive” result
示例:在此示例中,我们正在创建两个包含 10 个数据点的向量,一个具有实际值,另一个具有预测值,借助 MLmetrics 包中的 F1_Score()函数,我们正在计算 R 编程中的 f1 分数.
R
# Import Mlmetrics library
library(MLmetrics)
# Create Data
actual = c(1,2,28,1,5,6,7,8,9,10)
predicted = c(1,2,3,4,5,6,7,8,9,10)
# Calculate F!_Score
F1_Score(predicted,actual)
R
# Import caret library
library(caret)
# Create Data
actual <- factor(rep(c(1, 2),
times=c(16, 24)))
predicted <- factor(rep(c(1, 2, 1, 2),
times=c(12, 4, 7, 17)))
# create confusion matrix
confusionMatrix(predicted, actual,
mode = "everything",
positive="1")
R
library(caTools)
data = read.csv('Social_Network_Ads.csv')
data = data[3:5]
split = sample.split(data$Purchased, SplitRatio = 0.75)
train = subset (data, split == TRUE)
test = subset (data, split == FALSE)
train[-3] = scale(train[-3])
test[-3] = scale(test[-3])
classifier = glm(formula = Purchased ~ .,
family = binomial,
data = train)
prob_pred = predict (classifier, type = 'response',
newdata = test[-3])
y_pred = ifelse (prob_pred > 0.5, 1, 0)
cm = table (test[, 3], y_pred > 0.5)
err_metric(cm)
输出:
[1] 0.6666667
方法 2:使用 caret 包中的confusionMatrix()函数
在这种计算 F1 分数的方法中,用户需要首先在工作的 R 控制台中安装和导入 caret 包,然后用户需要调用confusionMatrix()函数并将所需的参数传递给它。这会将 F1 分数返回给 R 语言中给定数据的用户。
在 R 语言中安装和导入 caret 包的语法:
install.package("caret")
library("caret")
混淆矩阵()函数:计算具有相关统计数据的观察和预测类的交叉表。
Syntax: confusionMatrix(data, reference, positive = NULL, dnn = c(“Prediction”, “Reference”), …)
Parameters:
- data: a factor of predicted classes
- reference: a factor of classes to be used as the true results
- positive: an optional character string for the factor level that corresponds to a “positive” result (if that makes sense for your data).
- dnn: a character vector of dimnames for the table
- …: options to be passed.
示例:在此示例中,我们是两个向量,一个带有实际数据,另一个带有预测数据,此外,我们使用了confusionMatrix()函数来获取给定数据的F1 分数。
R
# Import caret library
library(caret)
# Create Data
actual <- factor(rep(c(1, 2),
times=c(16, 24)))
predicted <- factor(rep(c(1, 2, 1, 2),
times=c(12, 4, 7, 17)))
# create confusion matrix
confusionMatrix(predicted, actual,
mode = "everything",
positive="1")
输出:
Confusion Matrix and Statistics
Reference
Prediction 1 2
1 12 7
2 4 17
Accuracy : 0.725
95% CI : (0.5611, 0.854)
No Information Rate : 0.6
P-Value [Acc > NIR] : 0.07095
Kappa : 0.4444
Mcnemar's Test P-Value : 0.54649
Sensitivity : 0.7500
Specificity : 0.7083
Pos Pred Value : 0.6316
Neg Pred Value : 0.8095
Precision : 0.6316
Recall : 0.7500
F1 : 0.6857
Prevalence : 0.4000
Detection Rate : 0.3000
Detection Prevalence : 0.4750
Balanced Accuracy : 0.7292
'Positive' Class : 1
方法3:计算模型的F1分数:
在这种计算模型 F1 分数的方法中,用户需要首先针对给定数据创建模型,然后用户需要计算该模型的混淆矩阵,然后将混淆矩阵作为其传递的 err_metric()函数R 编程语言中构建模型的 f1 分数的参数。
Syntax: err_metric(cm)
Where, cm: confusion matrix
示例:在此示例中,我们将简单地创建给定数据集的逻辑回归模型,然后使用 err_metrics()函数计算 R 编程语言中的 f1 分数。
数据集的链接。
R
library(caTools)
data = read.csv('Social_Network_Ads.csv')
data = data[3:5]
split = sample.split(data$Purchased, SplitRatio = 0.75)
train = subset (data, split == TRUE)
test = subset (data, split == FALSE)
train[-3] = scale(train[-3])
test[-3] = scale(test[-3])
classifier = glm(formula = Purchased ~ .,
family = binomial,
data = train)
prob_pred = predict (classifier, type = 'response',
newdata = test[-3])
y_pred = ifelse (prob_pred > 0.5, 1, 0)
cm = table (test[, 3], y_pred > 0.5)
err_metric(cm)
输出:
[1] "Precision value of the model: 0.72"
[1] "Accuracy of the model: 0.77"
[1] "Recall value of the model: 0.12"
[1] "False Positive rate of the model: 0.12"
[1] "False Negative rate of the model: 0.42"
[1] "f1 score of the model: 0.21"