Morris 敏感性分析#

API 参考链接:MorrisSensitivity

Morris 的支持仓库请参见此处

摘要

Morris 方法[1]也被称为“一次一步”(OAT) 全局敏感性分析,每次运行时只调整一个输入的水平(离散值)。相较于其他敏感性分析算法,Morris 方法速度快(模型执行次数少),但代价是无法区分非线性与交互作用。它常用于筛选哪些输入变量足够重要,以便进行进一步分析。此实现使用了 SALib[2] 库的 Morris 方法。

工作原理

gsa-module 包对用于筛选的 Morris 方法提供了良好的概念性概述,请参见此处

SALib 包在基本层面描述了什么是敏感性分析以及进行分析所需的步骤,请参见此处

Morris 方法的开创性论文[1]可在此处找到。

代码示例

以下代码将使用乳腺癌数据集训练一个黑盒管线。之后,它将使用 Morris 方法解释该管线及其决策。提供的可视化结果将用于全局解释。

from interpret import set_visualize_provider
from interpret.provider import InlineProvider
set_visualize_provider(InlineProvider())
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split

from sklearn.ensemble import RandomForestClassifier
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline

from interpret import show
from interpret.blackbox import MorrisSensitivity

seed = 42
np.random.seed(seed)
X, y = load_breast_cancer(return_X_y=True, as_frame=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=seed)

pca = PCA()
rf = RandomForestClassifier(random_state=seed)

blackbox_model = Pipeline([('pca', pca), ('rf', rf)])
blackbox_model.fit(X_train, y_train)

msa = MorrisSensitivity(blackbox_model, X_train)

show(msa.explain_global())

更多资源

参考文献

[1] Max D Morris. Factorial sampling plans for preliminary computational experiments. Technometrics, 33(2):161–174, 1991.

[2] Jon Herman and Will Usher. Salib: an open-source python library for sensitivity analysis. Journal of Open Source Software, 2(9):97, 2017.