プログラミング初心者の勉強日記

情報科学専攻です. 機械学習と競技プログラミングについて日々勉強しています.

MENU

パターン認識と機械学習 : ベルヌーイ分布

ベルヌーイ分布

第2章の確率分布の一番最初に紹介されているベルヌーイ分布についての備忘録です.

ベルヌーイ分布について

二値確率変数 (binary random variable, 以下二値 r.v.) {x \in \{0,1\}}が1つの場合について考えます.

例えば、 x = 1で「」、x = 0で「」を表現するとします.

これを使えばコイン投げの結果が二値 r.v.で表現できます.
今回は一般の話を扱うので「」が出る確率は0.5ではなくパラメータ\muで表すことにします.

つまり、 $$ p(x = 1 | \mu) = \mu $$ となります.
確率なので  0 \leq \mu \leq 1 を満たし、 p(x = 0 | \mu) = 1 - \muとなります.

表が出る確率と裏が出る確率を一つの式で表したくなります. 表が出たときは、x = 11 - x = 0となり、裏が出たときはx = 01 - x = 1となります. したがってこのx1 - xを用いて一つの式で表すことを考えます.

その式が、 $$ Bern(x | \mu) = \mu ^{x} (1 - \mu)^{1-x} $$ となり、これがベルヌーイ分布です.

具体的に値を代入してみると、表が出る確率は\mu^{1} (1 - \mu)^{1 -1} = \muであり、裏が出る確率は\mu^{0} (1 - \mu) ^ {1 - 0} = 1 - \muで表すことが出来ています.

また、ベルヌーイ分布の平均分散はそれぞれ、E[x] = \mu, V[x] = \mu (1-\mu)です.

ベルヌーイ分布の実装例

ベルヌーイ分布pythonmatplotlibを使って可視化したので参考程度に載せておこうと思います.
私が書いたソースは以下の通りです.

#coding: utf-8

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

def bern(x,p):
    return pow(p,x) * pow(1-p,1-x)

if __name__ == "__main__":
    dist = np.zeros(2)
    for i in range(1,10):
        plt.figure()
        p = 0.1 * i
        dist[0] = bern(0,p)
        dist[1] = bern(1,p)

        x = np.array([0,1])

        label = ["x = 0","x = 1"]
        plt.ylim([0.0,1.0])
        plt.title("bernoulli distribution (p = " + str(p) + ")")
        plt.bar(x,dist,tick_label = label,align = "center")
        plt.savefig("bernoulli_" + str(p) + ".png")

可視化した図のうちパラメータをそれぞれ0.1, 0.5, 0.8に設定したものを載せておきます.

f:id:linearml:20170818103828p:plain:w240 f:id:linearml:20170818103833p:plain:w240 f:id:linearml:20170818103839p:plain:w240

次に、観測データ集合 \{x_{1},\cdots,x_{N}\}ベルヌーイ分布から独立に与えられたとします.
その時の尤度

$$ \prod_{n=1}^{N}\mu^{x_{n}}(1-\mu)^{1-x_{n}} $$ となり、この尤度を最大にするようにしてパラメータを推定するのが最尤推定です.
積の形では扱いにくいので尤度の対数をとって和の形にします.
この対数尤度をパラメータ \muで微分して0とおき、方程式を解けば最尤推定量が求まり以下のように得られます. $$ \mu_{ML} = \frac{1}{N} \sum_{n=1}^{N} x_{n} $$ ここで表が出た回数、つまりx = 1となった回数をmとすると、 $$ \mu_{ML} = \frac{m}{N} $$ となります.

例えば試行3回中3回とも表が出た場合に、最尤推定量は1となるので、今後もずっと表が出続けると予測していることになります.
これは過学習の極端な例ですが、3回の観測だけで、今後全く表が出ないと断定してしまうのはまずいことです.

今後はパラメータが従う事前分布を導入して、もっと常識的な結果を得る方法について考えていきます.

機械学習の入門におすすめの参考書

この記事の対象読者

最近機械学習って流行ってるけど何からやればいいのか分からない...

純粋に機械学習って難しそう...

機械学習勉強したいんだけど、本屋や図書室行っても機械学習関連の本がありすぎて困る...

と言う方は多いのではないでしょうか.

少し機械学習の参考書について調べた方だと

やはり有名どころのパターン認識機械学習 (通称 : ビショップ本) やるべきか

と思っている方も少なくはないかと思います.

