五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

R語言中的多類別問題的績效衡量:F1

2021-03-14 18:36 作者:拓端tecdat  | 我要投稿

原文鏈接:http://tecdat.cn/?p=11160

對于分類問題,通常根據(jù)與分類器關(guān)聯(lián)的混淆矩陣來定義分類器性能。根據(jù)混淆矩陣 ,可以計(jì)算靈敏度(召回率),特異性和精度。?

對于二進(jìn)制分類問題,所有這些性能指標(biāo)都很容易獲得。??

非得分分類器的數(shù)據(jù)

為了展示多類別設(shè)置中非得分分類器的性能指標(biāo),讓我們考慮觀察到\(N = 100 \)的分類問題和觀察到\(G = \ {1,\ ldots,5 \}的五個分類問題\):

  1. ref.labels <- c(rep("A", 45), rep("B" , 10), rep("C", 15), rep("D", 25), rep("E", 5))

  2. predictions <- c(rep("A", 35), rep("E", 5), rep("D", 5),

  3. rep("B", 9), rep("D", 1),

  4. rep("C", 7), rep("B", 5), rep("C", 3),

  5. rep("D", 23), rep("C", 2),

  6. rep("E", 1), rep("A", 2), rep("B", 2))

  7. df <- data.frame("Prediction" = predictions, "Reference" = ref.labels)

準(zhǔn)確性和加權(quán)準(zhǔn)確性

通常,將多類準(zhǔn)確性定義為正確預(yù)測的平均數(shù):

其中\(zhòng)(I \)是指標(biāo)函數(shù),如果類匹配,則返回1,否則返回0。

為了對各個類的性能更加敏感,我們可以為每個類分配權(quán)重\(w_k \),以使\(\ sum_ {k = 1} ^ {| G |} w_k = 1 \)。單個類別的\(w_k \)值越高,該類別的觀測值對加權(quán)準(zhǔn)確性的影響就越大。加權(quán)精度取決于:

為了平均加權(quán)所有類,我們可以設(shè)置\(w_k = \ frac {1} {| G |} \,\ forall k \ in \ {1,\ ldots,G \} \)。注意,當(dāng)使用除均等權(quán)重之外的任何其他值時,很難找到關(guān)于權(quán)重的特定組合的合理論證。

計(jì)算精度和加權(quán)精度

精度很容易計(jì)算:

  1. calculate.accuracy <- function(predictions, ref.labels) {

  2. return(length(which(predictions == ref.labels)) / length(ref.labels))

  3. }

  4. calculate.w.accuracy <- function(predictions, ref.labels, weights) {

  5. lvls <- levels(ref.labels)

  6. if (length(weights) != length(lvls)) {

  7. stop("Number of weights should agree with the number of classes.")

  8. }

  9. if (sum(weights) != 1) {

  10. stop("Weights do not sum to 1")

  11. }

  12. accs <- lapply(lvls, function(x) {

  13. idx <- which(ref.labels == x)

  14. return(calculate.accuracy(predictions[idx], ref.labels[idx]))

  15. })

  16. acc <- mean(unlist(accs))

  17. return(acc)

  18. }

  19. acc <- calculate.accuracy(df$Prediction, df$Reference)

  20. print(paste0("Accuracy is: ", round(acc, 2)))

## [1] "Accuracy is: 0.78"## [1] "Weighted accuracy is: 0.69"

?

F1分?jǐn)?shù)的微觀和宏觀平均值

微觀平均值和宏觀平均值表示在多類設(shè)置中解釋混淆矩陣的兩種方式。在這里,我們需要為每個類\(g_i \ in G = \ {1,\ ldots,K \} \)計(jì)算一個混淆矩陣,以使第\(i \)個混淆矩陣考慮類\(g_i \)作為肯定類,而所有其他類\(g_j \)作為\(j \ neq i \)作為否定類。?

為了說明為什么增加真實(shí)負(fù)數(shù)會帶來問題,請想象有10個類別,每個類別有10個觀察值。然后,其中一個類別的混淆矩陣可能具有以下結(jié)構(gòu):

預(yù)測/參考1類其他類1類810其他類280

基于此矩陣,特異性將為\(\ frac {80} {80 + 10} = 88.9 \%\),盡管僅在18個實(shí)例中的8個實(shí)例中正確預(yù)測了1類(精度為44.4%)。?

