お金と数字と温泉を考えるブログ

お金と数字と温泉を考えています。

行列を用いた重回帰分析(2016 記述問2)その③多項式回帰・過学習・外挿

umejiro330.hatenablog.com
umejiro330.hatenablog.com

2016年記述問2は、YとZの関係を求めるだけの問題ではなく、
Zを二乗したZ^2を加えて重回帰した場合はどうなのかという問題もありました。
その①その②同様正規方程式を用いれば解くことができますが、今回もRを用いて計算してみたいと思います。
この際なのでz^4まで見てみましょう。

y<-c(7.7,6.6,7.0,7.2,8.0)
x<-c(10,15,20,25,30)
z<-0.2*x-4
z2<-z*z
z3<-z*z*z
z4<-z*z*z*z
a<-as.data.frame(cbind(y,z))
b<-as.data.frame(cbind(y,z,z2))
c<-as.data.frame(cbind(y,z,z2,z3))
d<-as.data.frame(cbind(y,z,z2,z3,z4))
LM<-lm(y~.,data=a)
LM2<-lm(y~.,data=b)
LM3<-lm(y~.,data=c)
LM4<-lm(y~.,data=d)

LMの場合
f:id:umejiro330:20180327202150p:plain
LM2の場合
f:id:umejiro330:20180327202220p:plain
LM3の場合
f:id:umejiro330:20180327202236p:plain
LM4の場合
f:id:umejiro330:20180327202248p:plain
LM4はパラメータの数が目的変数の数と一致してしまったため、パラメータ以外がNAとなってしまっています。

それぞれの回帰式を縦軸がY、横軸がZとして見てみましょう。

lines(a$z,predict(LM,newdata=a),col="red")
lines(b$z,predict(LM2,newdata=b),col="blue")
lines(c$z,predict(LM3,newdata=c),col="yellow")
lines(d$z,predict(LM4,newdata=d),col="green")

f:id:umejiro330:20180327202710p:plain
一見すると、LM4の回帰式がそれぞれのデータに完全に適合しているので、採用したくなりますが、果たしてこれは正しいのでしょうか。
そのような場合は、実際にデータを代入してみると良いです。
例えばLM4にz=2を代入すると、値が非常に大きくなってしまいます。
これを外挿と言います。予測で使った範囲以外のデータを用いると予測が不完全になることを示しています。
また、学習データではうまく予測できたのに、予測データではうまく当てはまらないことを過学習(過適合)と言います。

過学習や過適合が起こらないように、しばしば学習データと予測データを分けて用いるholdoutや
学習データをk分割し、その中のk-1分割を学習に、1分割を予測に用いてそれぞれの結果を平均するcross-varidationが用いられます。