数学への挑戦 第二弾〜数理モデルxプログラミング〜

色々とやりかけのままですが、記事を書く時間の都合上、色々と並行して進めて行こうと考えている昨今です。

Javaで数理モデル

以前、数学への挑戦ということで。行列計算(ND4J)に挑戦しました。大まかに使えるようにはなったものの数学的理解が足りないため「どのように使うか?」に対する疑問が解決できない状況でした。

ここで数理モデル

「数学」が出てきたのは「機械学習」を理解するためでした。
しかし、よくわからないで終わっていたものをなんとかできるかもしれないと予感させてくれる本を見つけました。

この本で「イケる」と思いました。なのでこの本の勉強を始めます。

傘を持って行くか行かないか?

この本の始めに記載されていることをまとめると上のようなことが書いてあります。テーマは「モデルとは何か?」なのですが、この部分はとても知りたいと思っているところでした。

つまり、プログラム(機械学習)で使用する「計算」や「学習モデル」を理解するという目的に対して大きな効果が期待できると思った次第です。

人の行動を数学で説明する

この本に記載しているケースはこの本に登場する人物
青葉(女)と花京院(男)の会話から始まります。二人は大学生で研究室にて話をしているところから始まります。
そしてその「課題」になっているのが「モデルを使って説明する」というところでした。

数値で表現する

話題になっているのは『「青葉」が傘を持ってきた』という鼓動を数理モデルで説明するというものです。始めに行ったのは。。。

1.雨に濡れることの嫌度を数値で表す

雨が降って、雨に濡れることの「嫌度」を数字で表す。ということを行なっています。本には「雨に濡れることの嫌度=-10」と仮定しています。
そして、「傘を持ってくることの嫌度=-2」と仮定しました。「-2」は感覚で仮定したものです。(雨に濡れる=-10なのでその5分の1)
そして、天気予報を見ると今日の「降水確率が60%=0.6」なので晴れの確率は残りの「40%=0.4」になる。
ここまでをまとめると。。。

<前提>
行動の選択肢は「傘を持ってくる」 or 「持ってこない」の2つ
<嫌度>
雨に濡れることの嫌度 = -10(濡れないとき = 0)
傘を持ってくることの嫌度 = -2
<確率>
雨の確率: 60% = 0.6
晴れの確率: 40% = 0.4

上記のようになります。

2.平均的な損失を求める

上でまとめたものを表にすると下のようになります。
<天気(確率 : 嫌度)>

傘を持ってくる 持ってこない
Ⅰ 晴れ(0.4 : -2) Ⅲ 晴れ(0.4 : 0)
Ⅱ 雨(0.6 : -2) Ⅳ 晴れ(0.6 : -10)

「確率」と「その確率で実現する値」の積の合計を平均的な損失と定義すると。。。
<傘を持ってきた場合の損失>
Ⅰ + Ⅱ + Ⅲ + Ⅳ = (0.4 - 2) + (0.6 - 2) = -0.8 - 1.2 = -2のようになります。
<傘を持ってこない場合>
Ⅰ + Ⅱ + Ⅲ + Ⅳ = (0.4 0) + (0.6 -10) = 0 - 6 = -6のようになります。

A.傘を持ってくるときの平均損失 = -2
B.傘を持ってこないときの平均損失 = -6

「A > B」が成立するので傘を持ってきた

というのがこの本の出だしに記載されていました。
ここから「青葉」の納得がいかない部分を「花京院」が説明していきます。

Javaで表現するとどうなるか?

以前作成した、コンソールプリがあるのでそれをカスタムし、今回の話をプログラム的に表現します。
仕様としては以下のようになります。
<入力値>

  1. 雨に濡れることの嫌度
  2. 傘を持ってくる事の嫌度
  3. 今日の降水確率
    <出力値>
  4. 傘を持ってきたときの損失
  5. 傘を持ってこないときの損失

こんな感じになります。

続きは次回。。。
でわでわ。。。