def evaluate_cluster_purities_all_states_(self): env = LehnertGridworld() all_states, all_state_labels = env.get_all_states() all_states = np.array(all_states) all_state_labels = np.array(all_state_labels) _, log_probs = self.model.encode(all_states) probs = np.exp(log_probs) dataset = ArrayDataset({constants.STATE_LABELS: all_state_labels}) cluster = Cluster(None, dataset) cluster.num_clusters = self.num_components cluster_map = cluster.assign_label_to_each_cluster_soft(probs) purities, sizes, mean_purity = cluster.evaluate_purity_soft(probs) mean_i_purity, i_scores, i_totals = cluster.evaluate_inverse_purity_soft( probs, cluster_map) self.logger.info("all states mixture soft purity: {:.2f}%".format( mean_purity * 100)) self.logger.info( "all states mixture inverse soft purity: {:.2f}%".format( mean_i_purity * 100)) self.saver.save_array_as_txt([mean_purity, mean_i_purity], "cluster_purity_all_states")
def evaluate_purities_all_states_(self): dataset = ArrayDataset({constants.STATE_LABELS: self.all_state_labels}) cluster = Cluster(None, dataset) cluster.num_clusters = len(self.partition) probs = np.zeros((len(self.all_states), len(self.partition))) for block_idx, block in enumerate(self.partition): for state_idx in block: probs[state_idx, block_idx] = 1.0 cluster_map = cluster.assign_label_to_each_cluster_soft(probs) purities, sizes, mean_purity = cluster.evaluate_purity_soft(probs) mean_i_purity, i_scores, i_totals = cluster.evaluate_inverse_purity_soft( probs, cluster_map) self.logger.info("state mixture soft purity: {:.2f}%".format( mean_purity * 100)) self.logger.info("state mixture inverse soft purity: {:.2f}%".format( mean_i_purity * 100)) self.saver.save_array_as_txt( [mean_purity, mean_i_purity, len(self.partition)], "cluster_purity")