Server

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

投稿日:2017年3月14日 更新日:

はじめに

趣旨

こんにちは、最近個人的な勉強としてディープラーニングを始めた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について学べて良かったと思っています。

やってみての感想

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

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

page_footer_300rect




page_footer_300rect




-Server
-

執筆者:


comment

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

CAPTCHA


関連記事

CircleCIを使ってみた(RailsのRSpecとデプロイのサンプル)

1 はじめに2 導入するにあたって3 項目B4 補足4.1 開発環境とCI環境でdatabase.ymlが異なる5 さいごに はじめに 個人的に作成しているアプリケーションのCIツールとして、Circ ...

Conohaのサーバーを借りて、CentOS+MySQL+nginxの環境を作ってみた。

1 はじめに1.1 環境2 Conohaでサーバーをレンタル3 サーバーの初期設定3.1 サーバーにrootユーザーでログイン3.2 ユーザー作成3.3 SSHログインを許可3.4 秘密鍵を生成3.5 ...

aws

MyCoachの本番環境をAWS上に構築する 〜EC2編〜

1 はじめに1.1 関連記事2 MyCoachで利用しているインスタンス3 設定する項目4 キーペアの作成5 セキュリティグループの作成6 インスタンスの作成6.1 Webサーバのインスタンスを作成6 ...

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

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

aws

Amazon EC2を使ってみる

1 はじめに2 事前準備2.1 ルートアカウントのMFAを有効化2.2 個々のIAMユーザの作成(及びグループの作成)2.3 IAMユーザのMFAを有効化2.4 IAMパスワードポリシーの適用3 EC ...

フォロー

follow us in feedly

AppLink

英語

page_side_300rect

2017年3月
« 2月 4月 »
 1234
567891011
12131415161718
19202122232425
262728293031 

アプリ情報

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

Web版MyCoach

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