Server

配牌からアガれるかアガれないか予測する

投稿日:

はじめに

趣旨

こんにちは、最近個人的な勉強としてディープラーニングを始めたtonnyです。
手始めに、O’Reilly Japanさんから出版されているゼロから作るDeep Learningを読みました。
しかし、私自身に知識がなく、いまいちピンとこなかったので、簡単なものを作ってみようと考えました。

とはいえ、せっかくなら自分の趣味でもある麻雀に関わるところで作ろうと考えました。

(以前Qiitaにも同じ記事を投稿しましたが、こちらにも投稿します。)

筆者のスペック

  • Python、機械学習ともに初心者
  • 普段はPHPやRubyを使ったWebのお仕事

環境

  • Python 3.6.0
  • bottle 0.12.13
  • heroku

機能概要

作成したアプリは下記になります。
https://python-mahjang.herokuapp.com/index

また、ソースコードは下記になります。
https://github.com/naoki85/python_mahjong

  • 配牌と結果のみを学習対象としました。
  • 配牌を下図のように、かたちで分解し、それぞれの重みから「アガれる」か「アガれない」か出力します。
  • あくまで「アガリ」という結果のみなので、役にはこだわっていません。

実装に関して

教師データ

教師データはYoutubeなどでプロの対局を見て、配牌と結果を収集しました。
数としては100いっていないため、これは継続して収集します。

前処理

配牌を以下の3つのノードに分解しています。

  • 順子の数(階段並び)
  • 対子の数(同じ牌が2枚)
  • 暗刻の数(同じ牌が3枚)

各ノードの重みの学習

各ノードの重みはゼロから作るDeep Learningを参考に、勾配法で推定しています。

実際に使ってみた

Youtubeにあがっていたとあるネット麻雀の動画で試してみました。

結果あがれる確率あがれない確率
東1局あがれない17%83%
東2局あがれない29%71%
東3局あがれない7%93%
東3局1本場あがれない17%83%
東4局あがれない33%67%
南1局あがれる20%80%
南1局1本場あがれない26%74%
南2局あがれない17%83%
南3局あがれる26%74%
 南4局あがれる23%77%

パッと見、ちゃんと予測できているようには見えないです。
よく考えたら、麻雀は4人のうち1人があがれるゲームなので、単純計算でアガれる確率は25%です。
教師データが足りないのかもしれないと思い、とりあえずプロの対局1局分追加してみました。

再テスト

同じ動画で再度試してみました。
アガれない結果のみを比較してみます。

結果あがれる確率あがれない確率
東1局あがれない83%73%
東2局あがれない71%64%
東3局あがれない93%92%
東3局1本場あがれない83%80%
東4局あがれない67%72%
南1局あがれる80%85%
南1局1本場あがれない74%79%
南2局あがれない83%80%
南3局あがれる74%79%
 南4局あがれる77%73%

 

10局のうち、6局の「アガれない確率」が下がっています。

やはり、教師データを増やせば結果は変わってくるようです。

学習させた結果から

学習させた重みパラメータは下記になります。
第1要素がアガリへの寄与、第2要素がアガれない方への寄与になります。

この結果を見ると、順子、対子はアガリに寄与していますが、暗刻は逆にアガリに寄与していないようです。
暗刻があると手が狭くなるからでしょうか?

バイアスパラメータは下記になります。
すでにアガれない方のバイアスが高すぎます。

さいごに

課題

現在は下記の2点を課題としてあげて勉強しようと思っています。

  1. 教師データを増やす
  2. レイヤーのノードを追加(リャンメン、カンチャン、ペンチャン)の数

今回このWebアプリを作ったのは、教師データを増やす上で入力を楽にしたいためです。
その過程でPythonの軽量FWであるbottleについて学べて良かったと思っています。

やってみての感想

ディープラーニングも学習したてで、何をして良いのかもよく分かっておりません。
(そもそも麻雀という不確定要素の塊を題材にすること自体ナンセンスなのかもしれませんが。。。)

そのため、ご指摘やそもそも間違っているなどのご指導ありましたらコメントをください!
(アドバイスなどもいただけると嬉しく思います。)

-Server

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

WordPressのサーバ移設とnginxで無料SSLをやってみた

1 はじめに1.1 環境2 サーバー準備2.1 ConohaのVPSサーバーの契約2.2 sshログイン用のユーザーを作成2.3 必要なソフトウェアのインストール3 WordPressの移行3.1 D ...

DockerのQuickstart:Compose and Railsをやってみた

1 はじめに1.1 環境1.2 Docker for Macのインストール2 Railsプロジェクトを作成するまで2.1 Railsのプロジェクトディレクトリの作成2.2 Dockerfileの作成2 ...

[WordPressのSEO対策]PageSpeed Insightsのスコアを上げる方法

1 はじめに2 現状のスコアと改善点を確認する3 ブラウザキャッシュを活用する4 圧縮を有効にする5 HTML/CCS/JavaScriptを縮小する6 画像を最適化する7 レンダリングをブロックして ...

MyCoachのDocker環境を変えてみた

1 はじめに2 なんで改修しようと思ったか3 構成3.1 使用するコンテナ3.2 各Dockerfile3.3 docker-compose.yml3.4 Unicorn3.5 database.rb ...

DockerでRails + Vue.jsの環境を作ってみる

1 はじめに1.1 前回までのあらすじ1.2 今回の趣旨1.3 環境2 MySQLのUTF-8対応3 Node.jsをRubyコンテナに組み込む4 Webpackerを使用してVue.jsをインストー ...

メルマガ

メールマガジン

メルマガ始めました!
詳細は以下のリンクから
http://re-engines.com/mailmagazine/

amazon

Web版MyCoach

私たちはより広い方にコーチングを知ってもらいたいと考えています。
下記のサイトにて、コーチの方々を紹介しておりますので、よろしければご覧ください。

アプリ情報

私たちは、目標を達成したい方を応援する、TODOアプリもリリースしております。
下記のアイコンから無料でダウンロードできます。

リンク

follow us in feedly
2017年3月
« 2月 4月 »
 1234
567891011
12131415161718
19202122232425
262728293031