読者です 読者をやめる 読者になる 読者になる

人工知能に関する断創録

人工知能、認知科学、心理学、ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。最近は、機械学習、Deep Learning、Kerasに関する記事が多いです。



PRML

重点サンプリング (5)

重点サンプリング (4)(2014/10/11)のつづき。今回は、Rによるモンテカルロ法入門のテキストの例3.5を解いてみたい。 の積分を重点サンプリングで計算しろというもの。似たような積分は (1)~(3) までですでに取り上げてきた。そこでは、標準正規分布からの…

重点サンプリング (4)

重点サンプリング (3)(2014/10/2)のつづき。今回は、Rによるモンテカルロ法入門のテキストの例題をPythonで解いてみたい。まずは、練習問題3.4から。 fを標準正規分布 とし、 を として期待値 を計算せよ。 という問題。 標準正規分布 からサンプリングす…

重点サンプリング (3)

重点サンプリング (2)(2014/9/21)のつづき。前回からけっこう日があいてしまったが、予定どおり重点関数をいろいろ変えたときにモンテカルロ積分の収束性がどのように変わるか検証した。 対象とする積分は下の式。通常のモンテカルロ積分では、平均0、標準…

重点サンプリング (2)

重点サンプリング (1)(2014/9/20)のつづき。今回は重点サンプリングを実装して、前回うまく計算できなかった積分が正しく計算できるか確認したい。 重点サンプリング 重点サンプリングの導出は、従来のモンテカルロ積分の式から簡単にできる。新しく重点関…

重点サンプリング (1)

