Daha "rastgele orman uygun" olan bir soruna uygulanan düzgün şekilde yürütülen rastgele bir orman, gürültüyü gidermek için bir filtre olarak çalışabilir ve sonuçları diğer analiz araçlarına girdi olarak daha faydalı hale getirebilir.
Feragatler:
- "Gümüş mermi" mi? Olmaz. Kilometre değişecektir. Başka yerlerde değil çalıştığı yerde çalışır.
- Fena halde yanlış bir şekilde kullanmanın ve önemsizden voodoo alanına giren cevapları almanın yolları var mı? youbetcha. Her analitik araç gibi, sınırları var.
- Kurbağa yalarsan, nefesin kurbağa gibi kokar mı? muhtemel. Orada deneyimim yok.
"Spider" yapan "peeps" e bir "haykırmak" vermeliyim. ( link ) Onların örnek problemi yaklaşımı bilgilendirdi. ( link ) Theil-Sen tahmin edicilerini de seviyorum ve Theil ve Sen'e sahne verebilmeyi diliyorum.
Benim cevabım nasıl yanlış anlaşılacağı ile ilgili değil, en doğru olanı yaptıysanız nasıl işe yarayacağı hakkında. "Önemsiz" gürültü kullanırken, "önemsiz" veya "yapılandırılmış" gürültü hakkında düşünmenizi istiyorum.
Rastgele bir ormanın güçlü yanlarından biri, yüksek boyutlu sorunlara ne kadar iyi uygulandığıdır. 20k sütunları (yani 20k boyutlu bir boşluk) temiz bir görsel şekilde gösteremiyorum. Bu kolay bir iş değildir. Bununla birlikte, 20k boyutlu bir probleminiz varsa, diğerlerinin çoğu "yüzlerinde" düştüklerinde rastgele bir orman orada iyi bir araç olabilir.
Bu, rastgele bir orman kullanarak sinyalden gelen gürültüyü gidermeye bir örnektir.
#housekeeping
rm(list=ls())
#library
library(randomForest)
#for reproducibility
set.seed(08012015)
#basic
n <- 1:2000
r <- 0.05*n +1
th <- n*(4*pi)/max(n)
#polar to cartesian
x1=r*cos(th)
y1=r*sin(th)
#add noise
x2 <- x1+0.1*r*runif(min = -1,max = 1,n=length(n))
y2 <- y1+0.1*r*runif(min = -1,max = 1,n=length(n))
#append salt and pepper
x3 <- runif(min = min(x2),max = max(x2),n=length(n)/2)
y3 <- runif(min = min(y2),max = max(y2),n=length(n)/2)
x4 <- c(x2,x3)
y4 <- c(y2,y3)
z4 <- as.vector(matrix(1,nrow=length(x4)))
#plot class "A" derivation
plot(x1,y1,pch=18,type="l",col="Red", lwd=2)
points(x2,y2)
points(x3,y3,pch=18,col="Blue")
legend(x = 65,y=65,legend = c("true","sampled","false"),
col = c("Red","Black","Blue"),lty = c(1,-1,-1),pch=c(-1,1,18))
Burada neler olduğunu açıklamama izin ver. Aşağıdaki resim "1" sınıfı için eğitim verilerini göstermektedir. "2" sınıfı aynı alan ve aralık boyunca düzgün rastlantısaldır. "1" in "bilgisinin" çoğunlukla sarmal olduğunu, ancak "2" den materyalle bozulduğunu görebilirsiniz. Verilerinizin% 33'ünün bozuk olması, birçok takma aracı için bir sorun olabilir. Theil-Sen, yaklaşık% 29 oranında bozulmaya başlar. ( bağlantı )
Şimdi bilgiyi ayırıyoruz, sadece gürültünün ne olduğu hakkında bir fikre sahip olduk.
#Create "B" class of uniform noise
x5 <- runif(min = min(x4),max = max(x4),n=length(x4))
y5 <- runif(min = min(y4),max = max(y4),n=length(x4))
z5 <- 2*z4
#assemble data into frame
data <- data.frame(c(x4,x5),c(y4,y5),as.factor(c(z4,z5)))
names(data) <- c("x","y","z")
#train random forest - I like h2o, but this is textbook Breimann
fit.rf <- randomForest(z~.,data=data,
ntree = 1000, replace=TRUE, nodesize = 20)
data2 <- predict(fit.rf,newdata=data[data$z==1,c(1,2)],type="response")
#separate class "1" from training data
idx1a <- which(data[,3]==1)
#separate class "1" from the predicted data
idx1b <- which(data2==1)
#show the difference in classes before and after RF based filter
plot(data[idx1a,1],data[idx1a,2])
points(data[idx1b,1],data[idx1b,2],col="Red")
İşte uygun sonuç:
Bunu gerçekten seviyorum, çünkü iyi bir yöntemin hem güçlü hem de zayıf yönlerini aynı zamanda zor bir soruna da gösterebiliyor. Merkeze yakın bakarsanız, daha az filtrelemenin nasıl olduğunu görebilirsiniz. Bilginin geometrik ölçeği küçüktür ve rastgele orman bunu kaçırmaktadır. Düğümlerin sayısı, ağaçların sayısı ve sınıf 2 için örnek yoğunluğu hakkında bir şeyler yazıyor. Ayrıca (-50, -50) ve "jetler" yakınında da çeşitli yerlerde bir boşluk var. Bununla birlikte, genel olarak, filtreleme nezihdir.
SVM ile karşılaştır
İşte SVM ile bir karşılaştırmaya izin veren kod:
#now to fit to svm
fit.svm <- svm(z~., data=data, kernel="radial",gamma=10,type = "C")
x5 <- seq(from=min(x2),to=max(x2),by=1)
y5 <- seq(from=min(y2),to=max(y2),by=1)
count <- 1
x6 <- numeric()
y6 <- numeric()
for (i in 1:length(x5)){
for (j in 1:length(y5)){
x6[count]<-x5[i]
y6[count]<-y5[j]
count <- count+1
}
}
data4 <- data.frame(x6,y6)
names(data4) <- c("x","y")
data4$z <- predict(fit.svm,newdata=data4)
idx4 <- which(data4$z==1,arr.ind=TRUE)
plot(data4[idx4,1],data4[idx4,2],col="Gray",pch=20)
points(data[idx1b,1],data[idx1b,2],col="Blue",pch=20)
lines(x1,y1,pch=18,col="Green", lwd=2)
grid()
legend(x = 65,y=65,
legend = c("true","from RF","From SVM"),
col = c("Green","Blue","Gray"),lty = c(1,-1,-1),pch=c(-1,20,15),pt.cex=c(1,1,2.25))
Aşağıdaki resimde sonuçlanır.
Bu iyi bir SVM. Gri, SVM tarafından "1" sınıfı ile ilişkili alandır. Mavi noktalar RF tarafından "1" sınıfı ile ilişkili örneklerdir. RF bazlı filtre, açıkça empoze edilmiş bir temeli olmadan, SVM ile karşılaştırılabilir şekilde çalışır. Spiralin merkezine yakın "sıkı veri" nin RF tarafından çözülen çok daha "sıkı" olduğu görülebilir. RF'nin SVM tarafından bulunmadığı bir dernek bulduğu "kuyruk" yönünde "adalar" da vardır.
Ben eğlencem. Arkaplan olmadan, bu alanda çok iyi bir katkı yapan tarafından yapılan ilk işlerden birini yaptım. Orijinal yazar "referans dağılımı" nı kullandı ( bağlantı , bağlantı ).
DÜZENLE:
Bu modele rastgele FOREST uygulayın:
user777, rastgele bir ormanın unsuru olan bir CART hakkında iyi bir düşünceye sahip olsa da, rastgele ormanın temeli "zayıf öğrenenler topluluğudur". CART bilinen zayıf bir öğrenicidir, ancak bir "topluluk" yakınında uzaktan hiçbir şey değildir. Rastgele bir ormanda olmasına rağmen "topluluk", "çok sayıda örnek sınırında" amaçlanmıştır. Saçılma grafiğindeki kullanıcı777'nin cevabı, en az 500 örnek kullanır ve bu, bu durumda insan okunabilirliği ve örnek boyutları hakkında bir şeyler söyler. İnsan görsel sistemi (kendisi bir öğrenci topluluğu) şaşırtıcı bir algılayıcı ve veri işlemcisidir ve bu değeri işlem kolaylığı için yeterli bulmaktadır.
Bir rastgele orman aracında varsayılan ayarları bile uygularsak, ilk birkaç ağaç için sınıflandırma hatası artışlarının davranışını görebiliriz ve yaklaşık 10 ağaç olana kadar bir ağaç seviyesine ulaşmaz. Başlangıçta hata büyüdükçe hatanın azaltılması 60 ağaç çevresinde sabitleşir. Kararlı derken
x <- cbind(x1, x2)
plot(rf,type="b",ylim=c(0,0.06))
grid()
Hangi verim:
"Minimum zayıf öğrenen" e bakmak yerine, aracın varsayılan ayarı için çok kısa bir buluşsal yöntem tarafından önerilen "minimum zayıf topluluğa" bakarsak, sonuçlar biraz farklıdır.
Not, yaklaşık çizginin kenarını gösteren daireyi çizmek için "çizgiler" kullandım. Kusursuz olduğunu ancak tek bir öğrencinin kalitesinden çok daha iyi olduğunu görebilirsiniz.
Orijinal örneklemede 88 "iç" örnek vardır. Numune boyutları arttırılırsa (grubun uygulanmasına izin verilir), yaklaştırma kalitesi de artar. 20.000 örnek ile aynı sayıda öğrenci şaşırtıcı derecede daha iyi bir uyum sağlar.
Çok daha yüksek kaliteli girdi bilgisi de uygun sayıda ağacın değerlendirilmesine izin verir. Yakınsama muayenesi, bu özel durumda verileri iyi bir şekilde temsil etmek için 20 ağacın minimum yeterli sayı olduğunu göstermektedir.