機械学習を用いて双葉杏のスリーサイズ推定問題を解く

シンデレラガールズたちにはスリーサイズのデータがあるのだが、双葉杏だけスリーサイズのデータが欠けている。

これを、他のシンデレラガールズたちのデータを用いて推定しよう、という試み。
今回はLASSOを使用した(というかこれしかいまのところできない)。
主成分分析もこれを流用したらできる。

data0 <- read.csv("imasPCA.csv", header=TRUE)
data1 <- data0[,-which(colnames(data0)=="name")] #PCA用に数値だけにする
plot(data1, cex=1)


年齢、身長、体重、バスト、ウエスト、ヒップはそれぞれ相関が強そう。
 
LASSOを使って予測しよう。
今回は、バスト、ウエスト、ヒップをそれぞれ独立に推定した。というのも、予測したいデータが3つ欠損していて、これらを同時に推定するのは今回よくわからなかったので保留にした。
スリーサイズはそれぞれ相関が強そうなので、なにか補正する関係式を挟む、というのも手か。

library(glmnet)
data2 <- data1[-32, ] #杏を抜いた
anzu <- data1[32, ]
data3 <- array(0, c(nrow(data2), ncol(data2)-2, 3)) #BWHでデータ
data3[, , 1] <- as.matrix(data2[, -c(7, 8)]) #B
data3[, , 2] <- as.matrix(data2[, -c(6, 8)]) #W
data3[, , 3] <- as.matrix(data2[, -c(6, 7)]) #H
anzu_prd <- rep(0, 3)
par(mfcol=c(1, 3))
for(i in seq(3)){
	glmnet1 <- glmnet(data3[, -6, i], data3[, 6, i])
	#plot(glmnet1, lwd=3)
	cv.glmnet1 <- cv.glmnet(data3[, -6, i], data3[, 6, i])
	anzu_prd[i] <- predict(glmnet1, as.matrix(anzu[-c(6:8)]), s=cv.glmnet1$lambda.min)
	
	prd1 <- predict(glmnet1, data3[, -6, i], s=cv.glmnet1$lambda.min)
	xl <- yl <- range(c(data3[, 6, i], prd1))
	plot(data3[, 6, i], prd1, xlim=xl, ylim=yl, pch=16,
		xlab="Real", ylab="Prediction")
	title(c("Bust", "Waist", "Hip")[i])
}
anzu_prd
[1] 68.37807 51.75466 72.31089

主成分分析に使ったときは、勝手に72/52/76くらいだろうと思って補完したが、過大評価だったようだ…

双葉杏に似た感じのシンデレラガールは橘ありす(68/52/67)のようだ。