Ayrık sınıflandırıcılardan oluşan bir sınıflandırıcı için ROC eğrisini hesaplamak için etkili algoritma


13

Aynı girişte hiçbirinin doğru olmayacağı anlamında ayrık olan C_1 ... C_n sınıflandırıcılarına sahip olduğumu varsayalım (örneğin, karar ağacındaki düğümler). Bunların bazı alt kümelerinin birliği olan yeni bir sınıflandırıcı oluşturmak istiyorum (örneğin, bir karar ağacının hangi yapraklarının olumlu bir sınıflandırma vereceğine karar vermek istiyorum). Tabii ki, bunu yaparken duyarlılık ve pozitif öngörücü değer arasında bir denge olacaktır. Bu yüzden bir ROC eğrisi görmek istiyorum. Prensip olarak bunu sınıflandırıcıların tüm alt kümelerini numaralandırarak ve elde edilen hassasiyet ve PPV'yi hesaplayarak yapabilirim. Bununla birlikte, eğer n 30'dan fazlaysa, bu oldukça pahalı bir işlemdir. Öte yandan, neredeyse kesinlikle Pareto optimal olmayan bazı kombinasyonlar vardır, bu nedenle bazı dal ve sınır stratejileri veya başka bir şey olabilir,

Bu yaklaşımın verimli olup olmayacağı ve herhangi bir çalışma olup olmadığı veya yukarıdaki durumda ROC eğrisinin verimli bir şekilde hesaplanması hakkında herhangi bir fikriniz olup olmadığı hakkında tavsiye istiyorum.


Her girdi durumunu doğru veya yanlış olarak mı sınıflandırıyorsunuz?
image_doctor

@image_doctor: evet
Josh Brown Kramer

Ben "açık değilim" ... bu aynı girişte hiçbir ikisinin doğru dönmeyecek olması anlamında ayrıktır ... "ve sen bir ikili çıktı, nasıl ikiden fazla sınıflandırıcılar olabilir sınıflandırma topluluk, muhtemelen bir şey eksik?
image_doctor

@image_doctor: İki sınıflandırıcının aynı girdi üzerinde aynı çıktıyı döndürmediğini söylediğimi düşünüyor olabilirsiniz. Kimsenin gerçek olmayacağını söylüyorum. İkisi de yanlış dönebilir.
Josh Brown Kramer

1
Belki de bu makale, ROC sınıflandırıcılarını (veya alıntı yapan kağıtları) teorik olarak en uygun şekilde birleştirmenin bir yolunda sanat durumunu anlamanıza yardımcı olabilir: M. Barreno, A. Cardenas, JD Tygar, Sınıflandırıcıların Birleşimi için Optimal ROC Eğrisi, Sinir Bilgi İşlem Sistemlerindeki Gelişmeler, 2008.
Valentas

Yanıtlar:


1

N10

Bu sırt çantası problemine çok benziyor ! Küme boyutları "ağırlıklar" ve bir kümedeki pozitif örneklerin sayısı "değerler" dir ve sabit kapasite sırt çantanızı mümkün olduğunca çok değerle doldurmak istersiniz.

valueweightkk0N

1k1p[0,1]k

İşte bir python örneği:

import numpy as np
from itertools import combinations, chain
import matplotlib.pyplot as plt
np.random.seed(1)
n_obs = 1000
n = 10

# generate clusters as indices of tree leaves
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_predict
X, target = make_classification(n_samples=n_obs)
raw_clusters = DecisionTreeClassifier(max_leaf_nodes=n).fit(X, target).apply(X)
recoding = {x:i for i, x in enumerate(np.unique(raw_clusters))}
clusters = np.array([recoding[x] for x in raw_clusters])

def powerset(xs):
    """ Get set of all subsets """
    return chain.from_iterable(combinations(xs,n) for n in range(len(xs)+1))

def subset_to_metrics(subset, clusters, target):
    """ Calculate TPR and FPR for a subset of clusters """
    prediction = np.zeros(n_obs)
    prediction[np.isin(clusters, subset)] = 1
    tpr = sum(target*prediction) / sum(target) if sum(target) > 0 else 1
    fpr = sum((1-target)*prediction) / sum(1-target) if sum(1-target) > 0 else 1
    return fpr, tpr

# evaluate all subsets
all_tpr = []
all_fpr = []
for subset in powerset(range(n)):
    tpr, fpr = subset_to_metrics(subset, clusters, target)
    all_tpr.append(tpr)
    all_fpr.append(fpr)

