Morris 敏感性分析#
API 参考链接:MorrisSensitivity
Morris 的支持仓库请参见此处。
摘要
Morris 方法[1]也被称为“一次一步”(OAT) 全局敏感性分析,每次运行时只调整一个输入的水平(离散值)。相较于其他敏感性分析算法,Morris 方法速度快(模型执行次数少),但代价是无法区分非线性与交互作用。它常用于筛选哪些输入变量足够重要,以便进行进一步分析。此实现使用了 SALib
[2] 库的 Morris 方法。
工作原理
gsa-module
包对用于筛选的 Morris 方法提供了良好的概念性概述,请参见此处。
SALib
包在基本层面描述了什么是敏感性分析以及进行分析所需的步骤,请参见此处。
代码示例
以下代码将使用乳腺癌数据集训练一个黑盒管线。之后,它将使用 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.