ret_lists集合了所有layer、所有cuboid下的根因
ret_lists = [] for cuboid_layer in np.arange(max_cuboid_layer) + 1: layer_ret_lists = list(map( lambda x, _i=indices, _mu=mu, _sigma=sigma: self._locate_in_cuboid(x, indices=_i, mu=_mu, sigma=_sigma), combinations(self.attribute_names, cuboid_layer) )) ret_lists.extend([ { 'rc': x[0], 'score': x[1], 'n_ele': len(x[0]), 'layer': cuboid_layer, 'rank': x[1] * self.option.score_weight - len(x[0]) * cuboid_layer } for x in layer_ret_lists ]) if len(list(filter(lambda x: x['score'] > self.option.ps_upper_bound, ret_lists))): break ret_lists = list(sorted( ret_lists, key=lambda x: x['rank'], reverse=True) ) if ret_lists: ret = ret_lists[0]['rc'] logger.debug( f"find root cause: {AC.batch_to_string(ret)}, rank: {ret_lists[0]['rank']}, score: {ret_lists[0]['score']}") self._root_cause.append(frozenset(ret)) else: logger.info("failed to find root cause")
若在layer=3时,找到根因的分数大于阈值,停止遍历layer。但是,ret_lists是集合了所有layer、所有cuboid下的根因,经过rank排序后,在该类下,找到的根因很有可能是layer=1的根因且score分数很低。这种情况的出现,那么根因的分数大于阈值,停止遍历layer的意义何在呢?是否可以直接给出分数大于分数阈值的根因(对满足阈值的根因,进行rank排序,取第一个作为该类根因?) 麻烦作者,给出解释,谢谢!