在下文中,我們將使用\(TP_i \),\(FP_i \)和\(FN_i \)分別在與第(i)個相關(guān)聯(lián)的混淆矩陣中指示真陽性,假陽性和假陰性類。此外,讓精度由\(P \)表示,并由\(R \)表示。

?

計(jì)算R中的微觀和宏觀平均值

在這里,我演示了如何在R中計(jì)算F1分?jǐn)?shù)的微觀平均值和宏觀平均值。

?我們將使用?包中的??confusionMatrix?函數(shù)??caret來確定混淆矩陣:

現(xiàn)在, 我們可以總結(jié)所有類的性能:

  1. metrics <- c("Precision", "Recall")

  2. print(cm[[1]]$byClass[, metrics])

  1. ## ? ? ? ? ?Precision ? ?Recall

  2. ## Class: A 0.9459459 0.7777778

  3. ## Class: B 0.5625000 0.9000000

  4. ## Class: C 0.8333333 0.6666667

  5. ## Class: D 0.7931034 0.9200000

  6. ## Class: E 0.1666667 0.2000000

這些數(shù)據(jù)表明,總體而言,性能很高。但是,我們的假設(shè)分類器對于單個類別(如B類(精度)和E類(精度和查全率))的表現(xiàn)不佳?,F(xiàn)在,我們將研究F1得分的微觀平均值和宏觀平均值如何受到模型預(yù)測的影響。

微型平均F1的總體性能

?get.micro.f1?然后,該函數(shù)? 簡單地匯總計(jì)數(shù)并計(jì)算如上定義的F1分?jǐn)?shù)。


  1. micro.f1 <- get.micro.f1(cm)

  2. print(paste0("Micro F1 is: ", round(micro.f1, 2)))

## [1] "Micro F1 is: 0.88"

?值為??0.88\(F_1 {\ rm {micro}} \)相當(dāng)高,表明整體性能良好。?

宏平均F1的類特定性能

由于其中的每個混淆矩陣都??cm?已經(jīng)存儲了一對多的預(yù)測性能,因此我們只需要從其中一個矩陣中提取這些值,然后按上述定義計(jì)算\(F1 _ {\ rm {macro}} \):

  1. get.macro.f1 <- function(cm) {

  2. c <- cm[[1]]$byClass # a single matrix is sufficient

  3. re <- sum(c[, "Recall"]) / nrow(c)

  4. pr <- sum(c[, "Precision"]) / nrow(c)

  5. f1 <- 2 * ((re * pr) / (re + pr))

  6. return(f1)

  7. }

  8. macro.f1 <- get.macro.f1(cm)

  9. print(paste0("Macro F1 is: ", round(macro.f1, 2)))

## [1] "Macro F1 is: 0.68"

?值??0.68,\(F _ {\ RM {宏}} \)是斷然比更小的微平均F1(?0.88)。?

請注意,對于當(dāng)前數(shù)據(jù)集,微觀平均和宏觀平均F1的總體(0.78)和加權(quán)精度(0.69)具有相似的關(guān)系。

精確調(diào)用曲線和AUC

ROC曲線下的面積(AUC)是評估軟分類器分類分離質(zhì)量的有用工具。在多類別設(shè)置中,我們可以根據(jù)它們對所有精度召回曲線的關(guān)系可視化多類別模型的性能。AUC也可以推廣到多類別設(shè)置。

一對一的精確召回曲線

?我們可以通過繪制\(K \)二進(jìn)制分類器的性能來可視化多類模型的性能。

該方法基于擬合\(K \)對所有分類器,其中在第(i)次迭代中,組(g_i \)設(shè)置為正類,而所有類((g_j \))與\(j \ neq i \)一起被視為否定類。請注意,此方法不應(yīng)用于繪制常規(guī)ROC曲線(TPR與FPR),因?yàn)橛捎谌ザ讈啺范a(chǎn)生的大量負(fù)面實(shí)例會導(dǎo)致FPR被低估。相反,應(yīng)考慮精度和召回率:


  1. for (i in seq_along(levels(response))) {


  2. model <- NaiveBayes(binary.labels ~ ., data = iris.train[, -5])

  3. pred <- predict(model, iris.test[,-5], type='raw')

  4. score <- pred$posterior[, 'TRUE'] # posterior for ?positive class

  5. test.labels <- iris.test$Species == cur.class

  6. pred <- prediction(score, test.labels)

  7. perf <- performance(pred, "prec", "rec")

  8. roc.x <- unlist(perf@x.values)

  9. roc.y <- unlist(perf@y.values)

  10. lines(roc.y ~ roc.x, col = colors[i], lwd = 2)

  11. # store AUC

  12. auc <- performance(pred, "auc")

  13. auc <- unlist(slot(auc, "y.values"))

  14. aucs[i] <- auc

  15. }

