def _setup_particle_filters(self, n_particles, state_kappa, observation_kappa, outlier_prob): """ Setup the distributions needed by PartcileFilter in pybayes """ sys.stdout.flush() self._n_particles = n_particles self._state_kappa = state_kappa self._obs_kappa = observation_kappa ndim = self._get_effective_n_dimensions() # State RVs self._x_t = pb.RV(pb.RVComp(ndim, 'x_t')) self._x_t_1 = pb.RV(pb.RVComp(ndim, 'x_{t-1}')) # Observation RV self._y_t = pb.RV(pb.RVComp(ndim, 'y_t')) # Initial state RV self._x0 = pb.RV(pb.RVComp(ndim, 'x0')) init_kappa = .5 # Really small so is almost uniform init_mu = np.ones((ndim, )) # Create distributions self._state_distribution = \ VonMisesCPdf(self._state_kappa, self._x_t, self._x_t_1) self._obs_distribution = \ VonMisesCPdf(self._obs_kappa, self._y_t, self._x_t) self._init_distribution = \ VonMisesPdf(init_mu, init_kappa, self._x0) # Setup distribution for outliers if outlier_prob < 0 or outlier_prob > 1: raise ValueError("Outlier probability must be between 0 and 1") self._outlier_rv = pb.RV(pb.RVComp(ndim, 'outlier')) self._outlier_mu = np.hstack((np.array([0, -1.]), np.zeros( (ndim - 2, )))) self._outlier_kappa = .001 self._outlier_prob = outlier_prob # Probability of generation from background pdf self._outlier_distribution = \ VonMisesPdf(self._outlier_mu, self._outlier_kappa, self._outlier_rv) # Do particle filtering ourselves... self._posterior = EmpPdf( self._init_distribution.samples(self._n_particles)) self._estimate = self._get_estimate() self._count = 0 # Create a set of weights for tracking the distribution p(c_t|x_t,y_{1:t}) self._class_weights = np.array([.5, .5]) # Matrix used to store weights for each particle for each class in order # to calculate class posterior weights and state posterior weights self._joint_weights = np.ones(( 2, self._n_particles, ))
def _setup_particle_filters(self, n_particles, state_kappa): """ Setup the distributions needed by PartcileFilter in pybayes """ sys.stdout.flush() self._n_particles = n_particles self._state_kappa = state_kappa ndim = self._get_effective_n_dimensions() # State RVs self._x_t = pb.RV(pb.RVComp(ndim, 'x_t')) self._x_t_1 = pb.RV(pb.RVComp(ndim, 'x_{t-1}')) # Initial state RV self._x0 = pb.RV(pb.RVComp(ndim, 'x0')) init_kappa = .5 # Really small so is almost uniform init_mu = np.ones((ndim, )) # Create distributions self._state_distribution = \ VonMisesCPdf(self._state_kappa, self._x_t, self._x_t_1) self._init_distribution = \ VonMisesPdf(init_mu, init_kappa, self._x0) # Do particle filtering ourselves... self._posterior = EmpPdf( self._init_distribution.samples(self._n_particles)) self._estimate = self._get_estimate() self._count = 0