📜  如何计算 R 中的 F1 分数?

📅  最后修改于: 2022-05-13 01:54:31.182000             🧑  作者: Mango

如何计算 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 分数。

示例:在此示例中,我们正在创建两个包含 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")

混淆矩阵()函数:计算具有相关统计数据的观察和预测类的交叉表。

示例:在此示例中,我们是两个向量,一个带有实际数据,另一个带有预测数据,此外,我们使用了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 分数的参数。

示例:在此示例中,我们将简单地创建给定数据集的逻辑回归模型,然后使用 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"