Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ディープラーニングで大相撲千秋楽の勝敗を予想してみる / Deep Learning for Sumo

ディープラーニングで大相撲千秋楽の勝敗を予想してみる / Deep Learning for Sumo

Shotaro Ishihara

April 17, 2018
Tweet

More Decks by Shotaro Ishihara

Other Decks in Technology

Transcript

  1. 背景 3 http://www.nhk.or.jp/fukayomi/maru/2016/160206.html 大相撲入場者数 80 40 0 (万人) 1994 2011

    2015 (年) 若貴ブーム 84万4000人 八百長問題による人気の凋落 日本人の台頭 76万人
  2. 多い8勝7敗、少ない7勝8敗 背景 5 Winning Isn’t Everything: Corruption in Sumo Wrestling(2000);

    Mark Duggan, Steven D. Levitt; AMERICAN ECONOMIC REVIEW VOL. 92, NO. 5, pp. 1594-1605 http://pricetheory.uchicago.edu/levitt/Papers/DugganLevitt2002.pdf
  3. 背景 6 0 0.25 0.5 0.75 1 0 1 2

    3 4 5 6 7 8 9 10 11 12 13 14 千秋楽の勝率 14日目までの勝数 14日目までの勝数と、千秋楽の勝率 7勝7敗の力士の勝率の高さ
  4. • 最近傍法 • 非線形SVM • 一般化線形モデル • ランダムフォレスト • Xgboost

    • DNN • 人間(東大相撲部主務・田辺くん) 分類手法 14 Rで実装
  5. 最近傍法 28 for (j in 1:20) { minus <- function(x)

    {return (x - newdata[j, -1])} result <- apply(df[, -1], 1, minus) r = c() for (i in 1:4967) { r = c(r, sum(as.data.frame(result[i]) == 0)) } print(df[which.max(r),1]) }
  6. 非線形SVM 29 library(e1071) x.svm.rbf<-svm(df[, 1]~., df[, 2:29], scale = F)

    out.svm.rbf<-predict(x.svm.rbf, newdata = newdata[, -1])
  7. Xgboost 32 library(xgboost) library(Matrix) dtrain.mx <- sparse.model.matrix(df[,1]~., df[, 2:29]) dtest.mx

    <- sparse.model.matrix(~., newdata[, 2:29]) dtrain <- xgb.DMatrix(dtrain.mx, label = as.numeric(df[, 1])) dtest <- xgb.DMatrix(dtest.mx) x.gdbt <- xgb.train(params = list(objective='binary:logistic'), data=dtrain, nrounds=25) out.gdbt <- predict(x.gdbt, newdata = dtest)
  8. DNN 33 library(mxnet) train<-data.matrix(df) train.x<-train[,-1] train.y<-as.numeric(train[,1]) test<-data.matrix(newdata[,-1]) data <- mx.symbol.Variable("data")

    fc1 <- mx.symbol.FullyConnected(data, name="fc1", num_hidden=28) act1 <- mx.symbol.Activation(fc1, name="tanh1", act_type="tanh") fc2 <- mx.symbol.FullyConnected(act1, name="fc2", num_hidden=14) act2 <- mx.symbol.Activation(fc2, name="tanh2", act_type="tanh") fc3 <- mx.symbol.FullyConnected(act2, name="fc3", num_hidden=10) act3 <- mx.symbol.Activation(fc3, name="tanh3", act_type="tanh") fc4 <- mx.symbol.FullyConnected(act3, name="fc4", num_hidden=2)
  9. DNN 34 softmax <- mx.symbol.SoftmaxOutput(fc4, name="softmax") devices <- mx.cpu() mx.set.seed(71)

    model <- mx.model.FeedForward.create(softmax, X=train.x, y=train.y, ctx=devices, num.round=3000, array.batch.size=100, learning.rate=0.03, momentum=0.99, eval.metric=mx.metric.accuracy, initializer=mx.init.uniform(0.5), array.layout = "rowmajor", epoch.end.callback=mx.callback.log.train.metric(100)) preds <- predict(model, test, array.layout = "rowmajor") pred.label <- max.col(t(preds)) - 1