○○でかんたん
お部屋探し!
Tokyo.R #49 LT
@soultoru
賃貸物件探しを
統計/MLで
やってみた
先行している
方々がいるよ
課題
部屋の床面積
賃料
妙に安い
回帰直線
(理論価格)
割安な物件
=ボロの可能性
安いのは嬉しい
けどボロは嫌
ボロ物件に
ありがちなもの
...
和式便所
和式便所を
Deep Learning
で分類すれば
いい!
Deep Learning
でかんたん
お部屋探し!
和式便所探し!
手順
1.
便所画像の収集
(手動)
ここでは、
和式便所
洋式便所
洗面台を集取
2.
画像サイズを
揃える
(ImageMagick)
# インストール
sudo apt-get install imagemagick
# 対象のディレクトリに移動
cd washiki
# すべて100x100に上書き変換
mogrify -geometry 100x100! *.jpg
cd ../youshiki
mogrify -geometry 100x100! *.jpg
cd ../senmen
mogrify -geometry 100x100! *.jpg
3.
画像を
グレースケール
に変換
library(raster)
as.grayscale.array <- function(file, flag){
# 画像サイズ変換はImageMagick等で行っておく
image <- brick( file )
# 画像をRGBの配列に変換
image.rgb <- getValues(image)
# グレースケールの配列に変換
image.bw <- image.rgb[,1]*0.21 +
image.rgb[,2]*0.72 + image.rgb[,3]*0.07
return( c(flag, image.bw) )
}
4.
和式便所に
フラグをつけて
h2oで学習
# データフレーム化
washiki <- list.files('~/apps/toilet/washiki',
full.names=T)
yoshiki <- list.files('~/apps/toilet/yoshiki', full.names=T)
senmen <- list.files('~/apps/toilet/senmen', full.names=T)
target <- rbind(t(sapply(washiki, as.grayscale.array, 1)),
t(sapply(yoshiki, as.grayscale.array, 0)),
t(sapply(senmen, as.grayscale.array, 0)) )
target <- data.frame(target)
target[,1] <- as.integer(target[,1])
rownames(target) <- c(washiki, yoshiki, senmen)
library('h2o')
# Deep learningで学習させる
localH2O <- h2o.init(ip = "localhost",
port = 54321,
startH2O = TRUE,
nthreads=-1)
res.dl <- h2o.deeplearning(
x = 2:10001,
y = 1,
training_frame = as.h2o(target),
activation = "TanhWithDropout",
hidden=rep(160,5),
epochs = 20)
pred.dl <- h2o.predict(object=res.dl,
newdata = as.h2o(target))
pred <- as.data.frame(pred.dl)
# 正解率を確認
print(1-sum(abs(round(pred[,1]) -
target[,1]))/length(target[,1]))
Rのソース
全体
library('h2o')
library(raster)
as.grayscale.array <- function(file, flag){
# 画像サイズ変換はImageMagick等で行っておく
image <- brick( file )
# 画像をRGBの配列に変換
image.rgb <- getValues(image)
# グレースケールの配列に変換
image.bw <- image.rgb[,1]*0.21 + image.rgb[,2]*0.72 + image.rgb[,3]*0.07
return( c(flag, image.bw) )
}
# データフレーム化
washiki <- list.files('~/apps/toilet/washiki', full.names=T)
yoshiki <- list.files('~/apps/toilet/yoshiki', full.names=T)
senmen <- list.files('~/apps/toilet/senmen', full.names=T)
target <- rbind(t(sapply(washiki, as.grayscale.array, 1)),
t(sapply(yoshiki, as.grayscale.array, 0)),
t(sapply(senmen, as.grayscale.array, 0)) )
target <- data.frame(target)
target[,1] <- as.integer(target[,1])
rownames(target) <- c(washiki, yoshiki, senmen)
# Deep learningで学習させる
localH2O <- h2o.init(ip = "localhost", port = 54321, startH2O = TRUE, nthreads=-1)
res.dl <- h2o.deeplearning(x = 2:10001, y = 1, training_frame = as.h2o(target), activation = "TanhWithDropout",
hidden=rep(160,5), epochs = 20)
pred.dl <- h2o.predict(object=res.dl, newdata = as.h2o(target))
pred <- as.data.frame(pred.dl)
# 正解率を確認
print(1-sum(abs(round(pred[,1]) - target[,1]))/length(target[,1]))
実行結果
精度 0.86
意外といい
だが
洗面台を
和式便所と分類
してしまう...
Enjoy!

○○でかんたんお部屋探し!