機械学習を用いて初音ミクのスリーサイズ推定問題を解く

MikuHatsune2013-01-22

双葉杏のスリーサイズ推定問題を流用して、初音ミクのスリーサイズを推定するというパンドラの箱的な取り組み。

公式には年齢、身長、体重しかないので、アイマスデータで足りないものはすべて組み合わせて発生させることでゴリ押しした。

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

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
paras <- as.matrix(expand.grid(1:3, 1:3, 1:4, 1:3)) #タイプ、レア度、血液型、利き手を組み合わせる
miku <- c(16, 158, 42) #公式設定から
mikuBWH <- matrix(0, nrow(paras), 3)

for(j in seq(nrow(paras))){
	tmpmiku <- c(paras[j, 1:2], miku, paras[j, 3:4])
	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])
		mikuBWH[j, i] <- predict(glmnet1, t(as.matrix(tmpmiku)), s=cv.glmnet1$lambda.min)
	}
}
apply(mikuBWH, 2, summary)
            B     W     H
Min.    79.40 54.81 80.68
1st Qu. 79.77 55.62 80.91
Median  79.78 55.81 80.92
Mean    79.78 55.74 80.91
3rd Qu. 79.80 55.96 80.93
Max.    79.83 56.17 80.95

外れ値となるようなものはなかったので、平均をとって80/56/81くらいだろう。
このスリーサイズに合うのは、なんとおれの大好きな渋谷凛であった。
が、彼女は165cm/44kgと、若干背が高めだった。

 
なので別の人を探したところ、上条春菜がそれっぽかった。
156cm/42kg、79/56/80のようだ。

どう考えてもおっぱいの大きさが負けている