장난감 데이터 세트에서 이진 분류를 수행하기 위해 제곱 손실을 사용하려고합니다.
mtcars
데이터 세트를 사용하고 있으며 갤런 당 마일과 무게를 사용 하여 전송 유형을 예측합니다. 아래 그림은 서로 다른 색상의 두 가지 유형의 전송 유형 데이터와 서로 다른 손실 함수로 생성 된 결정 경계를 보여줍니다. 제곱 손실은
여기서 는 기본 진리 레이블 (0 또는 1)이고 는 예측 확률 입니다. 즉, 분류 설정에서 물류 손실을 제곱 손실로 바꾸고 다른 부품은 동일합니다.Y I의 피의 I의 P I = 로짓 - 1 ( β T X I )
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
완료되지 않았다고 알려줍니다. 그게 다입니다. 수렴 중입니다. 추가 argument로 코드를 다시 실행 control=list(maxit=10000)
하고 적합도를 표시하고 계수를 원래 계수와 비교 하여 많은 것을 배울 수 있습니다 .