Hatena::ブログ(Diary)

小人さんの妄想 このページをアンテナに追加 RSSフィード Twitter

2016-01-06

機械学習.vs.乱数

新年おめでとうございます。久しぶりにブログを更新します。どっこい生きてます。

昨年は、たった1回しか更新しませんでした。

今年はブログを書けるくらいのゆとりを持ちたいものです。


さて、昨年までを振り返ると、一部で「サザエさんじゃんけん予想」が話題になったことがありました。

なんでも8割以上の的中率を叩き出した方もおられるとか。

そこまでするには相当の入れ込みが必要でしょうが、ちょっとパソコンで試すだけなら、わりと手軽にできます。

予想の方法はいろいろありますが、私は以下のブログを参考に、scikit-learnという機械学習を試してみました。


* サザエさんのジャンケンの次の手を決定木で予測+可視化してみた

>> http://sucrose.hatenablog.com/entry/2014/11/23/230622

やったことは、上のブログにある通りです。

・パソコン上に Python と scikit-learn を用意する。

・過去のじゃんけんデータを入手する。

・あるじゃんけんの手に対して、過去3回がどんな手だったのかをまとめる。

 例えば、2015/12/20にパーが出たら、その1回前はパー、2回前はグー、3回前はチョキ、

 といった具合に過去3回の手を一覧表(配列)にまとめる。

・「決定木」を使って予測を行う。

 20分割のクロスバリデーション(データの19/20で学習して残りの1/20で評価するのを20回繰り返す)で正解率を評価する。

 決定木の深さを1〜6まで変えて、正解率を調べる。

データは、こちらのサイトから入手しました。

* サザエさんじゃんけん学 >> http://www.asahi-net.or.jp/~tk7m-ari/

「過去の手一覧」ページからじゃんけんデータを取得できます。

(なお、このページには「第7回 91.11.31」という日付の間違いがありました。)


決定木、深さ2の学習結果は、こうなりました。

f:id:rikunora:20160106153603p:image

深さに応じた正解率は、次の通りでした。

深さ正解率
143.1%
244.5%
353.1%
452.2%
550.2%
650.1%

正解率50%ってことは、半分しか当たらないではないか・・・

いやいや、もし何も考えずに手を出したなら 1/3 しか当たらないはずなので、

半分当たるってことは、実はすごいことなのです。


で、ここまできて、ふと疑問が湧いてきました。

全くのランダムを相手に機械学習したなら、正解率はどうがんばっても 1/3 になるはずではないかと。

そこで、サザエさんの代わりに Python組み込みの乱数(random)を相手に機械学習してみたところ、

正解率は予想通り、ほぼ 1/3 となりました。


では、全くの乱数ではなく、円周率を相手にしたらどうなるか。

円周率 3.1415...を3進法に変換し、0=グー、1=チョキ、2=パー、として機械学習させたところ、

正解率はやっぱり 1/3 程度でした。

サザエさんデータが1215件だったので、円周率も同程度の1200件としました。以下、データサイズは全て1200件です。)

円周率には何らかの規則があるだろうと思うのですが、「過去3手を調べる」という方法は通用しないようです。


では、円周率よりもう少し規則性がありそうな数、たとえば√2 = 1.4142...では、どうなるか。

結果は、やはり 1/3 程度。

過去3手を見る限り、円周率も√2も、乱数とほとんど見分けがつきません。


無理数はあきらめて、もう少し規則性がありそうなデータは無いものか。

たとえば文章に出てくる文字列には、何らかの規則性がありそうです。

そこで、Wikipedia の英語版「Randomness」のパラグラフを取り出して、

アルファベット26文字を26進数と見なし、これを3進数に変換しました。

(大文字、小文字は区別せず、, . などの記号は無視しました。)

この英文3進数を機械学習させたところ、結果はやはり 1/3 程度でした。

期待外れです。英文であっても、3進法に変換すると、十分ランダムなようです。


意地でも規則性を見つけたいので、今度はアルファベットの並びを3で割った余りを対戦相手としました。

