Bu kısmen @Sashikanth Dareddy'nin (bir yoruma uymayacağından dolayı) bir yanıtı ve kısmen de orijinal yazıya verilen bir cevaptır.
Bir tahmin aralığının ne olduğunu hatırlayın, gelecekteki gözlemlerin yatacağını tahmin ettiğimiz bir aralık ya da değerler kümesidir. Genel olarak tahmin aralığı, genişliğini belirleyen 2 ana parçaya, tahmin edilen ortalama (veya diğer parametrelere) ilişkin belirsizliği temsil eden bir parçaya, bu da güven aralığı kısmıdır ve bu ortalama etrafındaki bireysel gözlemlerin değişkenliğini temsil eden bir parçaya sahiptir. Güven aralığı, Merkezi Limit Teoreminden dolayı peri sağlamdır ve rastgele bir orman durumunda, bootstrapping da yardımcı olur. Ancak tahmin aralığı, tahmin değişkenleri, CLT ve bootstrapping işlemlerinin bu kısım üzerinde hiçbir etkisi olmadığından verinin nasıl dağıtıldığı konusundaki varsayımlara tamamen bağlıdır.
Tahmin aralığı, ilgili güven aralığının da geniş olacağı yerlerde daha geniş olmalıdır. Tahmin aralığının genişliğini etkileyebilecek diğer şeyler, eşit sapma ya da olmama hakkındaki varsayımlardır, bunun rasgele orman modeli değil araştırmacının bilgisinden gelmesi gerekir.
Bir tahmin aralığı, kategorik bir sonuç için bir anlam ifade etmemektedir (bir aralık yerine bir tahmin seti yapabilirdiniz, ancak çoğu zaman muhtemelen çok bilgilendirici olmaz).
Gerçeği bildiğimiz verileri simüle ederek tahmin aralıkları ile ilgili bazı sorunları görebiliriz. Aşağıdaki verileri göz önünde bulundurun:
set.seed(1)
x1 <- rep(0:1, each=500)
x2 <- rep(0:1, each=250, length=1000)
y <- 10 + 5*x1 + 10*x2 - 3*x1*x2 + rnorm(1000)
Bu özel veri doğrusal regresyon varsayımlarını takip eder ve rastgele bir orman oturumu için oldukça yalındır. Her iki tahminci de 0 olduğunda ortalamanın 10 olduğunu belirten "doğru" modelden biliyoruz, bireysel noktaların 1 standart sapma ile normal bir dağılım izlediğini de biliyoruz. bu noktalar 8'den 12'ye kadar olacaktır (aslında 8.04'den 11.96'ya, ancak yuvarlama daha basit tutar). Tahmini herhangi bir tahmin aralığı bundan daha geniş olmalıdır (mükemmel bilgiye sahip olmamak telafi etmek için genişlik ekler) ve bu aralığı içermelidir.
Regresyondaki aralıklara bakalım:
fit1 <- lm(y ~ x1 * x2)
newdat <- expand.grid(x1=0:1, x2=0:1)
(pred.lm.ci <- predict(fit1, newdat, interval='confidence'))
# fit lwr upr
# 1 10.02217 9.893664 10.15067
# 2 14.90927 14.780765 15.03778
# 3 20.02312 19.894613 20.15162
# 4 21.99885 21.870343 22.12735
(pred.lm.pi <- predict(fit1, newdat, interval='prediction'))
# fit lwr upr
# 1 10.02217 7.98626 12.05808
# 2 14.90927 12.87336 16.94518
# 3 20.02312 17.98721 22.05903
# 4 21.99885 19.96294 24.03476
Tahmini ortalamada bazı belirsizliklerin olduğunu görüyoruz (güven aralığı) ve bize 8 ila 12 aralığında daha geniş (ancak dahil) bir tahmin aralığı veriyor.
Şimdi tek tek ağaçların bireysel tahminlerine dayanan aralığa bakalım (rastgele orman, lineer regresyonun (bu veriler için doğru olduğunu bildiğimiz)) varsayımlarından faydalanmadığından daha geniş olmasını beklemeliyiz:
library(randomForest)
fit2 <- randomForest(y ~ x1 + x2, ntree=1001)
pred.rf <- predict(fit2, newdat, predict.all=TRUE)
pred.rf.int <- apply(pred.rf$individual, 1, function(x) {
c(mean(x) + c(-1, 1) * sd(x),
quantile(x, c(0.025, 0.975)))
})
t(pred.rf.int)
# 2.5% 97.5%
# 1 9.785533 13.88629 9.920507 15.28662
# 2 13.017484 17.22297 12.330821 18.65796
# 3 16.764298 21.40525 14.749296 21.09071
# 4 19.494116 22.33632 18.245580 22.09904
Aralıklar, regresyon tahmin aralıklarından daha geniştir, ancak tüm aralığı kapsamaz. Gerçek değerleri içerirler ve bu nedenle güven aralıkları olarak meşru olabilirler, ancak yalnızca ortalamanın (öngörülen değer) olduğu yerde tahmin ederler, bu ortalamanın etrafındaki dağılım için ilave bir parça yoktur. X1 ve x2'nin her ikisinin de 0 olduğu ilk durumda, aralıklar 9.7'nin altına düşmez, bu, 8'e giden gerçek tahmin aralığından çok farklıdır. Yeni veri noktaları oluşturursak, o zaman birkaç nokta olacaktır (çok daha fazlası). % 5'ten daha fazla) bunlar doğru ve regresyon aralıklarındadır, ancak rasgele orman aralıklarına girmezler.
Bir tahmin aralığı oluşturmak için, bireysel noktaların öngörülen araçların etrafındaki dağılımı hakkında bazı güçlü varsayımlar yapmanız gerekecek, o zaman tahminleri tek tek ağaçlardan (önyüklenmiş güven aralığı parçası) alabilir ve ardından varsayılandan rastgele bir değer oluşturabilirsiniz. o merkeze göre dağılım. Üretilen parçalar için miktarlar tahmin aralığını oluşturabilir (ancak yine de test ederim, işlemi birkaç kez daha tekrarlamanız ve birleştirmeniz gerekebilir).
Normal (normal kullanılan verilerin kullanıldığını bildiğimiz için) bu ağaçtan hesaplanan MSE'ye dayanan standart sapma ile yapılan tahminlere sapma ekleyerek bunu yapmanın bir örneği:
pred.rf.int2 <- sapply(1:4, function(i) {
tmp <- pred.rf$individual[i, ] + rnorm(1001, 0, sqrt(fit2$mse))
quantile(tmp, c(0.025, 0.975))
})
t(pred.rf.int2)
# 2.5% 97.5%
# [1,] 7.351609 17.31065
# [2,] 10.386273 20.23700
# [3,] 13.004428 23.55154
# [4,] 16.344504 24.35970
Bu aralıklar mükemmel bilgiye dayalı olanları içerir, bu nedenle makul görünün. Ancak, yapılan varsayımlara büyük ölçüde bağlı olacaklardır (varsayımlar burada geçerlidir çünkü verilerin nasıl simüle edildiğine dair bilgiyi kullandık, gerçek verilerde geçerli olmayabilirler). Bu yönteme tam olarak güvenmeden önce, gerçek verilerinize benzeyen veriler için birkaç kez tekrar ediyorum (ancak bu gerçeği bildiğiniz için simüle).
score
performansı değerlendirmek için bir tür işlevi vardır. Çıktı ormandaki ağaçların çoğunluğunun oyuna dayandığından, sınıflandırma durumunda bu sonucun oy dağılımına bağlı olarak doğru olma olasılığını verecektir. Gerileme hakkında emin değilim ama ... Hangi kütüphaneyi kullanıyorsunuz?