出力の離散化によって回帰モデルを分類モデルに削減すると、モデルが改善されるのはなぜですか?


7

回帰問題では、出力がビン/カテゴリ/クラスターに離散化され、ラベルとして使用される場合、モデルは分類モデルに縮小されます。

私の質問は、この削減を行うことの背後にある理論的または応用的な動機は何ですか?テキストから位置を予測する私の特定の実験では、回帰ではなく分類として問題をモデル化すると、改善が見られます。

私の特定のケースでは、出力は2dですが、これについてのより一般的な説明を探しています。

更新: 入力がBoWテキストで、出力が座標であると想定します(ジオタグ付きTwitterデータの場合など)。回帰では、二乗誤差損失を使用して、与えられたテキストの緯度/経度を予測します。トレーニングの緯度/経度のポイントをクラスター化し、各クラスターをクラスと仮定すると、分類モデルのクロスエントロピー損失を最適化することでクラスを予測できます。

評価:

回帰の場合、予測された場所と金の場所の間の平均距離。

分類のために、予測されたクラスターの中央のトレーニングポイントとゴールドの場所の間の平均距離。


情報がほとんどないので、補足してもらえますか?具体的には、あなたのモデルは何でしたか?
kjetil b halvorsen 2017年

LINEAR回帰とマルチスコア分類を線形スコア関数で比較していますか?もしそうなら、後者は明らかにより表現力豊かなモデルです。
ソビ2017年

「改善する」とはどういう意味ですか?どのように測定していますか?
Glen_b-2017

ターゲットが2D座標(回帰)であるBoW入力テキストを持つMLPを想定し、二乗誤差損失を使用して、クロスエントロピー損失を使用してラベルとして都市またはk平均クラスターを予測する場所と比較します。
Ash

回答:


8

線形予測の誤差の原因と比較して、分類予測の誤差の原因を見てみましょう。分類すると、2つのエラーの原因があります。

  1. 間違ったビンに分類することによるエラー
  2. ビンの中央値と目標値(「ゴールドの場所」)の違いによるエラー

データのノイズが少ない場合、通常は正しいビンに分類します。ビンも多数ある場合は、2番目のエラーの原因は少なくなります。逆に、あなたは高ノイズのデータを持っている場合は、多くの場合、間違ったビンに誤分類かもしれないが、これは全体の誤差を支配かもしれない-エラーの第2のソースが小さいので、あなたは、多くの小さなビンを持っている場合でも場合、あなたは正しく分類します。また、ビンが少ない場合は、正しく分類する頻度が高くなりますが、ビン内のエラーは大きくなります。

最後に、それはおそらくノイズとビンサイズの間の相互作用に帰着します。

これは、200回のシミュレーションで実行した小さなおもちゃの例です。ノイズと2つのビンのみの単純な線形関係:

トレーニング

さて、これを低ノイズまたは高ノイズで実行してみましょう。(上記のトレーニングセットには高いノイズがありました。)いずれの場合も、線形モデルと分類モデルから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)

低ノイズ 高ノイズ

見てわかるように、この例では、分類によって精度が向上するかどうかがノイズレベルにまで及びます。

シミュレーションデータを使用したり、ビンサイズを変えたりして、少し遊んでみてください。

最後に、さまざまなビンサイズを試し、パフォーマンスが最も良いものを維持している場合、線形モデルよりもパフォーマンスが優れていることに驚かないでください。結局のところ、本質的に自由度を追加しているので、注意しないと(相互検証!)、ビンが過剰に適合してしまうことになります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.