A=グー、B=チョキ、C=パー、D=グー、E=チョキ、F=パー、... といった具合です。

その結果、正解率は約40%程度となりました。

英語文字列は、そのままの形であれば、ようやく規則性が見えてくる、ということでしょうか。


最後に、自分の手ででたらめに 0,1,2 を並べたデータを作成して、機械学習させてみました。

すると、約60%程度もの正解率となりました。

自分では全くでたらめに打ったつもりでも、実はサザエさん以上のクセが付いていたのです。

f:id:rikunora:20160106153604p:image

規則性がある方から順に並べると、

 手打ちデータ > サザエさん > 英文(単純な余り) > √2 >= 円周率 >= 乱数 >= 英文(3進法)

ということで、

 教訓:「サルがでたらめにキーボードを叩いても、乱数にはならない。」


もやしもやし 2016/01/14 23:05 初めましてm(_ _)m
自転車キャノンボールで検索すると
真っ先に小人さんの妄想のキャノンボールの記事に
ありつき拝見させていただきました!
ブログ更新してるようなので良かったです(*ˊᵕˋ*)
記事が違いますが一応最新のにコメントさせていただきます(><)
しばらく時期がたってるようですが
達成おめでとうございます!
自分はまだ400km越えの世界は未知です
ですが今年の三月頃にキャノンボールではありませんが
住んでいる横浜から大阪まで2日間で行く予定です!
脚の問題は大丈夫なのですが怖いのがパンクです!
パンクの種類はスローパンクチャーのようなのが多いのでしょうか?またガラスなどがささるバーストのような形が
多いのでしょうか?
記事ですとバーストのようでしたが
他の方の情報あれば教えていただきたいと
思いコメントさせていただきました!
TPI数値をいろいろ考えているのですが
挑戦したタイヤ教えていただきたいです!
長文失礼致しましたm(_ _)m

rikunorarikunora 2016/01/17 12:16 横浜-大阪にチャレンジとは素晴らしい。
普通に考えれば、2日というのは相当速いです。
私が自転車を始めた頃の限界は、小夜の中山でした。
当時は小夜の中山ユースホステルという宿があって、1日でたどり着けるのはそこまでが限界だったのです。
さて、私が使ったタイヤは MAVIC YKSION PRO です。
キャノンボールのために購入したキシリウムSLSホイールにセットで付いてきたタイヤです。
実際走ってみたところ、かなりいい感じだったので、そのまま使い続けています。
ケーシングは、MAVICサイトを見ると210TPIと書かれています。
ただ、以前はもう少し低い値だったと思います。
私は値を覚えていないのですが、こちらのブログに ケーシング:127TPIとありました。
* MAVICのYKSIONタイヤグリップリンクとパワーリンク比較
http://rbs.ta36.com/?p=17850
キャノンボールで私が立て続けに2回パンクしたときは、それぞれ違う原因でした。
1回目はフロントで、ガラスの破片か何か鋭いものでタイヤサイドが切れていました。
2回目はリアのリム打ちパンクで、小さな穴が「ハの字」に空いていました。
なので、タイヤのせいではなく、本当に運が悪かったのだと思います。
事実、その後同じ後輪タイヤで青森まで行きましたが、そのときはパンク無しでした。
私の印象ですと、このMAVICのタイヤは走りに関しては全く不満がありません。
ただ、耐久性については若干劣るような気がします。(まだ駄目になるほど走っていない。)
大阪まで行くのであれば「予備チューブ2本+イージーパッチ」を持って行くと良いです。
その後、私は「Panaracerイージーパッチキット」というのを携行するようにしています。
それでは、健闘を祈る!

rikunorarikunora 2016/01/17 12:30 追記: Mavicのサイトをよく見たら、やはりケーシング:127TPIでした。
同名のタイヤが2種類掲載されていますが、私が使っているのは127TPIの方です。
数値だけ見ると、このタイヤは減りが早い方なのでしょうが、
私はケチなので普段は練習用タイヤを使っていて、
本番用タイヤはここぞというときにしか使っていません。
なので、減り具合があまり体感できていないのです。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/rikunora/20160106/p1