Çok sınıflı çok etiketli sınıflandırma, örneğin ikiden fazla etiketin olduğu ve her örneğin birden fazla etiketin bulunduğu sınıflandırma için hassasiyetin nasıl hesaplanacağını ve hatırlama önlemlerinin nasıl olacağını merak ediyorum.
Çok sınıflı çok etiketli sınıflandırma, örneğin ikiden fazla etiketin olduğu ve her örneğin birden fazla etiketin bulunduğu sınıflandırma için hassasiyetin nasıl hesaplanacağını ve hatırlama önlemlerinin nasıl olacağını merak ediyorum.
Yanıtlar:
Sınıflandırıcı performansını ölçmek için bir başka popüler araç ROC / AUC ; bunun da çok sınıf / çok etiketli bir uzantısı var: bkz. [Hand 2001]
[El 2001]: ROC eğrisi altındaki alanın çoklu sınıflandırma problemlerine basit bir genellemesi
Burada kafa karışıklığı matrisi ve çok sınıflı hassasiyet / hatırlama ölçümü hakkında kurs forum forum tartışılmaktadır.
Temel fikir, tüm hassasiyeti hesaplamak ve tüm sınıfları geri çağırmak, ardından tek bir gerçek sayı ölçümü için ortalamalarını almaktır.
Karışıklık matrisi, hassaslığın hesaplanmasını ve bir sınıfın geri çağrılmasını kolaylaştırır.
Aşağıda, bu konudan kopyalanan karışıklık matrisi hakkında bazı temel açıklamalar yer almaktadır:
Bir karışıklık matrisi, 2'den fazla sınıf olduğunda gerçek pozitifleri, gerçek negatiflerini, yanlış pozitiflerini ve yanlış negatiflerini sınıflandırmanın bir yoludur. Hassaslığı hesaplamak ve hatırlamak ve bu nedenle çoklu sınıf problemleri için f1 puanı almak için kullanılır.
Gerçek değerler sütunlarla temsil edilir. Tahmini değerler satırlarla temsil edilir.
Örnekler:
Aslında 8 olan 10 eğitim örneği yanlış olarak sınıflandırılmış (öngörülen) 5
aslında 5 olan 13 eğitim örneği 9 olarak yanlış sınıflandırılmıştır
Karışıklık Matrisi
cm = 0 1 2 3 4 5 6 7 8 9 10 1 298 2 1 0 1 1 3 1 1 0 2 0 293 7 4 1 0 5 2 0 0 3 1 3 263 0 8 0 0 3 0 2 4 1 5 0 261 4 0 3 2 0 1 5 0 0 10 0 254 3 0 10 2 1 6 0 4 1 1 4 300 0 1 0 0 7 1 3 2 0 0 0 264 0 7 1 8 3 5 3 1 7 1 0 289 1 0 9 0 1 3 13 1 0 11 1 289 0 10 0 6 0 1 6 1 2 1 4 304
X sınıfı için:
Gerçek pozitif: diyagonal konum, cm (x, x).
Yanlış pozitif: sütun x'in toplamı (ana çapraz olmadan), toplam (cm (:, x)) - cm (x, x).
Yanlış negatif: satır x'in toplamı (ana çapraz olmadan), toplam (cm (x, :), 2) -cm (x, x).
Ders formülünü takip ederek kesinlik, hatırlama ve F1 puanlarını hesaplayabilirsiniz.
Tüm sınıflar üzerinden ortalama alma (ağırlıklandırma ile veya ağırlıksız), tüm model için değerler verir.
Çok etiketli sınıflandırma için gitmeniz gereken iki yol vardır: Önce aşağıdakileri göz önünde bulundurun.
Metrikler, veri noktası başına hesaplanır. Öngörülen her etiket için yalnızca puanı hesaplanır ve ardından bu puanlar tüm veri noktalarında toplanır.
Başka ölçütler de var.
Burada işler etiket şeklinde yapılır. Her bir etiket için metrikler (örn. Hassasiyet, hatırlama) hesaplanır ve daha sonra bu etiket tipi metrikler toplanır. Bu nedenle, bu durumda, bir ikili sınıflandırma için yaptığınız gibi (her bir etiketin ikili bir ataması olduğundan), her bir etiketin hassasiyetini / hatırlamasını hesaplarsınız.
Kolay yolu, genel formu sunmaktır.
Bu sadece standart çoklu sınıf eşdeğeri bir uzantısıdır.
Makro ortalama
Mikro ortalama
Burada sadece etiketi için sırasıyla doğru pozitif, yanlış pozitif, gerçek negatif ve yanlış negatif sayımlardır . j t h
Burada , karışıklık matrisi temelli metriklerin herhangi birini temsil eder. Sizin durumunuzda standart hassasiyeti takıp formülleri geri çağırırsınız. Makro ortalama için, etiket başına sayımı ve ardından toplamı geçersiniz, mikro ortalama için önce sayıları ortalamalandırır, sonra metrik işlevinizi uygularsınız.
Sen mult etiketli metrikleri için koduna bir göz atmak ilginizi çekebilir burada , hangi paketin bir parçası mldr içinde Ar . Ayrıca Java çoklu etiket kütüphanesine MULAN bakmak da ilginizi çekebilir .
Bu, farklı metriklere giriş yapmak için güzel bir makale: Çoklu Etiket Öğrenme Algoritmalarına Bir Gözden Geçirme
Çoklu etiket kısmını bilmiyorum ama ortak sınıflandırma için bu linkler size yardımcı olacaktır.
Bu bağlantı , hassasiyeti hesaplamak ve her kategori için hatırlamak için kullanabileceğiniz karışıklık matrisinin nasıl oluşturulduğunu açıklar.
Bu bağlantı , sınıflandırıcıyı bir bütün olarak değerlendirmek için micro-f1 ve macro-f1 ölçümlerinin nasıl hesaplanacağını açıklar.
umarım bunu faydalı bulmuşsunuzdur.
bu bağlantı bana yardımcı oldu .. https://www.youtube.com/watch?v=HBi-P5j0Kec de size yardımcı olacağını umuyorum
dağılımı aşağıdaki gibi söyleyin
A B C D
A 100 80 10 10
B 0 9 0 1
C 0 1 8 1
D 0 1 0 9
A için hassasiyet
P (A) = 100/100 + 0 + 0 + 0 = 100
P (B) = 9/9 + 80 + 1 + 1 = 9/91 psst ... esasen sınıfın gerçek pozitifliğini alır ve satırlar arasında sütun verisine bölünür
bir için hatırlamak
R (A) = 100 / 100+ 80 + 10 + 10 = 0.5
R (B) = 9 / 9+ 0 + 0 + 1 = 0.9
psst ... aslında sınıfın gerçek pozitifini alır ve satır verilerini sütunlar arasında böler
Tüm değerleri aldığınızda, makro ortalamasını alın
ortalama (P) = P (A) + P (B) + P (C) + P (D) / 4
ortalama (R) = R (A) + R (B) + R (C) + R (D) / 4
F1 = 2 * ortalama (P) * ortalama (R) / ortalama (P) + ortalama (R)
Check out Harvard'da cs205.org gelen bu slaytları . Hata Ölçütleri bölümüne girdiğinizde, çok sınıflı ayarlarda (örneğin, hepsine veya hepsine tek) veya karışıklık matrislerinde hassasiyet ve hatırlama tartışılır. Karışıklık matrisleri burada gerçekten istediğiniz şeydir.
Bilginize, Python yazılım paketinde bulunan scikits.learn , karışıklık matrisi gibi şeyleri çok-sınıflı verilere göre eğitilmiş sınıflayıcılardan otomatik olarak hesaplamak için yerleşik yöntemler vardır. Muhtemelen doğrudan sizin için hassas hatırlama alanlarını da hesaplayabilir. Bakmaya değer.
Özgür ve arkadaşlarından (2005), normal ifadeleri izleyerek Kesinlik ve Geri Çağrıları hesaplamanız gerektiğini görmek mümkündür, ancak veri kümenizdeki toplam N örneğinin ortalamasının ortalaması yerine N = [[ Söz konusu sınıf atandı].
burada belirtilen referans: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.104.8244&rep=rep1&type=pdf
Tam olarak aynı şekilde yaparsınız, genel durum, setlerle:
http://en.wikipedia.org/wiki/F1_score
http://en.wikipedia.org/wiki/Precision_and_recall
İşte tam olarak yapan basit Python fonksiyonları:
def precision(y_true, y_pred):
i = set(y_true).intersection(y_pred)
len1 = len(y_pred)
if len1 == 0:
return 0
else:
return len(i) / len1
def recall(y_true, y_pred):
i = set(y_true).intersection(y_pred)
return len(i) / len(y_true)
def f1(y_true, y_pred):
p = precision(y_true, y_pred)
r = recall(y_true, y_pred)
if p + r == 0:
return 0
else:
return 2 * (p * r) / (p + r)
if __name__ == '__main__':
print(f1(['A', 'B', 'C'], ['A', 'B']))