マルコフモデル,隠れマルコフモデルとコネクショニスト時系列分類法

with コメントはまだありません

マルコフモデル,隠れマルコフモデルとコネクショニスト時系列分類法についての資料。
EMアルゴリズムについて、HMMのパラメータの最尤推定について、コネクショニスト時系列分類法についてはもう少し詳しくこのブログで書けたらいいなって思ってます(願望)

参考

統計(1)ポアソン分布の最尤推定とポアソン回帰

with コメントはまだありません

「データ解析のための統計モデリング入門」という良書を読んだので、自分の頭を整理するために要点だけ記事にしていく。
最終的に階層ベイズモデルまで記事かけたらいいなあと思ってます。

ポアソン分布とは?

【概要】

ポアソン分布とは、以下のような式で表せる確率分布です。

p(y|\lambda) = \frac{\lambda^y \exp{(-\lambda)}}{y!}

λは確率分布の平均です。
上の式は、平均がλのポアソン分布に従う確率変数が値yになる確率を表しています。

式を見てもわかるように、ポアソン分布は平均λのみに依存して確率分布の形を変えます。
具体的にλを色々な値に変えながらポアソン分布を描画した見た例が以下の図です。

【性質と用途】

ポアソン分布には「平均と分散は等しい」という重要な性質があります。
そのため、ポアソン分布により統計モデルを作成する際には、観測データの平均と分散が大体等しくないといけません。

更に、ポアソン分布は「カウントデータ」を扱うものです(離散確率分布)
つまり、観測値(y)は非負の整数である必要があります。

このような条件を満たす具体的な事象として以下のようなものが挙げられます。
・1日に受け取る電子メールの件数。
・1時間あたりの電話がかかってくる件数。
・1分間のWebサーバへのアクセス数。

最尤推定とは?

最尤推定とは文字通り「最も尤も(もっとも)らしいものを推定する」という意味です。

では、最も尤もらしいもの、とは何でしょう?

今回例にあげるポアソン分布では「観測データに最もポアソン分布が当てはまるような平均値λ」になります。

この「当てはまりの良さ」を数値化したものを尤度と言います。

この尤度を最大にするパラメータ(今回はλ)を推定するのが最尤推定です。

N個の観測データ(y1,y2..yn)があった時に尤度L(λ)は以下のように定義されます。

L(\lambda) = p(y_1|\lambda)p(y_2|\lambda) \cdots p(y_n|\lambda)

見ての通り、積の形で表されています。
これは例えば、y1,y2・・・yn = (1,2,…,4)というデータがあった時に
「y1が1である、かつ、y2が2である、かつ、…ynが4」という値を表しています。

上記の式は同時確率と同じですが、確率と尤度は別物です。
確率とは事象の確率です。
例えば、サイコロを振り、1回目で3が出た場合、その時点での3が出る確率は1になりますね。

一方尤度は「あるモデルをたて、それが正しいと仮定し、そのモデルの元で観測データが起こる確率」です。
先のサイコロの例でいうと、「ある確率モデルを立て、そのモデルにおいて3がでる確率」が尤度となります。

ポアソン分布の最尤推定

では、ここからはポアソン分布の最尤推定を実際に行っていきます。
まず、尤度は

 L(\lambda)= \prod_i^N p(y_i|\lambda) = \prod_i^N \frac{\lambda^y^i \exp{(-\lambda)}}{y_i!}

と書けました。

この後微分するのですが、積の形では微分しにくいので、対数を取って和の形になるようにします。

 \log{L(\lambda)} = \sum_i^N(y_i \log{\lambda}-\lambda-\sum_k^{y_i}\log{y_k})

これを「対数尤度関数」といいます。

では、\log{L(\lambda)}が最大となるようなλを探し出しましょう。
この関数が最大値において傾きが0となるλを探せば良いので、λで微分します。

 \frac{\Delta \log{L(\lambda)}}{\Delta \lambda} = \sum_i^N(\frac{y_i}{\lambda}-1) = \frac{1}{\lambda}\sum_i^Ny_i-N

