人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

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…