損失の二乗を使用して、玩具データセットのバイナリ分類を試みています。
私が使用していmtcars
た透過型を予測するために、データセット、ガロンあたりの利用マイルと体重を。以下のプロットは、異なる色の2種類の透過型データと、異なる損失関数によって生成された判定境界を示しています。二乗損失がある
グランドトゥルースラベル(0または1)であり、予測確率である。言い換えれば、私はロジスティック損失を分類設定の平方損失に置き換えています。他の部分は同じです。
mtcars
データを使用したおもちゃの例では、多くの場合、ロジスティック回帰に「類似した」モデルが得られました(ランダムシード0の次の図を参照)。
しかし、ある場合(そうする場合set.seed(1)
)、二乗損失はうまく機能していないようです。
ここで何が起きてるの?最適化は収束しませんか?ロジスティック損失は、二乗損失と比較して最適化が容易ですか?任意の助けをいただければ幸いです。
コード
d=mtcars[,c("am","mpg","wt")]
plot(d$mpg,d$wt,col=factor(d$am))
lg_fit=glm(am~.,d, family = binomial())
abline(-lg_fit$coefficients[1]/lg_fit$coefficients[3],
-lg_fit$coefficients[2]/lg_fit$coefficients[3])
grid()
# sq loss
lossSqOnBinary<-function(x,y,w){
p=plogis(x %*% w)
return(sum((y-p)^2))
}
# ----------------------------------------------------------------
# note, this random seed is important for squared loss work
# ----------------------------------------------------------------
set.seed(0)
x0=runif(3)
x=as.matrix(cbind(1,d[,2:3]))
y=d$am
opt=optim(x0, lossSqOnBinary, method="BFGS", x=x,y=y)
abline(-opt$par[1]/opt$par[3],
-opt$par[2]/opt$par[3], lty=2)
legend(25,5,c("logisitc loss","squared loss"), lty=c(1,2))
optim
終了していないことを伝えます、それだけです:収束しています。追加の引数を使用してコードを再実行し、control=list(maxit=10000)
適合をプロットし、その係数を元の係数と比較することにより、多くのことを学ぶことができます。