上記の式が0となる点が尤度が最大となるλとなるので、
そのようなλを\hat{\lambda}すると、最大対数尤度は以下のようになります。
 \hat{\lambda} = \frac{1}{N}\sum_i^Ny_i

今回の例では、最適化するパラメータは平均であるλだけですが、実際のデータ解析ではもっと複雑で最適化対象のパラメータが複数個になります。
そのような場合、今回のように解析的に求めることができないのでその場合は最急降下法などのアルゴリズムを用いて数値的に求める必要があります。

ポアソン回帰とは?

ポアソン分布では平均λにのみ依存しました。
しかし、これでは正確に現実の事象を再現するようなモデルは構築できません。

例えば、「1日に受け取る電子メールの件数」って毎日同じ形のポアソン分布に従うのでしょうか?
何となく、曜日毎にメールの多さって変わってくる気がしますよね。
他にも、「1時間あたりの電話がかかってくる件数」も時間によって電話のかかってくる件数って変わってくるんじゃないでしょうか。

このような「説明変数」を導入した観測データに対してフィッティングするのがポアソン回帰です。

ポアソン回帰

説明変数が1つのみの場合を考えます。
「今週の日曜日はメールが○件」「今週の月曜日はメールが○件」などの観測データでは「曜日」の情報が説明変数になります。
この説明変数に応じて、平均λが決まるとするわけです。そのような関数を以下のように定義します。
\lambda_i = \exp{(\beta_1 + \beta_2 x_i)}
β1,β2はパラメータと言い、このパラメータを最適化していくことになります。

因みに、この両辺の対数を取ると
\log{\lambda_i} = \beta_1 + \beta_2 x_i
となりますね。
λの関数がパラメータの線形結合によって表されています。このような右辺を「線形予測子」と言い、
このような関数を「リンク関数」特に今回は関数が対数の形なので「対数リンク関数」といいます。
ポアソン回帰ではこの対数リンク関数を使うことが多いようです。

対数尤度は以下のような式になります。
\log{L(\beta_1,\beta_2)} = \sum_i \log{\frac{\lambda_i^y_i \exp{(-\lambda_i)}}{y_i!}}

これを最適化していくのですが、パラメータが複数あるため、解析的に最適なパラメータを求めることは難しいです。
そのため、数値的に求めていく必要があります。

ここはライブラリに頼りましょう。RやPythonのStatsModelsを使えばすぐ最尤推定値が求まります。
使い方はググって下さい。
これで観測データに最もフィットするパラメータがわかり、ポアソン回帰モデルが求まります。

LSTMの解説(をしようと思った)

with コメントはまだありません

LSTMの解説をしようと思ったけど、なかなか重い腰があがらなかった。
なので、以前に輪講で使用した資料をそのまま貼り付けて記事にしようと思う。。。

間違っている点もあると思います。随時ご指摘願えたら嬉しいです。
他にも、不明な点などがありましたらいつでもコメント下さい。

MAMPのPHPにphp-mecabを導入する

with コメントはまだありません

MAMPPHPphpmecabを導入する方法ってあまり載ってないようなので書いておこうと思います。
mecab自体は入っている事を前提としているので注意。

環境

OSX 10.11.6
mecab 0.996
MAMP 4.0.6
PHP 7.0.12

MAMPが4系じゃない場合はアップデートして下さい。

導入

(1)phpmecabをダウンロード

git clone https://github.com/rsky/php-mecab.git
<

>

(2)mecabディレクトリに入る
cd php-mecab/mecab

(3)phpizeを実行
ここで、MAMPで使っているPHPphpizeを実行する必要がある。
フルパスで指定する。

/Applications/MAMP/bin/php/php7.0.12/bin/phpize
<

>

(4)./configureを実行
ここでも、MAMPで使っているPHPphp-configを指定する必要がある。

./configure <span class="synSpecial">--with-php-config=/Applications/MAMP/bin/php/php7.0.12/bin/php-config</span> <span class="synSpecial">--with-mecab</span>
<