Lojistik regresyona dayalı bir modelin ölçüm doğruluğu


26

Test veri setine uyguladığım eğitimli bir lojistik regresyon modelim var. Bağımlı değişken ikilidir (boolean). Test veri setindeki her numune için, bağımlı değişkenlerin gerçek olacağı ihtimalini% oluşturmak için lojistik regresyon modelini uyguluyorum. Sonra acutal değerinin doğru veya yanlış olduğunu kaydederim. Doğrusal bir regresyon modelinde olduğu gibi bir veya Düzeltilmiş figürü hesaplamaya çalışıyorum .R 2R2R2

Bu bana test setindeki her numune için bir kayıt veriyor:

prob_value_is_true         acutal_value
   .34                          0
   .45                          1
   .11                          0
   .84                          0
    ....                        ....          

Modelin doğruluğunu nasıl test edeceğimi merak ediyorum. İlk denemem bir beklenmedik durum tablosu kullanmak ve " prob_value_is_true>> 0,80 ise, gerçek değerin doğru olduğunu tahmin et " diyip doğru sınıflandırma oranının doğru olduğunu ölçmekti. Fakat bundan hoşlanmıyorum, çünkü modelin bir bütün olarak ve her prob_value_is_truedeğerdeki doğruluğunu değil, sadece 0.80'i bir sınır olarak değerlendiriyorum .

