Schauen wir uns die Fehlerquellen für Ihre Klassifizierungsvorhersagen im Vergleich zu denen für eine lineare Vorhersage an. Wenn Sie klassifizieren, haben Sie zwei Fehlerquellen:
- Fehler beim Klassifizieren in den falschen Behälter
- Fehler aufgrund der Differenz zwischen dem Bin-Median und dem Zielwert (der "Goldstandort")
Wenn Ihre Daten ein geringes Rauschen aufweisen, werden Sie normalerweise in den richtigen Behälter klassifiziert. Wenn Sie auch viele Fächer haben, ist die zweite Fehlerquelle gering. Wenn Sie umgekehrt Daten mit hohem Rauschen haben, werden Sie möglicherweise häufig falsch in den falschen Behälter klassifiziert, und dies kann den Gesamtfehler dominieren - selbst wenn Sie viele kleine Behälter haben. Daher ist die zweite Fehlerquelle klein, wenn Sie richtig klassifizieren. Wenn Sie jedoch nur wenige Bins haben, werden Sie häufiger korrekt klassifizieren, aber Ihr Fehler innerhalb des Bins ist größer.
Am Ende kommt es wahrscheinlich auf ein Zusammenspiel zwischen dem Rauschen und der Behältergröße an.
Hier ist ein kleines Spielzeugbeispiel, das ich für 200 Simulationen ausgeführt habe. Eine einfache lineare Beziehung zu Rauschen und nur zwei Behältern:
Lassen Sie uns dies entweder mit geringem oder hohem Rauschen ausführen. (Das oben beschriebene Trainingsset hatte ein hohes Rauschen.) In jedem Fall erfassen wir die MSEs anhand eines linearen Modells und eines Klassifizierungsmodells:
nn.sample <- 100
stdev <- 1
nn.runs <- 200
results <- matrix(NA,nrow=nn.runs,ncol=2,dimnames=list(NULL,c("MSE.OLS","MSE.Classification")))
for ( ii in 1:nn.runs ) {
set.seed(ii)
xx.train <- runif(nn.sample,-1,1)
yy.train <- xx.train+rnorm(nn.sample,0,stdev)
discrete.train <- yy.train>0
bin.medians <- structure(by(yy.train,discrete.train,median),.Names=c("FALSE","TRUE"))
# plot(xx.train,yy.train,pch=19,col=discrete.train+1,main="Training")
model.ols <- lm(yy.train~xx.train)
model.log <- glm(discrete.train~xx.train,"binomial")
xx.test <- runif(nn.sample,-1,1)
yy.test <- xx.test+rnorm(nn.sample,0,0.1)
results[ii,1] <- mean((yy.test-predict(model.ols,newdata=data.frame(xx.test)))^2)
results[ii,2] <- mean((yy.test-bin.medians[as.character(predict(model.log,newdata=data.frame(xx.test))>0)])^2)
}
plot(results,xlim=range(results),ylim=range(results),main=paste("Standard Deviation of Noise:",stdev))
abline(a=0,b=1)
colMeans(results)
t.test(x=results[,1],y=results[,2],paired=TRUE)
Wie wir sehen, hängt es in diesem Beispiel vom Geräuschpegel ab, ob die Klassifizierung die Genauigkeit verbessert.
Sie könnten ein wenig mit simulierten Daten oder mit verschiedenen Behältergrößen herumspielen.
Beachten Sie schließlich, dass Sie sich nicht wundern sollten, wenn Sie verschiedene Behältergrößen ausprobieren und diejenigen mit der besten Leistung beibehalten, dass dies eine bessere Leistung als ein lineares Modell aufweist. Schließlich fügen Sie wesentlich mehr Freiheitsgrade hinzu, und wenn Sie nicht vorsichtig sind (Kreuzvalidierung!), Werden Sie die Behälter am Ende überladen.