Bunun eski bir soru olduğunu fark ettim, ancak daha fazlasının eklenmesi gerektiğini düşünüyorum. @Manoel Galdino'nun yorumlarda dediği gibi, genellikle görünmeyen verilerle ilgili tahminlerle ilgileniyorsunuz. Ancak bu soru eğitim verilerindeki performansla ilgilidir ve soru rastgele orman neden eğitim verilerinde kötü performans gösteriyor ? Cevap, sık sık beni sıkıntıya sokan torbalı sınıflandırıcılarla ilgili ilginç bir sorunu vurgulamaktadır: ortalamaya gerileme.
Sorun, veri kümenizden önyükleme örnekleri alarak yapılan rasgele orman gibi torbalı sınıflandırıcıların aşırı uçlarda kötü performans gösterme eğiliminde olmasıdır. Ekstremlerde çok fazla veri olmadığı için, düzelme eğilimi gösterirler.
Daha ayrıntılı olarak, gerileme için rastgele bir ormanın çok sayıda sınıflandırıcının öngörüsünün ortalaması olduğunu hatırlayın. Diğerlerinden uzak olan tek bir noktaya sahipseniz, sınıflandırıcıların çoğu bunu görmeyecek ve bunlar temelde çok iyi olmayabilir, örneklem dışı bir tahmin yapacaktır. Aslında, bu örnek dışı tahminler, veri noktası tahminini genel ortalamaya doğru çekme eğiliminde olacaktır.
Tek bir karar ağacı kullanırsanız, aşırı değerlerle aynı problemi yaşamazsınız, ancak uygun regresyon da çok doğrusal olmaz.
İşte R'de gösterilmiştir. Bazı veriler y
beş x
değişkenden oluşan mükemmel bir astar kombinasyonudur . Daha sonra doğrusal bir model ve rastgele bir ormanla tahminler yapılır. Ardından, y
eğitim verilerindeki değerler tahminlere karşı çizilir. Çok büyük ya da çok küçük değerleri olan veri noktalarının y
nadir olması nedeniyle rastgele ormanın aşırı uçlarda kötü bir şekilde çalıştığını açıkça görebilirsiniz .
Rastgele ormanlar regresyon için kullanıldığında, görünmeyen verilerle ilgili tahminler için aynı deseni göreceksiniz. Nasıl önleneceğini bilmiyorum. randomForest
R işlevi ham önyargı düzeltme seçeneği vardır corr.bias
önyargı üzerinde lineer regresyon kullanır, ama gerçekten işi yapmaz.
Önerilerinizi bekliyoruz!
beta <- runif(5)
x <- matrix(rnorm(500), nc=5)
y <- drop(x %*% beta)
dat <- data.frame(y=y, x1=x[,1], x2=x[,2], x3=x[,3], x4=x[,4], x5=x[,5])
model1 <- lm(y~., data=dat)
model2 <- randomForest(y ~., data=dat)
pred1 <- predict(model1 ,dat)
pred2 <- predict(model2 ,dat)
plot(y, pred1)
points(y, pred2, col="blue")