ラブライブメンバー体重推定問題を解く

MikuHatsune2013-01-25

(このネタ引っ張りすぎぃ!!)
 
ラブライブ!のメンバーの公式設定には、体重だけ載っていないのでついでに推定した。
学習データはシンデレラガールズなので、違うといえば違うのだが、非実在青少年少女的にはOKということにしよう。

B	W	H	height	age	name
90	60	82	156	17	東條 希
88	60	84	162	17	絢瀬 絵里
82	60	83	156	15	小泉 花陽
80	58	80	159	16	南 ことり
78	56	83	161	15	西木野 真姫
78	58	82	157	16	高坂 穂乃果
76	58	80	159	16	園田 海未
75	59	80	155	15	星空 凛
74	57	79	154	17	矢澤 にこ
love1 <- read.delim("clipboard")
library(glmnet)
data0 <- read.csv("imasPCA.csv", header=TRUE)
data1 <- cbind(data0$B, data0$W, data0$H, data0$height, data0$weight, data0$age)
data2 <- data1[-32, ] #杏を抜いた
dl1 <- 5 #体重
glmnet1 <- glmnet(data2[, -dl1], data2[, dl1])
cv.glmnet1 <- cv.glmnet(data2[, -dl1], data2[, dl1])
love_weight <- predict(glmnet1, as.matrix(love1[, -6]), s=cv.glmnet1$lambda.min)
data.frame(levels(love1$name), love_weight)
  levels.love1.name.       X1
1          絢瀬 絵里 47.15673
2          園田 海未 48.05722
3        高坂 穂乃果 44.95165
4          小泉 花陽 44.28431
5            星空 凛 43.37501
6        西木野 真姫 43.24912
7            東條 希 43.18177
8          南 ことり 42.35927
9          矢澤 にこ 40.99973

 
交差検証を用いて誤差を考えた。

ng <- 6 # n-fold
g0 <- matrix(sample(1:nrow(data2)), nr=ng) #検証用のグループ
CVm <- rep(0, ng)
for(ng0 in seq(ng)){
	glmnet1 <- glmnet(data2[-g0[ng0, ], -6], data2[-g0[ng0, ], 6])
	cv.glmnet1 <- cv.glmnet(data2[-g0[ng0, ], -6], data2[-g0[ng0, ], 6])
	prd1<- predict(glmnet1, data1[g0[ng0, ], -6], s=cv.glmnet1$lambda.min)
	
	CVm[ng0] <- sqrt(mean((data1[g0[ng0, ], 6]-prd1)^2))
}
mean(CVm)
[1] 2.069278

誤差2.07kgで推定できるようだ。