為什麼通過輸出離散化將回歸模型簡化為分類模型會改進模型?
在回歸問題中,如果將輸出離散化為 bin/categories/clusters 並用作標籤,則模型會簡化為分類模型。
我的問題是:做這種減少背後的**理論或應用動機是什麼?**在我從文本預測位置的特定實驗中,當我將問題建模為分類而不是回歸時,我經常看到改進。
在我的特殊情況下,輸出是 2d 但我正在尋找更一般的解釋。
更新: 假設輸入是 BoW 文本,輸出是坐標(例如,在地理標記的 Twitter 數據中)。在回歸中,任務是使用平方誤差損失來預測給定文本的緯度/經度。如果我們對訓練 lat/lon 點進行聚類並假設每個聚類是一個類,那麼我們可以通過優化分類模型中的交叉熵損失來預測一個類。
評估:
對於回歸,預測位置和黃金位置之間的平均距離。
對於分類,預測集群中的中值訓練點與黃金位置之間的平均距離。
讓我們看一下分類預測的誤差來源,與線性預測的誤差來源進行比較。如果你分類,你有兩個錯誤來源:
- 分類到錯誤的 bin 時出錯
- bin 中位數與目標值(“黃金位置”)之間的差異產生的誤差
如果您的數據具有低噪聲,那麼您通常會分類到正確的 bin 中。如果您也有很多垃圾箱,那麼第二個錯誤來源將很低。相反,如果您有高噪聲數據,那麼您可能經常將錯誤分類到錯誤的 bin 中,這可能會主導整個錯誤 - 即使您有很多小 bin,所以如果您正確分類,第二個錯誤源很小。再說一次,如果你的 bin 很少,那麼你會更經常地正確分類,但你的 bin 內錯誤會更大。
最後,它可能歸結為噪聲和 bin 大小之間的相互作用。
這是一個小玩具示例,我運行了 200 次模擬。與噪聲的簡單線性關係,只有兩個 bin:
現在,讓我們以低噪音或高噪音運行它。(上面的訓練集有很高的噪聲。)在每種情況下,我們都記錄了來自線性模型和分類模型的 MSE:
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)
正如我們所看到的,分類是否能提高準確性歸結為這個例子中的噪聲水平。
您可以使用模擬數據或不同的 bin 大小進行一些操作。
最後,請注意,如果您嘗試不同的 bin 大小並保留性能最佳的 bin 大小,那麼您應該不會對它的性能優於線性模型感到驚訝。畢竟,你實際上是在增加更多的自由度,如果你不小心(交叉驗證!),你最終會過度擬合垃圾箱。