Sonra, her prob_value_is_true ayrık değerine sadece bir örnek olarak bakmaya çalıştım, örnek olarak tüm örneklere baktım ve prob_value_is_true= 0.34 ve akutal değerin doğru olduğu bu örneklerin yüzdesini ölçtüm (bu durumda, mükemmel doğruluk örneklerin yüzdesiyse olacaktır) bu doğruydu =% 34). Her bir ayrık değerdeki farkı toplayarak bir model doğruluk puanı oluşturabilirim prob_value_is_true. Ancak, örnek boyutları burada, özellikle aşırı uçlar için (% 0 veya% 100'e yakın), akutal değerlerin ortalamalarının doğru olmadığı ve bu nedenle model doğruluğunu ölçmek için bunları kullanmanın doğru olmadığı için büyük bir endişe kaynağıdır.

Yeterli örneklem büyüklükleri (0-.25, .25-.50, .50-.75, .75-1.0) sağlamak için büyük aralıklar oluşturmayı bile denedim, ancak gerçek değerin% 'sinin “iyiliğini” nasıl ölçeceğim . prob_value_is_true0.25 ile 0.50 arasındaki tüm örneklerin ortalama acutal_value0.45 olduğunu söyleyin . Menzilde olduğundan bu iyi mi? % 37.5'e yakın olmadığı için kötüdür (aralığın merkezi)?

Bu yüzden, kolay bir soru olması gereken gibi göründüğüme şaşırdım ve birisinin bir lojistik regresyon modeli için bir statiklik doğruluğu hesaplamak için beni bir kaynak veya yönteme yönlendirmesini umuyorum.


Aralıkları örnek düşünüyorum: (0-.25, .25-.50, .50-.75, .75-1.0) mantıklı. Aralıkları daraltırsanız yardımcı olur musunuz? Mesela: 0, 0, 0,0, 0,06, 0,06, 0,06-0,09, ..... her 0,03. Bu, birçok veri noktasına sahip bölgeler için faydalı olabilir.
mac,

Yanıtlar:


18

Lojistik gerilemeyi onaylamak için sıklıkla kullanılan bir ölçü ROC eğrisinin AUC'sidir (1 özgüllüğe karşı duyarlılık arsası - sadece şartlar için google). Bu, özünde, tüm eşik değer aralığını değerlendirir.

Üzerinde olumsuz: eşik değerlerin tüm aralık olabilir değerlendirerek değil bu (genellikle) eşiklerini içerdiği için, ne sonra konum yanlış negatifler veya yanlış pozitif çok büyük sayılarda sonucu olduğunu. Bunu hesaba katan AUC versiyonları var (kısmi AUC), eğer bu sizin için bir sorunsa, bunu inceleyebilirsiniz.


1
Bir an için AUC'yi bir kenara koyduğumda, ROC Eğrisi'nin yapımının böyle bir şey olduğunu varsaymakta haklı mıyım? Prob_value_is_true öğesinin her bir ayrık değeri için, ayrık değeri eşik olarak kullanarak bir beklenmedik durum tablosu oluşturun. Sonra her beklenmedik durum tablosunun Gerçek Olumlu Oranını ve Yanlış Olumlu Oranını kaydedin. Bir dağılım grafiğindeki tüm olasılık tablolarının oranlarını çizin ve ROC eğrisini görmelisiniz? Bu doğru mu?
John Reed

Bunu yapmak için bazı kodları bir araya getirdim, sadece olasılık ve gerçek değer olarak rastgele değerleri besledim ve düz bir çizgiydi. AUC'nin “eğri” nin takılı bir modelden “çizgi” veya rastgelelik yerine sapmasını ölçtüğünü varsayıyorum?
John Reed

ROC ile ilgili olarak: evet, bu doğru. Bazı değişkenler vardır (az ya da çok düzeltilmiş; eşik seçiminiz için öngörülen olasılıklar dikkate alınarak). (Kullanılan yazılıma / tercih ettiğiniz dile bağlı olarak), bunu zaten sağlayan sayısız araç olduğunu unutmayın. Wrt AUC: ROC eğrisi altındaki gerçek alandan az veya çok değildir. Mükemmel bir rastgele tahminciyle değil, ROC eğrisi (0,0) ila (1,1) arasında düz bir çizgi olacak ve 0,5 AUC ile sonuçlanacaktır. AUC'nin bazı güzel yorumları var, (bkz. Google veya Wikipedia bile :-))
Nick Sabbe 11:11

8

clowessval.probrmsrms Aşırı uydurma etkilerini kaldırmak için yeniden örnekleme kullanarak, iç doğrulama için de aynısını yapacağız.


6

xx=10x=20x=30mean(y[x==10]==1)mean(y[x==20]==1)xDeğişken, önerdiğiniz gibi. Bu, tam olarak geçerli değildir, çünkü çöp seçimine bağlı olacaktır, modelinizi keşfetmenin bir yolu olarak yararlı olabilir.

Genel olarak, burada kendinize verdiğiniz görev zordur. Çünkü lojistik regresyonda iki farklı şeyle uğraşıyorsunuz. Modelin tahminleri gizli bir değişkendir, oysa gözlenen tepki değişkeniniz (muhtemelen gizli bir değişken tarafından oluşturulmuş olsa da) değildir. Tabii ki, insanlar genellikle öngörülen yanıtın ne olduğunu bilmek isteyeceklerdir ve bu tamamen makul; bu, hayatın adil olmadığı durumlardan sadece bir tanesi.

y=1y^.5y=1y^p(y=1)y^=0,31y1<.5

(0,1)R,2R,2c


Mükemmel cevap! Öyleyse, tüm vakaların% 30'unun 1 olduğu örnekte, belirli bir vakanın öngörülen olasılığı 0.31, bu vakanın 1'e ne kadar yakın olduğuna ilişkin diğer davalara göre "sıralaması" gibidir. Ve bu özel davanın 1 olması öngörülen olasılık olarak görülmemeli?
mac,

1
y^ben=0,3110,310,310,25

3

Bir eşik belirleyebileceğinizi (0,5 diyelim) düşünüyorum, bu nedenle olasılığınız eşik değere eşit veya daha büyük olduğunda, öngörülen sınıfınız 1 veya 0 olacaktır. Ardından, bu şekilde doğruluğunuzun bir ölçüsünü alabilirsiniz:

confusion_matrix <- ftable(actual_value, predicted_value)
accuracy <- sum(diag(confusion_matrix))/number of events*100

Olasılığınızın verilerinizi verme olasılığı (x) ve modelinizi kullanarak sınıf değeriniz (y) 1'e eşit olduğu göz önüne alındığında, neden her zaman 0,5'ten düşük olasılık değerleri elde ettiğinizi anlamıyorum. Gerçek sınıflarınızın sıklığı nedir (actual_value)?


2

softclassvalPaketime bakmak isteyebilirsiniz (softclassval.r-forge.r-project.org adresinde ayrıca paketin arkasındaki fikirler hakkında verdiğim iki sözlü sunum da bulabilirsiniz).

Biraz farklı bir problem için yazdım, örneğin referans (örneğin patolog) açık bir sınıf vermeyi "reddederse". Bununla birlikte, onu "normal" sert sınıflarla kullanabilirsiniz ve başlangıçta sürekli öngörmeyi sertleştirmek için eşik tanımından kaçınır - bu yüzden 0.8'i değerlendirmezsiniz.

Bununla birlikte, bir ROC veya özgüllük-duyarlılık şemasının yanı sıra kullanılmasını tavsiye ederim: “benim” yöntemlerinin zaten hafif sapmaları cezalandırması nedeniyle sonuçlar genellikle oldukça kötü görünecektir (örneğin 1 yerine 0,9 ölçümlerim için 0.1 fark verir) , ancak 0,9'un altındaki tüm eşikler bunu görmezden gelecektir). Aslında bence oldukça bir avantaj: bu hassasiyetin agaist küçük sapmaların olmaması, doğruluk, hassasiyet, hatırlama vb. Gibi “sertleşmiş” önlemlerle eleştirinin ana noktalarından biri.

Ek olarak, ortalama mutlak hata (MAE) ve kök ortalama kare hatası RMSE'yi karşılaştırarak, çok küçük sapmaların mı yoksa çok az yanlış hesaplanmış numunelerin mi olduğunu öğrenebilirsiniz.


1

Prben=bennvlOgbent(bir+bxben)

y.rep[ben]~BernOullben(p[ben])

Ardından, bu simülasyonu 100 kez çalıştırın. N satırlı (n, konu sayısı) ve k sütunu (bu durumda, k = 100, simülasyon sayısı) olan bir matrisiniz olacaktır. R kodunda:

for (j  in 1:100)
  mat.y.rep[,j] <- Bernoulli ( p) # p is a vector with a probability for each subject

Şimdi her simülasyonda öngörülen ile gözlemlenen arasındaki farkı hesaplıyorsunuz. Bu farkı hesapladıktan sonra, her satır için (her konu için) ortalama gerçek pozitif ve yanlış pozitif ortalama sayısını hesaplayın ve histogramı çizin. Veya her sütun için her ikisini de hesaplayın (simülasyon) e histogramı çizin (bunu tercih ederim).

Umarım yardımcı olur...


1

Bu tür tahminlerin doğruluğunu tahmin etmenin birçok yolu vardır ve optimal seçim gerçekten tahminin ne için uygulanacağına bağlıdır.

Örneğin, pahalı bir takip çalışması için birkaç yüksek puan vuruşu seçmeyi planlıyorsanız, kesinliği yüksek puanlarda en üst düzeye çıkarmak isteyebilirsiniz. Diğer taraftan, takip çalışması ucuzsa, geri çağırma (duyarlılığı) daha düşük puanlarla en üst düzeye çıkarmak isteyebilirsiniz. ROC AUC farklı yöntemler vs. karşılaştırıyorsanız uygun olabilir.

Pratik açıdan, R'in ROCRpaket 2 yararlı fonksiyonlar içermektedir

pred.obj <- prediction(predictions, labels,...)
performance(pred.obj, measure, ...)

Birlikte, bu işlevler, küresel skaler değerleri ( "auc" gibi ) ve Geri Çağırma hassasiyetli ve ROC eğrilerini ( "prec" , "rec" , "tpr" ve "tpr") çizmek için skora bağlı vektörler de dahil olmak üzere çok çeşitli doğruluk ölçümlerini hesaplayabilir. "fpr" , vb.)


