FEDOT
39 строк · 1.7 Кб
1from fedot.core.data.data import InputData2from fedot.core.pipelines.pipeline import Pipeline3from fedot.core.repository.tasks import TaskTypesEnum4from fedot.explainability.surrogate_explainer import SurrogateExplainer5
6
7def pick_pipeline_explainer(pipeline: 'Pipeline', method: str, task_type: TaskTypesEnum):8if method == 'surrogate_dt':9if task_type == TaskTypesEnum.classification:10surrogate = 'dt'11elif task_type == TaskTypesEnum.regression:12surrogate = 'dtreg'13else:14raise ValueError(f'Surrogate tree is not applicable for the {task_type} task')15explainer = SurrogateExplainer(pipeline, surrogate=surrogate)16else:17raise ValueError(f'Explanation method {method} is not supported')18
19return explainer20
21
22def explain_pipeline(pipeline: 'Pipeline', data: 'InputData', method: str = 'surrogate_dt',23visualization: bool = False, **kwargs) -> SurrogateExplainer:24"""Create explanation for the `pipeline` according to the selected `method`.25An `Explainer` instance is returned.
26
27:param pipeline: pipeline to explain.
28:param data: samples to be explained.
29:param method: explanation method, defaults to 'surrogate_dt'. Options: ['surrogate_dt', ...]
30:param visualization: print and plot the explanation simultaneously, defaults to True.
31The explanation can be retrieved later by executing `explainer.visualize()`.
32"""
33if not pipeline:34raise AssertionError('The pipeline might be fit before explanation!')35
36explainer = pick_pipeline_explainer(pipeline, method, data.task.task_type)37explainer.explain(data, visualization=visualization, **kwargs)38
39return explainer40