# evaluate only the upper bound, using knapsack greedy solution
ratios = [target[clusters==i].mean() for i in range(n)]
order = np.argsort(ratios)[::-1]
new_tpr = []
new_fpr = []
for i in range(n):
    subset = order[0:(i+1)]
    tpr, fpr = subset_to_metrics(subset, clusters, target)
    new_tpr.append(tpr)
    new_fpr.append(fpr)

plt.figure(figsize=(5,5))
plt.scatter(all_tpr, all_fpr, s=3)
plt.plot(new_tpr, new_fpr, c='red', lw=1)
plt.xlabel('TPR')
plt.ylabel('FPR')
plt.title('All and Pareto-optimal subsets')
plt.show();

Bu kod sizin için güzel bir resim çizecektir:

TPR, FPR ve optimal eğri

210

Ve şimdi biraz tuz: alt kümeleri hiç rahatsız etmenize gerek yoktu ! Yaptığım şey, ağaç yapraklarını her birindeki pozitif örneklerin oranına göre sıralamak. Ama elimde tam olarak ağacın olasılık tahmini için ROC eğrisi var. Bu, eğitim setindeki hedef frekanslara göre yapraklarını elle toplayarak ağaçtan daha iyi performans gösteremeyeceğiniz anlamına gelir.

Rahatlayabilir ve sıradan olasılık tahmini kullanmaya devam edebilirsiniz :)


İyi fikir. Teoride hala katlanarak çok sayıda “pozitif çağrı” olabilir, ancak pratikte bu muhtemelen bir problem değildir.
Valentas

Neden üstel çağrı sayısı? Her küme için değer / ağırlık hesaplar (doğrusal zaman alır), sıralar (N * log (N)) ve her bir ilk K kümesi için TPR ve FPR değerlerini değerlendiririm (doğrusal da yapılabilir).
David Dale

Olumlu tahminlerin olası her değeri için sırt çantasını çözersiniz ve üstel sayıda alt küme vardır. Ancak, dışbükey gövdenin içindeki noktaları ilginç bir şekilde soruyorsanız, bu teorik bir tekniktir - ki bu ilginç değildir - bu kabul edilen cevap olmalıdır.
Valentas

@Valentas, tamam, anlıyorum. Ancak yine de, bazı yapraklarda rastgele tahmin verirseniz, dışbükey gövdenin herhangi bir noktasına ulaşabilirsiniz. Yani bu durumda gövde ROC'nin kendisidir.
David Dale

@DavidDale, özetlemek gerekirse: 1) (Hassasiyet, PPV) açısından en uygun olan her strateji, bu pozitif tahmin sayısıyla stratejiler arasındaki gerçek pozitiflerin sayısını en üst düzeye çıkarır. 2) Bu sırt çantası sorunu. 3) Düğümlerin pozitif örnek sayısı / örnek sayısına göre sıralanmasının sırt çantası sorununa iyi bir yaklaşık çözüm olduğu bilinmektedir. 4) Ama bu olasılıklar üzerinde bir eşik seçmekle aynı.
Josh Brown Kramer

0

Açgözlü bir yöntem kullanmanızı öneririm. Başlamak için bir sınıflandırıcı verin, topluluğun en iyi performans iyileştirmesini elde etmesini sağlayan sınıflandırıcıyı dahil edeceksiniz. Daha fazla sınıflandırıcı dahil etmek için herhangi bir gelişme sağlanamazsa, durun. Her sınıflandırıcı ile başlayacaksınız. Karmaşıklık en fazla N * N olacaktır.

Bir sorum daha var, özellikle bağlamınızda "Pareto optimal" ile ne demek istiyorsun? Wiki'den bu açıklamayı buldum, https://en.wikipedia.org/wiki/Pareto_efficiency

yeniden tahsis yoluyla, herhangi bir katılımcının refahını azaltmadan en az bir katılımcının refahında iyileştirmeler yapılabilir.

Pareto verimliliğindeki iyileşme, her bir sınıflandırıcıya karşılık gelebilecek her katılımcı içindir. Bir sınıflandırıcı üzerindeki gelişmeyi nasıl tanımlarsınız?


1
Demek istediğim şu: sırasıyla 1 (2) duyarlılık (pozitif, pozitif tahmin değeri) = (.90, .80) ve (.97, .93) olan topluluklarım varsa, 1 Pareto optimal değildir, çünkü onu her şekilde yenen başka bir topluluk, yani 2. Önerilen algoritmanızla ilgili olarak: hassasiyet ve PPV arasında bir denge vardır, bu nedenle "topluluk en iyi performans gelişimini elde eder" iyi tanımlanmamıştır.
Josh Brown Kramer
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.