1

Ne demek istediğinizi "doğruluk" ile tanımlamanız gerekir. Bilmek istediğiniz, lütfen kelimeleri ağzınıza soktuğum için affedin, modelinizin eğitim verilerine ne kadar iyi uyduğu ve daha da önemlisi, bu modelin eğitim verilerinizde olmayan örneklere ne kadar iyi "genelleştirildiği". ROC eğrileri, eşiğin çeşitli değerleri için hassasiyet ve geri çağırma arasındaki tradeoflasyonu analiz etmede faydalı olsa da, araç kutunuza ortalama kare hata veya Brier puanı eklemenizi öneririm. Hesaplaması kolaydır ve eğitim verilerine uygulandığında özellik değişikliklerinin modelin uygunluğunu etkileyip etkilemediği konusunda hemen bir fikir edinebilirsiniz. Kıyafet bu durumda mümkün olduğundan, işiniz burada yapılmadı. Genelleme performansını veya daha önce görmediğiniz verilerde ne kadar iyi yaptığınızı değerlendirmek t Eğitim numunelerindeki performansınıza bakacak kadar. Tabi ki modeliniz bu işte iyidir, çünkü bunlar lojistik için katsayıları belirlemek için kullandığınız değerler. Test verileri için bazı örnekleri bir kenara koymanız gerekir. Bu setteki MSE performansınız genelleme beklentilerinizi Hoeffding eşitsizliğine göre belirlemelidir. Maksimum genelleme hatanız, modelinizdeki özelliklerin sayısına ve test istatistiklerini hesaplamak için kullanılan örneklerin sayısına bağlı olacaktır. Test örnekleri için bazı eğitim örneklerini çalmanız gerekeceğini unutmayın. Karıştırdığınız, antrenman için% 90, test için% 10 ve ardından tüm ölçümleri ölçün, tekrarlayın ve ardından ortalamanın üzerinde 10 kat çapraz doğrulama önerilir. çünkü bunlar, lojistik için katsayıları belirlemek için kullandığınız değerlerdir. Test verileri için bazı örnekleri bir kenara koymanız gerekir. Bu setteki MSE performansınız genelleme beklentilerinizi Hoeffding eşitsizliğine göre belirlemelidir. Maksimum genelleme hatanız, modelinizdeki özelliklerin sayısına ve test istatistiklerini hesaplamak için kullanılan örneklerin sayısına bağlı olacaktır. Test örnekleri için bazı eğitim örneklerini çalmanız gerekeceğini unutmayın. Karıştırdığınız, antrenman için% 90, test için% 10 ve ardından tüm ölçümleri ölçün, tekrarlayın ve ardından ortalamanın üzerinde 10 kat çapraz doğrulama önerilir. çünkü bunlar, lojistik için katsayıları belirlemek için kullandığınız değerlerdir. Test verileri için bazı örnekleri bir kenara koymanız gerekir. Bu setteki MSE performansınız genelleme beklentilerinizi Hoeffding eşitsizliğine göre belirlemelidir. Maksimum genelleme hatanız, modelinizdeki özelliklerin sayısına ve test istatistiklerini hesaplamak için kullanılan örneklerin sayısına bağlı olacaktır. Test örnekleri için bazı eğitim örneklerini çalmanız gerekeceğini unutmayın. Karıştırdığınız, antrenman için% 90, test için% 10 ve ardından tüm ölçümleri ölçün, tekrarlayın ve ardından ortalamanın üzerinde 10 kat çapraz doğrulama önerilir. Bu setteki MSE performansınız genelleme beklentilerinizi Hoeffding eşitsizliğine göre belirlemelidir. Maksimum genelleme hatanız, modelinizdeki özelliklerin sayısına ve test istatistiklerini hesaplamak için kullanılan örneklerin sayısına bağlı olacaktır. Test örnekleri için bazı eğitim örneklerini çalmanız gerekeceğini unutmayın. Karıştırdığınız, antrenman için% 90, test için% 10 ve ardından tüm ölçümleri ölçün, tekrarlayın ve ardından ortalamanın üzerinde 10 kat çapraz doğrulama önerilir. Bu setteki MSE performansınız genelleme beklentilerinizi Hoeffding eşitsizliğine göre belirlemelidir. Maksimum genelleme hatanız, modelinizdeki özelliklerin sayısına ve test istatistiklerini hesaplamak için kullanılan örneklerin sayısına bağlı olacaktır. Test örnekleri için bazı eğitim örneklerini çalmanız gerekeceğini unutmayın. Karıştırdığınız, antrenman için% 90, test için% 10 ve ardından tüm ölçümleri ölçün, tekrarlayın ve ardından ortalamanın üzerinde 10 kat çapraz doğrulama önerilir.


1

0-günlük(1-p^)01-günlük(p^)1

Bu keyfi eşiklerden muzdarip değildir. Ölçü ne kadar küçük olursa o kadar iyidir.

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.