interact$(`take`cycle"abcd").readinteract使って書くとごちゃごちゃしそうだったので、doブロックで書いた。Control.MonadのliftMは便利。bjinさんはゴルフ好きな感じである。operationにしてセクション(二項演算子の部分適用をするための手法)を実現してるのは面白いテクニックだなーと。Abacondaモナドを実装したり、メモ化したり、コンビネータを書いたりとかしたけど、Haskellらしいコードが全然書けない。一応は動くものは書けるけど、どうも命令型で関数型っぽくない。いうことで、Haskellらしいコードが書けるように修行する。"らしい"コードを書けるようになるためには、素晴らしいプログラマが書いた"らしい"コードをたくさん読んで吸収していくのが一番じゃないかなと思う。いうことで、しばらく以下をやっていこうと思います。(g.toLower)ポイント:elemconcatMapinteract”Haskellらしい”うんぬんより、まず便利な関数を覚えていくところからかな。教えてもらったので忘れないうちにメモ。MySQLのポートを調べたいときは、以下のようにします。TCPlsofはプロセスによって開かれているファイルの情報を出力するらしいです。ここでいう"ファイル"とは、通常のファイルやディレクトリ、さらにはライブラリ、ストリーム、ネットワークファイルまで含まれます。-Pオプションは、ポート番号をポートの名前(サービス名)に変換するのを抑制するという意味です。(LISTEN)のようにポートの番号で表示されます。調べてみたところ、-iオプションというものもあって、これを使うとネットワーク関連の情報だけを取り出せます。上のコマンドは以下のようにしてもいいです。mysqllsofの他にも、socklistというコマンドがあるみたい。socklistとすると、lsofと同様に通信プロトコル、ポート番号、プロセスID、サービス名などが表示されます。こっちの方が楽ですねー。y)の発生確率が二次元正規分布に従う事象をサンプリングしてみます。この分布はグラフに書くと下のようになります。この確率分布に従う乱数を発生させたいと思います。今回は一番簡単なメトロポリス法を用いて推移確率を決定します。Haskellで書きました。自分の実力足らずでいろいろとやばいです。IOモナドのところが何かぎこちないです。Haskellもっと勉強しないとっ。0)それっぽい形になっています。1に近づいていくでしょう。数学2011年10月22日土曜日MCMC入門まとめマルコフ連鎖モンテカルロシミュレーション(MCMC)の入門資料をいくつか読んだので、分かったことと考えたことをメモしておく。不定分布が分かっているものから、マルコフ性を仮定して遷移確率を推定する。適当な初期条件を選んで、1.の推移確率を用いて推移させる。十分な回数ループしたら終了。なければ、2.へ戻る。ある特定の不定分布におちつく遷移確率行列は複数あることに注意。推移確率の選定には「詳細釣り合い」の条件(状態遷移図を書いたときに、確率のフローのようなものが釣り合っていると考える)が一般的に使われる。詳細釣り合いだけでは、自由度が残り値がfixしないため以下いずれかの方法で値を決める。いろいろな初期解に対するある時刻における各事象の発生確率(パターン数を無限にする)と、ある初期解について無限回推移させた場合の各事象の発生確率が等しくなる(エルゴード性)という特性が活かされている。1)にしたがう乱数とか、もっとわけの分からない適当なp(x)にしたがう乱数発生器を作れて言われると難しい。MCMCを用いると、簡単に任意の乱数発生器を作成できる。2.は、1.の応用のように思える。事象xが起こる確率をp(x)としてf(x)の期待値を求めよ。d(x)を計算することになるが、xの次元が大きいと計算が困難なためMCMCを利用したモンテカルロ積分がしばしば利用される。[考えたこと]MCMCはマルコフ性のある事象に対するシミュレーション手法だと勘違いしていたが、どちらかというと任意の確率分布にしたがうサンプリングデータを生成できるということに利用価値がありそうだ。MCMCでマルコフ性のある事象をシミュレーションする場合は、確率遷移行列の選び方がとても重要だと思う。パラメータの取り方に自由度があるメトロポリスヘイスティングが一番使えそうだが、提案密度の選び方にはどうしても主観が入ってしまいそう。MCMCはベイズ識別にも応用されているらしいので、そのあたりを詳しく調べる必要がありそうだ。(というかそこがそもそも知りたかったところなので。確率遷移行列の形と定常状態マルコフ性(単純マルコフ過程)をもつ事象がある確率推移のもと、どのような定常状態に落ち着くのか実験してみた。Haskellで書きました。いうのはHaskellが綺麗に書けますねー。収束時の事象の分布をxnとおきます。