Çok sınıflı bir sınıflandırıcının kalitesi nasıl belirlenir


30

verilmiş

  • örneği ile bir veri kümesi ile birlikte , her örnek burada sınıfları tam bir sınıfı aitxiNxiyi
  • çok sınıflı bir sınıflandırıcı

Eğitim ve test ettikten sonra ben temelde bir tablo var gerçek sınıf ve tahmin sınıf her örneği için testi sette. Bu yüzden her örnek için bir eşleşme ( ) veya bir ( ) var.yiaixiyi=aiyiai

Maçın kalitesini nasıl değerlendirebilirim? Mesele şu ki, bazı sınıfların birçok üyesi olabilir, yani birçok örnek kendisine aittir. Açıkçası, tüm veri noktalarının% 50'si bir sınıfa aitse ve son sınıflandırıcım genel olarak% 50 doğru ise, hiçbir şey kazanmadım. Ne olursa olsun, girdi ne olursa olsun, o en büyük sınıfı çıkaran önemsiz bir sınıflandırıcı yapabilirdim.

Her bir sınıf için eşleşme ve vuruşların bilinen test seti sonuçlarına dayanarak bir sınıflandırıcının kalitesini tahmin etmek için standart bir yöntem var mı? Belki de her sınıf için eşleşme oranlarını ayırt etmek önemlidir.

Aklıma gelen en basit yaklaşım, en büyük sınıfın doğru eşleşmelerini dışlamak. Başka?


Soruyu doğru anladığımdan emin değilim. Karışıklık Matrisi ve türetilmiş önlemleri biliyor musunuz ? Sorunuzun cevabı bu mu? Yoksa daha karmaşık bir şeye mi bakıyorsunuz?
steffen

Sanırım bu benim kafamın kaynağını oluşturuyor: İlk paragrafta belirtiyorsunuz .. nerede yi gerçek sınıflar ve ... : örneğinin birden fazla sınıfa ait olabileceğini mi kastediyorsunuz ? Yoksa her tam bir sınıfa mı aittir? Lütfen açıklar mısın ? xixi
steffen

@ steffen: Karışıklık matrisini gördüm. Benim özel durumumda 4 tane sınıfım var. Bu nedenle, hangi türetilmiş önlemlerin kullanılabileceğinden ve anlamlı olacağından emin değilim. Her yalnızca bir sınıfa aittir. Bununla birlikte, altında ikiden fazla olası sınıf vardır . xii[1,,N]
Gerenuk

@ steffen Bu türetilmiş önlemler esas olarak ikili sınıflandırma için geçerlidir , oysa bu soru açıkça ikiden fazla sınıfla ilgilidir. Bu daha sonra "gerçek pozitif" gibi terimlerin değiştirilmiş bir şekilde anlaşılmasını gerektirir.
Michael McGowan

@MichaelMcGowan OP'den açıklama talebinde bulundum ve daha sonra düzenlemeden önce açıkça görülmemiş olan çok sınıflı sorunu açıkça yansıtacak bir düzenleme yaptım (IMHO).
steffen

Yanıtlar:


16

İkili sınıflandırma gibi, sınıflayıcınızın kalitesini tahmin etmek için ampirik hata oranını kullanabilirsiniz . bir sınıflandırıcı olsun ve ve veri tabanınızda ve sınıfında sırasıyla bir örnek olsun. gibi, sınıflar dengesiz olduğunda, taban çizgisi değil % 50 ancak daha büyük sınıfın oranı. Hatayı dengelemek için her sınıfa bir ağırlık ekleyebilirsiniz. sınıfının ağırlığı olsun . Ağırlıkları ve ağırlıklı ampirik hatayı tanımlayıngxiyi

err(g)=1nin1g(xi)yi
Wyy1Wy1nin1yi=y
errW(g)=1ninWyi1g(xi)yi

