R caret ve NA'lar


26

Parametre ayarlama kabiliyeti ve homojen arayüzü için şapkayı çok tercih ederim, ancak uygulanan "çıplak" model NA'lara izin verse bile her zaman tam veri setleri gerektirdiğini gözlemledim (NA'sız). Bu çok zahmetlidir, bunun için ilk başta gerekli olmayan çalışma yöntemlerini uygulamalısınız. Biri imparatorluğu nasıl ortadan kaldırabilir ve hala caret avantajlarını kullanabilir?


3
Her zaman eksik değerlerle bir şeyler yapmalısın . Sorunuzu gerçekten anlamadığımı söylemeliyim - tek bedene uygun bir yaklaşım mı arıyorsunuz? NA'ları yerleştirmek istemiyorsanız, onlarla ne yapmak istiyorsunuz? Sil?
Tim

1
NA'ları orada bırakmak ve NA'larla başa çıkmak için modele bırakmak istiyorum. Örneğin, C50'de bir C5.0 işlevi ile yaparsam, örneğin NA'ların kendisiyle başa çıkabilir, ancak bu durumda şapka kullanamıyorum, çünkü cetvelin tren işlevi C5'i kullanmak istediğimde bile veri setlerinde NA yok. Yukarıda belirtilen C50'nin 0 işlevi.
Fredrik

3
Ancak "model" ne yapar, ya sizi daha küçük örneklemle bırakarak bu verileri yok sayar (siler); bu değerleri tahmin eder (uygular); veya “NA” kategorisini öngörmektedir (örneğin, bazı ağaç tabanlı modellerde). "Modelinizin" başka ne yapmasını istersiniz? Bazı yazılımlar bu işleri sizin için otomatik olarak yapar, ancak kahve makinenizin size "varsayılan" kahve verdiğini hayal edin ... Bazı yazılımlar "varsayılan kahve" yi NA'ların dışında yapar, ancak elde edebileceğiniz en iyi şey değildir.
Tim

3
Balenin NA'lara izin vermediğinden emin misin? NA'yı tren yardım sayfasındaki varsayılan örnekle ve C5.0 train yöntemi ile gayet iyi çalıştığını anlatmaya çalıştım. Rastgele ormanla başarısız oldu.
mpiktas

Yanıtlar:


32

Caret'teki train işlevine, na.action = na.pass parametresini iletebilir ve ön işleme tabi tutmazsınız (preProcess belirtmeyin, varsayılan NULL değeri olarak bırakın). Bu, doğrudan tahmin işlevine değiştirilmemiş NA değerlerini iletecektir (bu, tahmin işlevini çağırmadan önce eksik değerleri etkilemek için ön işlemi belirtmeniz gerekecek olanlar için, eksik değerleri desteklemeyen tahmin işlevlerinin bozulmasına neden olur). Örneğin:

train(formula,
      dataset,
      method = "C5.0",
      na.action = na.pass)

Bu durumda, C5.0 eksik değerleri kendi kendine halledecektir.


1
Bu enteresan bir tartışma. NA'yı kategorik bir tahminciye başka bir seviye olarak eklemenin zorluğu nedir? Eğer NA'lar modellenemezse ya da empoze edilemezse, yani bir devamsızlığın varlığı aslında bilgilendiricidir, basitçe NA'yı ek bir seviye yapmanın bir anlamı olur mu?
Seanosapien

Eğer biri x kullanıyorsa, seçenek setine trainsahip olmanın y na.action = na.passözelliği aşağıdaki hataya neden olur:Something is wrong; all the RMSE metric values are missing
user29609

3

NA'ları yeniden kodlamayı denedin mi? Verileriniz dışında> 3 standart sapma olan bir şey (örn. -12345) NA5'lerde olduğu gibi C5.0'ı ayrı ayrı tahmin etmelerini teşvik etmelidir.


2

Bence çözümünüz, predict () işlevini kullanırken değerleri etkilemek olacaktır .

Daha ?predict.trainfazla ayrıntı için bakınız.

Sen kullanabilirsiniz na.omitatfetmek değerlerine çıkıntı işareti izin vermek. Örneğin:

    ## S3 method for class 'train':
    predict((object, newdata = NULL, type = "raw", na.action = na.omit, ...)

dan http://www.inside-r.org/packages/cran/caret/docs/predict.train

Başka bir çözüm , verileri ön işleme koyarken uygulamaktır :

    ## S3 method for class 'default':
    preProcess(x, 
       method = "knnImpute",   # or *bagImpute* / *medianImpute*
       pcaComp = 10,
       na.remove = TRUE,
       k = 5,
       knnSummary = mean,
       outcome = NULL,
       fudge = .2,
       numUnique = 3,
       verbose = TRUE,
       )

dan http://www.inside-r.org/node/86978

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.