FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

最尤推定法の勉強 (ITエンジニアのための機械学習理論入門)

この本は数式が多いので、読み進めるのに時間がかかるが、それでもちゃんと読むと納得できる量の解説がなされており、読んでいて楽しい。 前回の最小二乗法に続いて、最尤推定法というものが第3章で解説さえている。

ITエンジニアのための機械学習理論入門

ITエンジニアのための機械学習理論入門

最小二乗法は、トレーニングセットに対して、誤差を最小にする形で推定関数をフィッティングさせていくものであった。 最小二乗法には、多項式で近似できるという仮定が含まれているが、最尤推定法では、さらに偏差σの誤差が含まれているという仮定が置かれている。 しかし結果として得られる多項式は同一になっており、得られる標準偏差も、最小二乗法で計算した平方根平均二乗誤差に一致してしまう。あれ、じゃあ最尤推定法ってどういう時に使えばいいのかね? もうちょっと読み進めていきたいが、今日は時間切れとなったので明日もう一回読み直してみる。

ついでに、Pythonでの環境の構築手順もやっておいた。本書ではCanopyという科学計算用のライブラリを利用するので、インストールしておく。

enthought.com

本書では、CentOSMacOSWindowsでの環境構築のやり方が書いてあったが、まずはとりあえずWindowsで構築した。さらに、一応サンプルコードご動かして、ちゃんと動作するところまでを確認できた。 最小二乗法のコードを読み進めておきたかったが、Pythonの知識が無さすぎて、、、

f:id:msyksphinz:20151108234350j:plain

どうでもいいが、Pythonでは関数そのものを戻り値として返すことができるのね、便利。

def resolve(dataset, m):
    t = dataset.y
    phi = DataFrame()
    for i in range(0,m+1):
        p = dataset.x**i
        p.name="x**%d" % i
        phi = pd.concat([phi,p], axis=1)
    tmp = np.linalg.inv(np.dot(phi.T, phi))
    ws = np.dot(np.dot(tmp, phi.T), t)

    def f(x):
        y = 0
        for i, w in enumerate(ws):
            y += w * (x ** i)
        return y

    return (f, ws)