?

print(paste0("Mean AUC under the precision-recall curve is: ", round(mean(aucs), 2)))## [1] "Mean AUC under the precision-recall curve is: 0.97"

該圖表明??setosa??可以很好地預(yù)測,而????virginica??則更難預(yù)測。 平均AUC??0.97?表示該模型很好地分隔了三個類別。

多類設(shè)置的AUC通用化

?單個決策值的廣義AUC

?當(dāng)單個數(shù)量允許分類時,可使用包裝中的??multiclass.roc?功能??pROC確定AUC。??

## Multi-class area under the curve: 0.654

函數(shù)的計(jì)算出的AUC只是所有成對類別比較中的平均值A(chǔ)UC。

?廣義AUC?

下面從Hand and Till,2001開始描述AUC的一般化? 。

?

?

似乎由于Hand and Till(2001),沒有公開可用的AUC多類概括的實(shí)現(xiàn)。因此,我編寫了一個實(shí)現(xiàn)。該函數(shù)??compute.A.conditional?確定\(\ hat {A}(i | j)\)。該??multiclass.auc?函數(shù)為所有具有\(zhòng)(i <j \)的類對計(jì)算\(\ hat {A}(i,j)\),然后計(jì)算結(jié)果值的平均值。輸出為廣義AUC \(M \),該屬性??pair_AUCs?指示\(A(i,j)\)的值。



  1. multiclass.auc <- function(pred.matrix, ref.outcome) {

  2. labels <- colnames(pred.matrix)


  3. c <- length(labels)

  4. pairs <- unlist(lapply(combn(labels, 2, simplify = FALSE), function(x) paste(x, collapse = "/")))

  5. A.ij.joint <- sum(unlist(A.mean))

  6. M <- 2 / (c * (c-1)) * A.ij.joint

  7. attr(M, "pair_AUCs") <- A.mean

  8. return(M)

  9. }

  10. model <- NaiveBayes(iris.train$Species ~ ., data = iris.train[, -5])

  11. pred <- predict(model, iris.test[,-5], type='raw')

  12. pred.matrix <- pred$posterior

  13. ref.outcome <- iris.test$Species

  14. M <- multiclass.auc(pred.matrix, ref.outcome)

  15. print(paste0("Generalized AUC is: ", round(as.numeric(M), 3)))

## [1] "Generalized AUC is: 0.988"print(attr(M, "pair_AUCs")) # pairwise AUCs
  1. ## ? ?setosa/versicolor ? ? setosa/virginica versicolor/virginica

  2. ## ? ? ? ? ? ?1.0000000 ? ? ? ? ? ?1.0000000 ? ? ? ? ? ?0.9627329

使用這種方法,廣義AUC為0.988 。生成的成對AUC的解釋也相似。?

摘要

對于多類別問題 。

  • 對于硬分類器,您可以使用(加權(quán))準(zhǔn)確性以及微觀或宏觀平均F1分?jǐn)?shù)。

  • 對于軟分類器,您可以確定一對全精度召回曲線,也可以使用Hand and Till中的AUC 。

請選中你要保存的內(nèi)容,粘貼到此文本框


R語言中的多類別問題的績效衡量:F1的評論 (共 條)

分享到微博請遵守國家法律
屏东市| 乐亭县| 贺州市| 乌审旗| 姚安县| 襄垣县| 木兰县| 蓝田县| 台湾省| 湖口县| 凤冈县| 凤翔县| 静海县| 澄城县| 华容县| 昆山市| 临朐县| 大丰市| 黑山县| 巴彦县| 大港区| 南康市| 岳阳市| 洛扎县| 福泉市| 阿合奇县| 察隅县| 郧西县| 鹰潭市| 长丰县| 肃南| 合作市| 石首市| 象山县| 华坪县| 绍兴市| 玉门市| 义乌市| 喀喇沁旗| 富蕴县| 榕江县|