Ayarlanabilir hassasiyet ve geri çağırma ile sınıflandırıcı


11

Yanlış pozitif olmamak çok daha önemli bir ikili sınıflandırma sorunu üzerinde çalışıyorum; oldukça yanlış negatif bir sürü ok. Örneğin sklearn'de bir grup sınıflandırıcı kullandım, ancak hiçbirinin hassas hatırlama dengesini açıkça ayarlama yeteneğine sahip olmadığını düşünüyorum (oldukça iyi sonuçlar üretiyorlar, ancak ayarlanabilir değiller).

Hangi sınıflandırıcılar ayarlanabilir hassasiyet / geri çağırma özelliğine sahiptir? Rastgele Orman veya AdaBoost gibi standart sınıflandırıcılarda hassas / hatırlama dengesini etkilemenin bir yolu var mı?

Yanıtlar:


12

Scikit-learn sınıflandırıcılarının neredeyse tamamı ( decision_functionveya aracılığıyla predict_proba) karar değerleri verebilir .

Karar değerlerine dayanarak, hassas hatırlama ve / veya ROC eğrilerini hesaplamak kolaydır. scikit-learn bu işlevleri metrikler alt modülünde sağlar .

Olabilecek en az bir örnek, sahip varsayarak datave labelsuygun içeriğe sahip:

import sklearn.svm
import sklearn.metrics
from matplotlib import pyplot as plt

clf = sklearn.svm.LinearSVC().fit(data, labels)
decision_values = clf.decision_function(data)

precision, recall, thresholds = sklearn.metrics.precision_recall_curve(labels, decision_values)

plt.plot(recall, precision)
plt.show()

Mükemmel, teşekkürler! Bunu nasıl özlediğimden emin değilim :)
Alex I

precision_recall_curveF1'in tamamını hesaplamak gibi görünüyor . Negatif olanları nasıl hesaplayabilirim?
Mithril

6

Bu Q'ya çarpmadan önce bunu kendim için çözdüm, bu yüzden çözümümü paylaşmaya karar verdim.

Marc Claesen'in önerdiği aynı yaklaşımı kullanır, ancak hassas eksen ticaretinde geri çağırmadan daha yükseğe hareket etmek için sınıflandırıcıyı nasıl ayarlayacağınızla ilgili soruya cevap verir.

X_test verilerdir ve y_test gerçek etiketlerdir. Sınıflandırıcı önceden takılmış olmalıdır.

y_score = clf.decision_function(X_test)

prcsn,rcl,thrshld=precision_recall_curve(y_test,y_score)

min_prcsn=0.25 # here is your precision lower bound e.g. 25%
min_thrshld=min([thrshld[i] for i in range(len(thrshld)) if prcsn[i]>min_prcsn])

Ve tahmininizi ayarlamak için yeni öğrenilen d minimum eşiğini bu şekilde kullanırsınız (aksi takdirde sadece çağrı çağrısı alırsınız (X_test))

y_pred_adjusted=[1 if y_s>min_thrshld else 0 for y_s in y_score]

Bu ayarlama tarifi hakkındaki görüşlerinizi duymak harika olurdu.


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.