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