Gürültülü etiketlerle sınıflandırma?


14

Sınıflandırma için bir sinir ağı eğitmeye çalışıyorum, ancak sahip olduğum etiketler oldukça gürültülü (etiketlerin yaklaşık% 30'u yanlış).

Çapraz entropi kaybı gerçekten işe yarıyor, ama bu durumda daha etkili olan alternatifler olduğunu merak ediyordum. veya çapraz entropi kaybı optimal midir?

Emin değilim ama çapraz entropi kaybını "kırpma" düşünüyorum, böylece bir veri noktası kaybı bazı üst sınır daha büyük olmayacak, bu işe yarar?

Teşekkürler!

Güncelleme
Lucas'ın cevabına göre, tahmin çıktısı için türevler ve softmax fonksiyonunun z girişi için aşağıdakileri aldım . Yani aslında bir yumuşatma terimi ekliyor 3yzTürevlere 7 N. pi=0,3/N+0,7yil=-tigünlüğü(pi)l37N

pi=0.3/N+0.7yi
l=tilog(pi)
l
lyi=tilog(pi)pipiyi=0.7tipi=ti37N+yi
Orijinal çapraz entropi kaybı türevleri: l
lzi=0.7jtjpjyjzi=yijtjyj37N+yjtiyi37N+yi
l
lyi=tiyi
yanılıyorsam lütfen bize bildirin. Teşekkürler!
lzi=yiti

Güncelleme Google tarafından Lucas'ın yanıtıyla aynı formülü uygulayan ancak farklı yorumlara sahip bir makale
okudum .

Bölüm 7'de Etiket Düzeltme ile Model Düzenleme

l/zk

Ancak yumuşatma terimini tahminlere eklemek yerine, bunu gerçeğe eklediler , ki bu da yardımcı oldu.

resim açıklamasını buraya girin

ϵ


Yanıtlar:


10

Burada yapılacak doğru şey, kaybı değil modeli değiştirmek. Amacınız hala mümkün olduğunca çok veri noktasını doğru bir şekilde sınıflandırmaktır (bu, kaybı belirler), ancak verilerle ilgili varsayımlarınız değişmiştir (bu, istatistiksel bir modelde kodlanmıştır , bu durumda sinir ağı).

pt(yt,pt)yt

p~t=0.3/N+0.7pt

yerine ve optimize et

t(yt,0.3/N+0.7pt),

N


p~t0.3/N+0.7ptp~tProb(y~=+1|t)=0.7Prob(y=+1|t)+0.3Prob(y=1|t)Prob(y~=1|t)=0.7Prob(y=1|t)+0.3Prob(y=+1|t)1/N

0

Bunun bir istatistik forumu olduğunu ve beklentinin matematiksel türevlere odaklandığını biliyorum, ancak yardımcı olabilir ve Python kullanıyorsanız, gürültülü etiketlerle sınıflandırma için bir paket var cleanlab: https://github.com/ cgnorthcutt / cleanlab / .

cleanlabPython paketi pip install cleanlab, kendisi için ben bir yazarım, buluntular gürültülü etiketlerle öğrenme / veri kümeleri ve destekler sınıflandırma hataları etiketleyin. Scikit-learn, PyTorch, Tensorflow, FastText vb. İle çalışır.

Gürültülü etiketlerle öğrenmek için.

# Code taken from https://github.com/cgnorthcutt/cleanlab
from cleanlab.classification import LearningWithNoisyLabels
from sklearn.linear_model import LogisticRegression

# Learning with noisy labels in 3 lines of code.

# Wrap around any classifier. Works with sklearn/pyTorch/Tensorflow/FastText/etc.
lnl = LearningWithNoisyLabels(clf=LogisticRegression())
lnl.fit(X = X_train_data, s = train_noisy_labels)
# Estimate the predictions you would have gotten by training with *no* label errors.
predicted_test_labels = lnl.predict(X_test)

Veri kümenizdeki etiket hatalarını bulmak için.

from cleanlab.latent_estimation import estimate_cv_predicted_probabilities

# Find the indices of label errors in 2 lines of code.

probabilities = estimate_cv_predicted_probabilities(
    X_train_data, 
    train_noisy_labels, 
    clf=LogisticRegression(),
)
label_error_indices = get_noise_indices(
    s = train_noisy_labels, 
    psx = probabilities, 
)

FastText (NLP) ve PyTorch (MNIST AlexNet) ile ilgili bazı örnekler .

Belgeler: https://l7.curtisnorthcutt.com/cleanlab-python-package

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.