Steffen'ın dediği gibi, karışıklık matrisi bir sınıflandırıcının kalitesini tahmin etmenin iyi bir yolu olabilir. İkili durumda, bir sınıflandırıcının belirli bir sınıfı algılama yeteneğini tahmin etme gibi duyarlılık ve özgüllük gibi bu matristen bir ölçü elde edebilirsiniz. Sınıflandırıcının hata kaynağı belirli bir şekilde olabilir. Örneğin, bir sınıflayıcı 1 değerini öngörürken fazla güvende olabilir, ancak 0 değerini öngörürken asla yanlış deme. Bu sınıflandırmayı kontrol etmek için birçok sınıflayıcı parametreleştirilebilir (yanlış pozitifler veya yanlış negatifler) ve daha sonra kalitesiyle ilgileniyorsunuz. Bütün sınıflayıcı ailesi, sadece biri değil. Bundan ROC eğrisini çizebilirsiniz ve ROC eğrisinin altındaki alanı ölçmek size bu sınıflandırıcıların kalitesini verir.

Çoklu sınıf probleminiz için ROC eğrileri genişletilebilir. Bunu cevabını okumanızı öneririm iplik .


1
Ağırlıklı ampirik hatanın sınıf sayısına bölünmesi, ampirik hata ile aynı ölçekte olması gerekli değil mi? Aksi takdirde çok daha büyük olurdu ...
PhilippPro

17

Çok yönlü metin sınıflandırma sistemlerini değerlendirmek için mikro ve makro ortalamalı F1 (F-ölçüsü) kullanıyorum. F-Ölçümü, ağırlıklı olarak kesinlik ve hassasiyetin ağırlıklı bir birleşimidir. İkili sınıflandırma için, mikro ve makro yaklaşımlar aynıdır, ancak çok yönlü durum için size yardımcı olabileceklerini düşünüyorum. Makro F1 her sınıfa eşit ağırlık verirken Micro F1'i, her belgeye eşit ağırlık veren ağırlıklı bir hassasiyet ve hatırlama kombinasyonu olarak düşünebilirsiniz. Her biri için, F-ölçü denklemi aynıdır, ancak hassasiyeti hesaplar ve farklı şekilde hatırlarsınız:

F=(β2+1)PRβ2P+R,

burada genellikle 1 olarak ayarlanır.β

Pmicro=i=1|C|TPii=1|C|TPi+FPi,Rmicro=i=1|C|TPii=1|C|TPi+FNi

Pmacro=1|C|i=1|C|TPiTPi+FPi,Rmacro=1|C|i=1|C|TPiTPi+FNi

nerede Doğru Pozitif ise, , Yanlış Pozitif olan Yanlış Negatif ve sınıfıdır.F P F N CTPFPFNC


1
# Function in R, using precision, recall and F statistics

check.model.accuracy <- function(predicted.class, actual.class){

  result.tbl <- as.data.frame(table(predicted.class,actual.class ) ) 

  result.tbl$Var1 <- as.character(result.tbl$predicted.class)
  result.tbl$Var2 <- as.character(result.tbl$actual.class)

  colnames(result.tbl)[1:2] <- c("Pred","Act")

  cntr <- 0  
  for (pred.class in unique(result.tbl$Pred) ){
    cntr <- cntr+ 1
    tp <- sum(result.tbl[result.tbl$Pred==pred.class & result.tbl$Act==pred.class, "Freq"])
    tp.fp <- sum(result.tbl[result.tbl$Pred == pred.class , "Freq" ])
    tp.fn <- sum(result.tbl[result.tbl$Act == pred.class , "Freq" ])
    presi <- tp/tp.fp 
    rec <- tp/tp.fn
    F.score <- 2*presi*rec/(presi+rec)
    if (cntr == 1 ) F.score.row <- cbind(pred.class, presi,rec,F.score)
    if (cntr > 1 ) F.score.row <- rbind(F.score.row,cbind(pred.class,presi,rec,F.score))
  }

  F.score.row <- as.data.frame(F.score.row) 
  return(F.score.row)
}

check.model.accuracy(predicted.df,actual.df) 
# For multiclass, average across all classes 

5
Bunu açıklamak için biraz metin ekleyebilir misiniz?
gung -
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.