Düzeltme paketi kullanılarak belirli eşik değerleri için karışıklık matrisleri elde etmek mümkün müdür?


13

Bir lojistik regresyon modeli (yoluyla elde ettik trainbir ikili yanıt için), ve ile lojistik karışıklık matrisi elde ettik confusionMatrixiçinde caret. Bana lojistik modeli karışıklık matrisi veriyor, ancak bunu elde etmek için hangi eşiğin kullanıldığından emin değilim. Nasıl kullanarak belirli eşik değerleri için karışıklık matrisi elde do confusionMatrixin caret?


Cevabım yok, ancak genellikle böyle sorular yardım dosyasında cevaplanıyor. Bu başarısız olursa, kaynak kodun kendisine bakabilirsiniz. confusionmatrixParantez olmadan yazarak kaynağı konsola yazdırabilirsiniz .
shadowtalker

Tam olarak ne yaptığını net değil. glmFonksiyonu statspaketten çağırıp sonucunu verdiniz confusionMatrixmi? Birinin bunu yapabileceğini bilmiyordum ve kılavuzu okumak hiç kimsenin yapabileceği açık değil. Yoksa bir predictşey mi yaptın ? Kısa bir örnek yardımcı olacaktır.
Calimo

1
@Calimo trainFonksiyonu caretmodele uyacak şekilde kullandım, bu da binom ailesi ile bir glm olarak belirtmeme izin veriyor. Sonra predictüzerinden oluşturulan nesne üzerinde işlevi kullandım train.
Kara Süt

Yanıtlar:


11

R'deki çoğu sınıflandırma modeli hem bir sınıf tahmini hem de her sınıf için olasılıklar üretir. İkili veriler için, hemen hemen her durumda, sınıf tahmini% 50 olasılık kesimine dayanır.

glmaynı. İle caret, kullanmak predict(object, newdata)size tahmini sınıfı verir ve predict(object, new data, type = "prob")sınıfa özgü olasılıkları verir (ne zaman objectüretilir train).

Kendi modelinizi tanımlayarak ve istediğiniz her kesmeyi uygulayarak işleri farklı şekilde yapabilirsiniz . caret Web sitesi ayrıca sahip örnek olasılık cutoff optimize etmek yeniden örnekleme kullanır.

tl; Dr.

confusionMatrix tahmin edilen sınıfları ve dolayısıyla% 50 olasılık kesimini kullanır

maksimum


14

Varsaymak oldukça kolay bir yol var tune <- train(...):

probsTest <- predict(tune, test, type = "prob")
threshold <- 0.5
pred      <- factor( ifelse(probsTest[, "yes"] > threshold, "yes", "no") )
pred      <- relevel(pred, "yes")   # you may or may not need this; I did
confusionMatrix(pred, test$response)

Açıkçası, denemek istediğiniz şeye eşik ayarlayabilir veya "en iyi" olanı seçebilirsiniz;

library(pROC)
probsTrain <- predict(tune, train, type = "prob")
rocCurve   <- roc(response = train$response,
                      predictor = probsTrain[, "yes"],
                      levels = rev(levels(train$response)))
plot(rocCurve, print.thres = "best")

Max'in yayınladığı örneğe baktıktan sonra, yaklaşımımı daha az istenen hale getiren bazı istatistiksel nüanslar olup olmadığından emin değilim.


Çıktı yapılan rocCurve grafiğinde, üç değer ne anlama geliyor? Örneğin verilerimde 0.289 (0.853, 0.831) yazıyor. 0.289 ikili sonucun sınırlandırılmasında kullanılması gereken en iyi eşiği belirtir mi? yani öngörülen olasılığı> 0.289 olan her durum "1" olarak kodlanır ve öngörülen olasılığı <0.289 olan her durum, caretpaketin 0,5 varsayılan eşiği yerine "0" olarak kodlanır mı?
coip

2
Evet bu tam olarak doğru ve parantez içindeki diğer 2 değer duyarlılık ve özgüllük (dürüst olmakla birlikte, hangisi olduğunu unutma)
efh0888

2
Ayrıca, o zamandan beri roc eğrisinden çıkarabileceğinizi anladım, bu rocCurve$thresholds[which(rocCurve$sensitivities + rocCurve$specificities == max(rocCurve$sensitivities + rocCurve$specificities))]da isterseniz onları farklı şekilde ağırlıklandırma esnekliği verir ... not edilmesi gereken son şey, gerçekçi bir şekilde, muhtemelen eşiği ayarlamak istediğinizdir. Max açıklar gibi) herhangi bir model hyperparameter yaptığınız burada .
efh0888
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.