できません。
任意のデータと任意の次元で完全にフィットしたい場合は、少なくとも一般的には、必要な程度まで。
例として、予測子ディメンション(つまり、何もない)と、観測値がバケットに分類されているとします。2つの観測値は、「チョコレート」と「バニラ」という2つの異なるバケットに分類されます。n1=0n2=2n3=2
予測子がないため、期間を完全に分類することはできません。
観測ごとに異なる値をとる予測子が少なくとも1つある場合、数値予測子に任意の高さの多項式次数を使用するだけで、実際に任意にひどく過剰適合させることができます(予測子が各観測で異なる値を持つカテゴリカルである場合、変換する必要さえあります)。ツールまたはモデルは、ほとんど二次的なものです。はい、オーバーフィットするのは簡単です。
ここに例があります。10個の観測値は、単一の数値予測子から完全に独立しています。ますます複雑になるロジスティック回帰または予測子の検出力を当てはめ、0.5のしきい値を使用して分類します(これは適切な方法ではありません)。正しくフィットした点は緑でマークされ、正しくフィットしなかった点は赤でマークされます。
Rコード:
nn <- 10
set.seed(2)
predictor <- runif(nn)
outcome <- runif(nn)>0.5
plot(predictor,outcome,pch=19,yaxt="n",ylim=c(-0.1,1.6))
axis(2,c(0,1),c("FALSE","TRUE"))
orders <- c(1,2,3,5,7,9)
xx <- seq(min(predictor),max(predictor),0.01)
par(mfrow=c(3,2))
for ( kk in seq_along(orders) ) {
plot(predictor,outcome,pch=19,yaxt="n",ylim=c(-0.2,1.2),main=paste("Order:",orders[kk]))
axis(2,c(0,1),c("FALSE","TRUE"))
model <- glm(outcome~poly(predictor,orders[kk]),family="binomial")
fits_obs <- predict(model,type="response")
fits <- predict(model,newdata=data.frame(predictor=xx),type="response")
lines(xx,fits)
correct <- (fits_obs>0.5 & outcome) | ( fits_obs<0.5 & !outcome)
points(predictor[correct],outcome[correct],cex=1.4,col="green",pch="o")
points(predictor[!correct],outcome[!correct],cex=1.4,col="red",pch="o")
}