タグ

ブックマーク / teramonagi.hatenablog.com (6)

  • 俺が思ってたんと違う挙動の遅延評価 - My Life as a Mock Quant

    ある程度コードを抽象化しようと言う時に「関数を返す関数」を使うのは良いアイディアだと思うのですが、以下のように書くとハマれるってのでメモ。 ここでは「異なるパラメーター(1〜3)を持つ3つの関数を生成し、それぞれに対して実際の計算を行うものの…期待する結果とはずれる」という話です。 コードはこんな感じ。 #関数返す関数 make.hoge <- function(m){function(x)x*m} #1*x, 2*x, 3*xとなるような関数リストを返してる(つもり) hoges <- sapply(1:3, make.hoge) #1を期待 hoges[[1]](1) #2を期待 hoges[[2]](1) #3を期待 hoges[[3]](1) これを直すにはただ1行、「変数mを強制的に評価する」ようなコードをmake.hoge関数の中に追加すれば良い。これでちゃんと直る! #関数返

    俺が思ってたんと違う挙動の遅延評価 - My Life as a Mock Quant
    biochem_fan
    biochem_fan 2013/12/08
    この落とし穴は普通に踏みそうで怖い
  • レプリカ交換モンテカルロ法(パラレル・テンパリング)による混合ガウス分布に従う乱数の生成 - My Life as a Mock Quant

    マルコフ連鎖モンテカルロ法(メトロポリス法)による混合ガウス分布に従う乱数の生成 - My Life as a Mock Quant でやった内容の欠点とそれを補うためにもうちょっと高尚な手法である拡張アンサンブル法の1つ「レプリカ交換モンテカルロ法」を用いてやりましたよというお話。 シミュレーション条件・パラメーター設定に関しては適当なんで要考察。自分が扱いたい問題に応じてこれはやらないといけない。 通常のマルコフ連鎖モンテカルロ法(MCMC)での問題点 マルコフ連鎖モンテカルロ法(メトロポリス法)による混合ガウス分布に従う乱数の生成 - My Life as a Mock Quant でやった通常のいわゆるマルコフ連鎖モンテカルロ法を用いた「混合ガウス分布」からの乱数生成方法だと、2つのガウシアンのピーク(平均値)が離れているとうまくいかない。 実際に平均値を(-3,-3),(3,3)

    レプリカ交換モンテカルロ法(パラレル・テンパリング)による混合ガウス分布に従う乱数の生成 - My Life as a Mock Quant
  • マルコフ連鎖モンテカルロ法(メトロポリス法)による混合ガウス分布に従う乱数の生成 - My Life as a Mock Quant

    平均(1,1),(-1,-1)となるような2つのガウシアンを3:7の割合で混ぜ合わせた2次元混合ガウス分布に従う乱数をマルコフ連鎖モンテカルロ法の1つであるメトロポリス法で生成するコードを書いた。 実行すると↓のように混合比率から若干(-1,-1)のガウシアンの方に引き寄せられた形になる。

    マルコフ連鎖モンテカルロ法(メトロポリス法)による混合ガウス分布に従う乱数の生成 - My Life as a Mock Quant
  • zooパッケージを使って行列の欠損値を補間する(R Advent Calendar 2011) - My Life as a Mock Quant

    R Advent Calendar 2011 : ATNDに参加中でして、その担当分の記事です。 さて掲題の話ですが、たまに(しょっちゅう?)歯抜けになってる値を含む行列やデータを捌かなきゃいけないことがありまして、その際にはよくRの市販にあるように x[is.na(x)] <- 0 と欠損値の箇所をある”特定の値”で置いてしまうことが多かったのですが、 もうちょっと行列(あるいはデータフレーム)の特徴を活かした値の補間ができないものかと考えていた所、 普通は時系列処理に使う”zooパッケージ”に入ってるna.locf等の補間系関数を使えばもっと色々とできるじゃないかと思いつきやってみたという内容です。 何はともあれまずはパッケージのインストール&読み込み install.packages("zoo") library(zoo)ここではサンプルコードとしてちょうど真ん中の要素に欠損値を持

    zooパッケージを使って行列の欠損値を補間する(R Advent Calendar 2011) - My Life as a Mock Quant
    biochem_fan
    biochem_fan 2013/07/22
    データのクリーニングに
  • foreach+doSNOWパッケージを使って、並列処理をやってみた - My Life as a Mock Quant

    なんだかweb屋界隈ではHadoopだのMahoutだの象を使うだの使わないだの楽しそうな事をやっていて、私はとてもさみしく、そしてうらやましくもなったわけですが手元にそんな立派な環境なんてないわけで。しかし、そんな私にもマルチコアのパソコンが与えられているのでそれで計算の並列化をやってみた。OSはwindows XP(32bit)。 使うのは統計数理研究所のセミナーでお薦めされていたforeachパッケージ*1。これはRevlution Rの人たちが作っているので今後とも継続的な開発と進化が期待できるとのこと。まずは、doSNOWパッケージも合わせてインストール。 install.packages("foreach") install.packages("doSNOW") foreachパッケージではforループの並列化をしてくれるのですが、処理を並列化させないで書くこともできるのでまず

    foreach+doSNOWパッケージを使って、並列処理をやってみた - My Life as a Mock Quant
    biochem_fan
    biochem_fan 2013/07/04
    分かりやすい。
  • EMアルゴリズムによる混合分布のパラメーター推定の解析計算&実装例 from 「Rによるモンテカルロ法入門」 - My Life as a Mock Quant

    問題設定 R言語の書籍「Rによるモンテカルロ法入門」 のEMアルゴリズムに関連した「練習問題5.14」をpthonの練習がてらEMアルゴリズム構築までの数式もメモりながら解いてみたというお話。問題設定としては という混合分布(分布から確率、分布から確率でサンプリング)から個サンプリングした状況を考えて、このパラメーターをEMアルゴリズムで推定するというもの。機械学習の分野でいう所の「教師なし2クラス分類」に該当する(たぶん)。 グラフを使ってもうちょっとちゃんと説明しておくと、実際に観察された青い棒グラフで示されているデータは赤色のグラフで示されているからのサンプルなのか、それとも緑色のグラフで示されているからのサンプルなのかを識別するための閾値的な量になっているというパラメーターを推定してましょうと、そして、既存のデータはのどちらの分布から来た可能性が高いのかを判断しましょうとそういう問

    EMアルゴリズムによる混合分布のパラメーター推定の解析計算&実装例 from 「Rによるモンテカルロ法入門」 - My Life as a Mock Quant
  • 1