# Code from Chapter 15 of Machine Learning: An Algorithmic Perspective (2nd Edition) # by Stephen Marsland (http://stephenmonika.net) # You are free to use, change, or redistribute the code in any way you wish for # non-commercial purposes, but please maintain the name of the original author. # This code comes with no warranty of any kind. # Stephen Marsland, 2008, 2014 # The Sampling-Importance-Resampling algorithm import pylab as pl import numpy as np def p(x): return 0.3*np.exp(-(x-0.3)**2) + 0.7* np.exp(-(x-2.)**2/0.3) def q(x): return 4.0 def sir(n): sample1 = np.zeros(n) w = np.zeros(n) sample2 = np.zeros(n) # Sample from q sample1 = np.random.rand(n)*4 # Compute weights w = p(sample1)/q(sample1) w /= np.sum(w) # Sample from sample1 according to w cumw = np.zeros(len(w)) cumw[0] = w[0] for i in range(1,len(w)): cumw[i] = cumw[i-1]+w[i] u = np.random.rand(n) index = 0 for i in range(n): indices = np.where(u