ビショップ本は非常に有名な本で、機械学習を研究している人の中で知らない人はいない(はず)です.

しかし、ビショップ本は非常に数式が重たいので、機械学習を入門をする上では不向きです. (予測検索に良く難しいや挫折が出てくる...)

 

そこで、今回は私が、ビショップ本に入る前に機械学習の基礎を学ぶために用いた本の紹介をしようと思います.

以下で紹介する本で入門することで、これから機械学習を本気で勉強、研究していく上での土台を作ることができると思っています.

具体的に学んだ分野といたしましては

  1. 線形代数
  2. 確率、統計学
  3. 機械学習 (基礎)
  4. 最適化問題

の4つです.

パターン認識と機械学習 上

パターン認識と機械学習 上

 
パターン認識と機械学習 下 (ベイズ理論による統計的予測)

パターン認識と機械学習 下 (ベイズ理論による統計的予測)

 

 1. プログラミングのための線形代数

線形代数は数多くのサイトで紹介されている「プログラミングのための線形代数」を使いました.

 機械学習を勉強していく上で線形代数は必要となってきます.

私自身、行列やベクトルの演算は不自由なく行えたのですが、逆行列の存在や固有値固有ベクトルについての知識が曖昧だったのでそこらへんを中心に埋めなおしました.

この本は線形代数を実際どのように使っているのかが分かりやすく書かれているので、学部の時に使った教科書のようによくわからずに式を追っかけていた頃より理解が深まったと思います.

プログラミングのための線形代数

プログラミングのための線形代数

 

 2. 確率、統計学

確率、統計学は「統計学入門」を使いました.

これまた有名な本なので今更紹介することもないのですが...

機械学習統計学の違いを説明することができない人がいるというぐらい、機械学習統計学は密接な関係にあると思います.

なので、統計学の基本的事項は手を抜かずに勉強したいところです.

特に確率の基礎的部分(加法定理や乗法定理などなど)は今後機械学習をやる上で、必須事項ですので、「統計学入門」の最初の方は熟読すべきです.

ちなみに私は、統計学検定の2級ぐらいは受けようかなと思い勉強中です.  (この本をやれば、2級レベルでは十分すぎる知識がつきます.)

統計学入門 (基礎統計学?)

統計学入門 (基礎統計学?)

 

 

3. 機械学習 (基礎)

さて、本題の機械学習(基礎)についてです.

機械学習に関する本は、図書室や本屋に行けばわかりますが、溢れかえっていてどれを使えばいいか分からないものです.

どの本も非常に優れていて、機械学習を勉強する上で有益な情報を得ることができると思いますが、最初の一冊は間違えたくありませんよね.

そこで、私がオススメしたいのは、「言語処理のための機械学習入門」です.

「言語処理のための」と入っているので、「いや、俺は画像処理に機械学習使いたいんだけど...」とか、「機械学習で最強のゲームAIを作りたくて勉強しようと思っているので、違う本にしよう」と思うかもしれません.

しかし、機械学習を言語処理はもちろん、その他全ての分野に応用しようと考えている人全員にとって最高の入門書になると思います.

レベルとしては、基本的な数学的知識 (微分、行列、ベクトル演算ぐらい) があれば数式が追いかけられる程度で、機械学習に関する前提知識は一切いりません. また必要な数学的知識はその都度説明してくれているので、問題ありません.

私自身、機械学習はB4の頃も卒業研究の題材にしていて、ゼミでも輪講をしていたのですが、再度基礎を固めようと思い「言語処理のための機械学習入門」を読み直しました.

また演習問題も全部解きなおしました. (ここが大事で、演習問題は全て解くことをオススメします. 非常に簡単な問題で、各トピックに関する知識を確認、さらには深めることができます. これをやるのとやらないとでは大きく差が出ると思います.)

言語処理のための機械学習入門 (自然言語処理シリーズ)

言語処理のための機械学習入門 (自然言語処理シリーズ)

 

 

4. 最適化問題

機械学習の基礎を一通り学習し直せたので、次に最適化問題について復習を行いました.

最適化問題の復習は「数理計画入門」を使いました.

機械学習とは最適化問題である」 と言われるぐらい外せない分野です. 上で紹介した「言語処理のための機械学習」にも最適化問題について扱われているセクションがありますがより深く学ぶ必要があると思い、1冊手に取って勉強しました. 

