def _init_partition(self, base_measure): self.partition = Partition() for item, _ in enumerate(self.data): self.partition.add_cell(base_measure.random()) self.partition.add_item(item, item)
def initialise_partition(self, data, init_method): ''' Args: data : (list) Data points. Kwargs: method : (str) Initialisation method to use. - 'separate' will allocate each data point to a separate partition. - 'together' will allocate all data points to the same partition. ''' self.partition = Partition() if init_method == 'separate': for item, _ in enumerate(data): self.partition.add_cell( self.partition_sampler.base_measure.random()) self.partition.add_item(item, item) elif init_method == 'together': self.partition.add_cell( self.partition_sampler.base_measure.random()) for item, _ in enumerate(data): self.partition.add_item(item, 0)
def draw_from_prior(base_measure, size): alpha = gamma_rvs(1, 1) # partition = sample_from_crp(alpha, size, base_measure) partition = Partition() partition.add_cell(base_measure.random()) for item in range(size): partition.add_item(item, 0) return alpha, partition
def sample_from_crp(alpha, size, base_measure): labels = [] values = [] tables = [] # Seat the first customer tables.append([ 0, ]) labels.append(0) values.append(base_measure.random()) for customer in range(1, size): p = _get_table_probabilities(tables, alpha) table_id = discrete_rvs(p) if table_id == len(tables): tables.append([ customer, ]) values.append(base_measure.random()) else: tables[table_id].append(customer) labels.append(table_id) partition = Partition() for v in values: partition.add_cell(v) for item, cell_index in enumerate(labels): partition.add_item(item, cell_index) return partition
def initialise_partition(self, data): self.partition = Partition() for item, _ in enumerate(data): self.partition.add_cell(self.base_measure.random()) self.partition.add_item(item, item)
for i in range(1000): x = poisson_rvs(100) data.append(PoissonData(x)) for i in range(50): x = poisson_rvs(25) data.append(PoissonData(x)) alpha = 1 base_measure = GammaBaseMeasure(1, 1) cluster_density = PoissonDensity() partition = Partition() for item, data_point in enumerate(data): partition.add_cell(base_measure.random()) partition.add_item(item, item) concentration_sampler = GammaPriorConcentrationSampler(1, 1) posterior_density = NegativeBinomialDensity() partition_sampler = MarginalGibbsPartitionSampler(base_measure, cluster_density, posterior_density) #partition_sampler = AuxillaryParameterPartitionSampler(base_measure, cluster_density) atom_sampler = GammaPoissonGibbsAtomSampler(base_measure, cluster_density)