Warum verbessert die Reduzierung eines Regressionsmodells in ein Klassifizierungsmodell durch Ausgabediskretisierung ein Modell?

7

Wenn bei Regressionsproblemen die Ausgabe in Bins / Kategorien / Cluster diskretisiert und als Beschriftungen verwendet wird, wird das Modell auf ein Klassifizierungsmodell reduziert.

Meine Frage ist: Was ist die theoretische oder angewandte Motivation für diese Reduzierung? In meinen speziellen Experimenten zur Vorhersage des Standorts anhand von Text habe ich häufig Verbesserungen festgestellt, wenn ich das Problem eher als Klassifizierung als als Regression modelliere.

In meinem speziellen Fall ist die Ausgabe 2d, aber ich suche nach einer allgemeineren Erklärung dafür.

Update: Angenommen, die Eingabe ist BoW-Text und die Ausgabe sind Koordinaten (z. B. wie bei Twitter-Daten mit Geotags). Bei der Regression besteht die Aufgabe darin, den gegebenen Lat / Lon-Text unter Verwendung des quadratischen Fehlerverlusts vorherzusagen. Wenn wir die Trainingslat / Lon-Punkte gruppieren und davon ausgehen, dass jeder Cluster eine Klasse ist, können wir eine Klasse vorhersagen, indem wir den Kreuzentropieverlust in einem Klassifizierungsmodell optimieren.

Auswertung:

Für die Regression die mittlere Entfernung zwischen den vorhergesagten Standorten und den Goldstandorten.

Zur Klassifizierung die mittlere Entfernung zwischen dem mittleren Trainingspunkt im vorhergesagten Cluster und dem Goldstandort.

Asche
quelle
Es gibt nur sehr wenige Informationen. Können Sie diese erweitern? Was waren Ihre Modelle?
kjetil b halvorsen
Vergleichen Sie die LINEARE Regression mit der Klassifizierung mehrerer Klassen mit linearer Bewertungsfunktion? Wenn ja, ist letzteres offensichtlich ein aussagekräftigeres Modell.
Sobi
In welchem ​​Sinne meinst du "verbessern"? Wie messen Sie es?
Glen_b -Reinstate Monica
Nehmen Sie MLP mit BoW-Eingabetext an, bei dem das Ziel 2D-Koordinaten (Regression) sind, und verwenden Sie den quadratischen Fehlerverlust. Vergleichen Sie ihn mit dem Ort, an dem Sie eine Stadt oder einen k-Mittelwert-Cluster als Beschriftungen unter Verwendung des Kreuzentropieverlusts vorhersagen.
Ash

Antworten:

8

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:

  1. Fehler beim Klassifizieren in den falschen Behälter
  2. 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:

Ausbildung

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)

Wenig Lärm Hoher Lärm

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.

Stephan Kolassa
quelle