この本は数学的説明を端折ることが多々あるので、厳密に証明をしていきたいという人には不向きかもしれません. 

しかし、量的にもそんなに多くなく一通りの手法について学習できるので短期間で網羅したいという人にはオススメかもしれません.

最適化問題で有名なのは「これなら分かる最適化数学」だと思います.

私自身読んだことがないのでここではレビューはしませんが、後期に入ったら読もうと思っているのでその時にまたブログに書こうかなと思っています.

(これなら分かる最適化数学を読んだので、気になるトピックを備忘録として記事にしていきたいと思っています.) 

新版 数理計画入門

新版 数理計画入門

 
これなら分かる最適化数学―基礎原理から計算手法まで

これなら分かる最適化数学―基礎原理から計算手法まで

 

 

以上が私がビショップ本に入る前に復習した内容です.

ビショップ本は数式を追いかけるのが非常に大変で、これらの本を学習したからと言ってスラスラ頭に入ってくるというものではありません.

ですが、「これから機械学習を学ぶ or 研究していく」上での土台作りは出来ていると思います.

是非、これを機に機械学習を勉強してみてはいかがでしょうか.

 

論文サーベイ part2

今回は「Face Recognition Face2vec Based on Deep Learning : Small Database Case

出展 : Automatic Control and Computer Sciences 2017

  • 概要:異なった状態の画像に対して訓練され、その各々のデータ数は少ない、認識率をあげるには約100万の画像が必要

  • 新規性、差分:少ない訓練データ数で特徴ベクトル抽出が可能に

  • 手法、アルゴリズムのキモ:出力層の線形分類層を取り除いて、特徴ベクトルを抽出し、ベクトルを正規化してから類似度を測る(多分。。。)

  • 結果:精度良く学習できた(特に前を向いた画像のみを用いた場合に97.98%)

  • 結論、議論;様々な物体、状態の画像に対して適用できる.小さいデータセットで訓練可能.データセットにない画像に対しても適用したい

  • コメント、感想:word2vecみたいな演算はできないのかなあ、「〇〇と××を足して2で割った人」をベクトル演算で出すとか

論文サーベイ part1

 

サーベイした論文の内容が後からみてわかるように自分なりにまとめていこうと思います.

 

 

Abstract, Introduction, Conclusionはどの論文に対しても簡潔にまとめたものを公開し、興味があるものだけ中身を精読していこうと思います. 

今回は「Recurrent Neural Networks With Missing Information Imputation For Medical Examination Data Prediction」です.

2017年のBigCompで発表されたものです.

 

  • Abstract : Recurrent Neural Network(RNN) を用いて欠落データを含む健康診断データを用いて未来の健康診断の結果を推定する
    (ここで言う欠落データとは、一年に一回の健康診断を受けられなかったりして、データがないことを言う)

  • Introduction : 病気の早期発見をすることで治療が難しいものも治療可能になることがある
    特定の疾病を機械学習を用いて推定する研究は多くされているが広い領域に適用できていない
    RNN、LSTMを用いる
    欠落しているデータをRNNで推定し、それを新たな入力とする
    比較手法には線形回帰を用いる

  • Simple Recurrent Network (SRN) : 健康診断データを推定するためにRNNを用いる

    f:id:linearml:20170503185631p:plain

  • Long Short-Term Memory : LSTMを使う

    f:id:linearml:20170503185616p:plain

  • Missing Data Compensation Using RNNs : 提案手法にあたる部分

    f:id:linearml:20170503184551p:plain

    グレーのノードが欠落している時t-1までのデータを使って推定したy(t)を次の入力につかってやろうっていう単純な話

  • Experiment Result : 2002年から2012年の韓国人の健康診断データをで訓練し、2013年のデータを推定する(訓練は完全データで行い、推定の時に欠落データを含んでいるものも推定できるか実験する)
    線形回帰に比べてRNN,LSTMのどちらをつかった場合でも精度良く推定できた
    RNN,LSTMの間に差はあまり見られない
  • Conclusion : 欠落データを含む健康診断データに対して既存研究に比べ高い精度で推定できた

感想:2017年とかなり新しいわりに発想はかなり単純

 たかが10年のデータを使っていたからRNN、LSTMに差は見られなかったのだろう

実験のとこで、欠落データに対して提案手法と線形回帰以外に入力を置き換えない普通のRNNを用いてものでも比較したほうがよかったのでは?(ただRNNが強かっただけかもしれない)