注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿弥陀佛

街树飘影未见尘 潭月潜水了无声 般若观照心空静...

 
 
 

日志

 
 
关于我

一直从事气象预报、服务建模实践应用。 注重气象物理场、实况场、地理信息、本体知识库、分布式气象内容管理系统建立。 对Barnes客观分析, 小波,计算神经网络、信任传播、贝叶斯推理、专家系统、网络本体语言有一定体会。 一直使用Java、Delphi、Prolog、SQL编程。

网易考拉推荐

Metropolis-Hastings en Scala  

2016-09-15 22:14:44|  分类: Scala |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

https://www.datanalytics.com/2016/06/16/metropolis-hastings-en-scala/
datos <- rnorm(500, 0.7, 1)
writeLines(as.character(datos), "/tmp/datos.txt")

import scala.io.Source
import java.io.PrintWriter

/* read data */
val source = Source.fromFile("/tmp/datos.txt", "UTF-8")
val data = source.mkString.split("\\s+").map(_.toDouble).toList

/* we need random numbers */
var r = scala.util.Random

/* almost (standard) dnorm */
def dnorm(x:Double): Double = math.exp(-x*x/2)

/* chain transitions */
def rg(y:Double):Double = y + r.nextGaussian

/* prior (standard normal) times likelihood */
def dpost(x:Double): Double = dnorm(x) * data.map(y => dnorm(x - y)).reduce(_*_) 

/* metropolis-hastings acceptance ratio */
def acceptanceRatio(from:Double, to:Double):Double = dpost(to) / dpost(from)

def posterior(a:Double):Stream[Double] = {
  lazy val elegidos = Stream.continually(a) map rg filter (x => r.nextDouble < acceptanceRatio(a, x))
  a #:: posterior(elegidos.head) 
}

/* Get values and drop burning obs */
val res = posterior(0.4).take(10000).toList.drop(2000)

/* Thin */
val res_thin = res zip (Stream from 1) filter (_._2 % 5 == 0) map (_._1)

/* Export */
val out = new PrintWriter("/tmp/posterior.txt")
res map out.println
out.close()
  评论这张
 
阅读(35)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017