Pythonによるモンテカルロ法(2014/6/20)のつづき。今回は、重点サンプリング(importance sampling)の実験をしてみたい。重点サンプリングは、PRMLの11章にも出ている。重点サンプリングを使うと期待値のモンテカルロ積分をより効率的に(=少ないサンプ…

モンテカルロ積分の収束テスト

モンテカルロ積分 (2)(2014/8/20)のつづき。 前回の正規・コーシー-ベイズ推定量の積分のサンプリング方法には2通りの方法があった。コーシー分布からサンプリングする場合と正規分布からサンプリングする場合だ。どちらでもサンプリング数を多くすればほ…

モンテカルロ積分 (2)

モンテカルロ積分(2014/7/28)のつづき。今回は、Rによるモンテカルロ法入門の例3.3と練習問題3.1のモンテカルロ積分の例を検証した。 例3.3 例3.3は簡単な積分の問題。 これも前回と同じように確率分布 p(x) が明示的にないため一様分布を追加する。積分区…

モンテカルロ積分

Pythonによるモンテカルロ法入門(2014/6/20)のつづき。3章のモンテカルロ積分について実験した。 モンテカルロ積分 モンテカルロ積分を使うと統計や機械学習で頻繁に出てくる期待値を求める積分が乱数生成で簡単に計算できる。期待値を求める積分とは下の…

受理・棄却法 (4)

Pythonによるモンテカルロ法入門(2014/6/20)の受理・棄却法(2014/7/12)4回目。今回は練習問題2.18を解いてみた。下のような〜分布という名前がついていない完全に任意な目標分布にしたがう乱数を受理・棄却法で生成してみよう。提案分布には標準正規分布…

受理・棄却法 (3)

Pythonによるモンテカルロ法入門(2014/6/20)の受理・棄却法(2014/7/12)の3回目。今回は、練習問題2.8を解いてみた。目標分布を標準正規分布、提案分布を二重指数分布(ラプラス分布)とし、受理・棄却法(棄却サンプリング)を用いて標準正規分布にした…

受理・棄却法 (2)

Pythonによるモンテカルロ法入門(2014/6/20)の受理・棄却法(2014/7/12)の2回目。前回は、提案分布に一様分布を使ったためサンプリングの効率が悪かった。今回は、より効率のよい提案分布gとしてベータ分布を使ってみよう。目標分布fは前回と同じベータ分…

受理・棄却法

Pythonによるモンテカルロ法入門(2014/6/20)のつづき。今回は、2.3節の受理・棄却法(acceptance-rejection method)、別名、棄却サンプリング(rejection sampling)による乱数生成を実験してみる。この方法を使うと事実上あらゆる分布(特定の名前がつい…

混合分布から乱数を生成

Pythonによるモンテカルロ法入門(2014/6/20)のつづき。今回は、2.2.3節の混合分布から乱数を生成する実験してみました。2.2.3節によるとある確率分布fが別の確率分布gとpの混合分布として次のように書ける場合があるそうです。たとえば、スチューデントのt…

離散的な乱数の生成

Pythonによるモンテカルロ法入門(2014/6/20)のつづき。今回は、2.2.2節の離散分布に従う乱数を生成してみます。逆変換法の原理とほとんど同じだけど離散分布なので生成される乱数が自然数のみなのが違います。 を生成することを考える。ここで、の台(確率…

Box-Muller法

Pythonによるモンテカルロ法入門(2014/6/20)のつづき。今回はBox-Muller法を使って標準正規分布に従う乱数を生成してみました。あとおまけで中心極限定理に基づく正規乱数の生成も試してみます。 Box-Muller法 Box-Muller法は、2つの一様乱数から標準正規…

一般変換法

Pythonによるモンテカルロ法入門(2014/6/20)といいながらいまだモンテカルロ法が出てきていないという・・・今日は一般変換法を実験。Rによるモンテカルロ法入門2.2節では、指数分布に特定の変換を施すことで生成できる標準的な分布としてカイ二乗分布、ガ…

逆変換法 (3)

Pythonによるモンテカルロ法入門(2014/6/20)逆変換法 (2)のつづき。今回は、ガンマ分布とベータ分布に従う乱数を一様分布から生成してみます。 ガンマ分布 ガンマ分布のpdfとcdfは下の式。今までの分布と比べると少し複雑だな。 http://en.wikipedia.org/w…

逆変換法 (2)

Pythonによるモンテカルロ法入門(2014/6/20)逆変換法(2014/6/22)のつづき。今回は、指数分布ではなく、ロジスティック分布とコーシー分布に従う乱数を一様乱数から変換して生成してみます。Rによるモンテカルロ法入門の練習問題2.2のPython実装です。 ロ…

逆変換法

Pythonによるモンテカルロ法入門(2014/6/20)逆変換法(Inverse transform sampling)は、[0,1]区間の一様分布から得られた乱数(一様乱数)を変換することで任意の確率分布に従う乱数を得る手法とのこと。このとき必要となるのは変換先の確率分布の累積分…

一様乱数の生成

Pythonによるモンテカルロ法入門(2014/6/20)最初にPythonで [0.0, 1.0] 間の一様乱数を生成してみます。 一様分布 一様分布(Uniform distribution)の確率密度関数(pdf)は下の式になります。 引用:http://en.wikipedia.org/wiki/Uniform_distribution_…

Pythonによるモンテカルロ法入門

PRMLの11章で出てくるマルコフ連鎖モンテカルロ法(Markov chain Monte Carlo methods: MCMC)。ベイズでは必須と呼ばれる手法だけれどいまいち理屈もありがたみもよくわからなくて読み飛ばしていました。最近、ボルツマンマシンを勉強していて、ベイズと関…

共役勾配法によるニューラルネットのパラメータ推定

Courseraの機械学習ネタの続き。前回は、ロジスティック回帰のパラメータ推定(2014/4/15)に共役勾配法(Conjugate Gradient: CG法)を使いました。今回はより複雑なニューラルネット(多層パーセプトロン)のパラメータ推定に共役勾配法を適用してみました…

共役勾配法によるロジスティック回帰のパラメータ推定

Courseraの機械学習ネタの続き。今回はロジスティック回帰をやってみます。回帰と付くのになぜか分類のアルゴリズム。以前、PRMLの数式をベースにロジスティック回帰(2010/4/30)を書いたけど今回はもっとシンプル。以下の3つの順にやってみたいと思います…

共役勾配法によるコスト関数最適化

今回もCourseraの機械学習ネタ。Courseraの講義ではロジスティック回帰やニューラルネットのパラメータ学習に共役勾配法(conjugate gradient method: CG法)やBFGSアルゴリズム(Broyden–Fletcher–Goldfarb–Shanno algorithm)*1 を使っていました。よく使…

線形回帰による曲線フィッティング

線形回帰による直線フィッティング(2014/4/1)のつづき。今回は、線形回帰で曲線フィッティングをしてみます。PRMLによると、線形回帰で曲線のフィッティングをするためには、入力変数を非線形の基底関数(basis function)で変換すればよいそうです。今回…

線形回帰による直線フィッティング

パターン認識と機械学習(PRML)まとめ(2010/8/29)のつづき。PRML3章の線形回帰(Linear Regression)を実装してみます。そういえば、3章の実装はまるまる無視していた。何でだろう?今回は、受講している Courseraの機械学習コースの第一週目の課題を参考…

多層パーセプトロンでMNISTの手書き数字認識

多層パーセプトロンで手書き数字認識(2014/2/1)の続き。今回は、簡易版のdigitsデータではなく、MNISTのより大規模な手書き数字データを使って学習してみます。 MNISTデータ MNISTは、28x28ピクセル、70000サンプルの数字の手書き画像データです。各ピクセ…

多層パーセプトロンで手書き数字認識

多層パーセプトロンが収束する様子(2014/1/23)の続き。数字認識は前にニューラルネットによるパターン認識(2005/5/5)をJavaで作りましたが今回はPythonです。今回は、多層パーセプトロンを用いて手書き数字を認識するタスクを実験します。今回からscikit…

多層パーセプトロンが収束する様子

多層パーセプトロンによる関数近似(2014/1/22)の続きです。もう少しスクリプトを改造し、実際に各重みと出力がどのように収束するかアニメーションにしてみました。ほとんどの関数は最初に急激に変化したあとだんだん収束していく様子が見てとれます。|x|…

多層パーセプトロンによる関数近似

パターン認識と機械学習(PRML)まとめ(2010/8/29)の続きです。以下、つづくかも?になってましたが、2014年はDeep Learningを勉強しよう(2014/1/4)と思っているので、関連するニューラルネットワーク関係の実験結果をもう少し追記します。今回は、PRML…

パターン認識と機械学習(PRML)まとめ

2010年は、パターン認識と機械学習(PRML)を読破して、機械学習の基礎理論とさまざまなアルゴリズムを身につけるという目標(2010/1/1)をたてています。もうすでに2010年も半分以上過ぎてしまいましたが、ここらでまとめたページを作っておこうと思います…

混合ガウスモデルとEM

今回は、9.2の混合ガウス分布のところです。混合ガウス分布はK個のガウス分布の線形重ね合わせで表されます。ここで、π_kを混合係数と言い、k番目のガウス分布を選択する確率を表します。π_kは確率の条件を満たし、すべてのkについて足し合わせると1になりま…

K-meansクラスタリング

9章のK-meansをPythonで実装してみます。データx_nをあらかじめ指定したK個のクラスタにわけることを考えます。各クラスタの重心をμ_kとします。K個のデータ平均(means)=重心があるからK-meansですね。さらに、2値指示変数r_nkを用意します。これは、デー…

ソフトマージンSVM

前回(2010/5/2)のハードマージンSVMでは、データに重なりがある場合、下のようにちゃんと分類境界を求められませんでした。今回は、重なりのあるクラス分布に対応できるように拡張してみます。このようなSVMはハードマージンSVMに対してソフトマージンSVM…

非線形SVM

今回は、非線形サポートベクトルマシンを試してみます。線形SVM(2010/5/1)は、カーネル関数に線形カーネル(ただの内積)を使いましたが、これを多項式カーネル(A)やガウスカーネル(B)に変更します。 カーネル関数は元のベクトルxを非線形写像によって…

線形SVM

下巻に入って7章のサポートベクトルマシン(Support Vector Machine: SVM)を実装してみます。SVMに関しては、有名なSVMのライブラリ(libsvm)を使ったことがあるだけで、アルゴリズム詳細はPRMLで初めて学習しました。なので変なことを書いていたらコメン…

ロジスティック回帰

今回は、ロジスティック回帰です。この方法はPRMLで初めて知りましたが、統計学の方では一般的な方法のようです。回帰という名前がついてますが、実際は分類のためのモデルとのこと。ロジスティック回帰では、クラス1の事後確率が特徴ベクトルの線形関数のロ…

パーセプトロン

今回は、4.1.7のパーセプトロンアルゴリズムを実装します。パーセプトロンは、2クラスの識別モデルで、識別関数は式(4.52)です。 パーセプトロンは、下の条件を満たすような重みベクトルwを学習します。教師信号は、クラス1のとき教師信号+1、クラス2のと…

フィッシャーの線形判別

今回は、4.1.4のフィッシャーの線形判別を試してみました。これは、他の手法と少し毛色が違う感じがします。まず、D次元の入力ベクトルxを(4.20)で1次元ベクトル(スカラー)に射影します。ベクトル同士の内積なので結果はスカラーで、wはxを射影する方向…

分類における最小二乗

4.1節は、データから識別関数を直接的に構成するアプローチとして、 最小二乗法 フィッシャーの線形判別 パーセプトロン が紹介されています。すべて線形識別モデルなので二次元なら直線、三次元なら平面、それ以上なら超平面で分離できる、つまり、線形分離…

最尤推定、MAP推定、ベイズ推定

1.2.5 曲線フィッティング再訪 1.2.6 ベイズ曲線フィッティングのところを実装してみます。前回は、最小二乗法で曲線フィッティングをしたけど、ベイズ的な方法で解こうって話のようです。この2つの節では、 最尤推定 最大事後確率(MAP)推定 ベイズ推定 と…

多項式曲線フィッティング

PRMLをよく理解する&復習のために自分でもコーディングしていきます。Rを使っている方がいて(Rでベイズ線形回帰の予測分布)Rでやろうかなぁと思ったのですが慣れているPythonを使うことにしました。Pythonにも数値計算用のSciPyとNumPy、グラフ描画のmatpl…

PRML読書中

今年の目標だったパターン認識と機械学習(PRML)を読書中。まだ完全に理解できてないところが多々あるけれど上巻が読み終わった。まだまだ数学がきつくて式変形が追いきれてないところもあったけど、ベイズ的な考え方とはどういうことか少しずつわかってき…