当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python cuml.explainer.PermutationExplainer用法及代码示例


用法:

class cuml.explainer.PermutationExplainer(*, model, data, masker_type='independent', link='identity', handle=None, is_gpu_model=None, random_state=None, dtype=None, output_type=None, verbose=False)

SHAP 的 PermutationExplainer 的 GPU 加速版本

cuML 基于 SHAP 的解释器加速了 SHAP 的算法部分。它们经过优化,可与基于 GPU 的快速模型一起使用,例如 cuML 中的模型。通过创建数据集和内部计算,以及最小化数据复制和传输,他们可以显著加快解释速度。但它们也可以与基于 CPU 的模型一起使用,在这些模型中仍然可以实现加速,但这些可能会受到数据传输和模型速度等因子的限制。

PermutationExplainer 在算法上类似并且基于 Python SHAP 包内核解释器:https://github.com/slundberg/shap/blob/master/shap/explainers/_kernel.py

此方法通过迭代输入的排列来逼近 Shapley 值。来自 SHAP 库文档:它通过在正向和反向方向上完全迭代特征的整个排列来保证局部准确性(可加性)。

GPU版本的当前特点:

  • 通过显式传递后台数据集,目前仅支持表格数据。

  • 欧文值的层次聚类计划在不久的将来进行。

  • 计划在不久的将来提供稀疏数据支持。

设置随机种子

该解释器使用 CuPy 生成所使用的排列,因此要获得可重现的结果,请使用 CuPy’s seeding mechanism

参数

model函数

在给定一组输入数据样本的情况下执行模型的可调用 python 对象。

masker包含浮点数或双精度数的密集矩阵。

cuML 的排列 SHAP 目前支持表格数据,因此它需要一个背景数据集,而不是 shap.masker 对象。要尊重数据的层次结构,请使用(临时)参数masker_type 可接受的格式:CUDA 数组接口兼容对象,如 CuPy、cuDF DataFrame/Series、NumPy ndarray 和 Pandas DataFrame/Series。

masker_type: {‘independent’, ‘partition’} default = ‘independent’

如果使用‘independent’,那么这相当于SHAP的独立masker,算法完全GPU加速。如果‘partition’则相当于SHAP的Partition masker,它尊重背景数据中的层次结构。

link函数或字符串(默认 = ‘identity’)

用于在模型的输出单元和 SHAP 值单元之间映射的链接函数。来自 SHAP 包:用于在模型的输出单位和 SHAP 值单位之间进行映射的链接函数。默认情况下它是恒等式,但 logit 可能很有用,因此期望以概率单位计算,而解释保持在(更自然地添加)log-odds 单位。有关链接函数如何工作的更多详细信息,请参阅广义线性模型的链接函数的任何概述。

gpu_model布尔或无(默认 = 无)

如果 None Explainer 将尝试推断 model 是否可以获取 GPU 数据(作为 CuPy 数组),否则它将使用 NumPy 数组调用 model 。设置为 True 强制解释器使用 GPU 数据,设置为 False 强制解释器使用 NumPy 数据。

handlecuml.raft.common.handle(默认 = 无)

指定在此模型中保存用于计算的内部 CUDA 状态的句柄,如果它是无则创建一个新的。最重要的是,这指定了将用于模型计算的 CUDA 流,因此用户可以通过在多个流中创建句柄在不同的流中同时运行不同的模型。

dtypenp.float32 或 np.float64(默认 = 无)

用于指定要生成以调用模型的数据精度的参数。如果未指定,解释器将尝试获取模型的 dtype,如果无法查询,则默认为 np.float32。

output_type‘cupy’ or ‘numpy’(默认 = ‘numpy’)

用于指定要输出的数据类型的参数。如果不指定,解释器将暂时默认为‘numpy’,以提高兼容性。

例子

>>> from cuml import SVR
>>> from cuml import make_regression
>>> from cuml import train_test_split
>>>
>>> from cuml.explainer import PermutationExplainer
>>>
>>> X, y = make_regression(
...     n_samples=102,
...     n_features=10,
...     noise=0.1,
...     random_state=42)
>>>
>>> X_train, X_test, y_train, y_test = train_test_split(
...     X,
...     y,
...     test_size=2,
...     random_state=42)
>>>
>>> model = SVR().fit(X_train, y_train)
>>>
>>> cu_explainer = PermutationExplainer(
...     model=model.predict,
...     data=X_train)
>>>
>>> cu_shap_values = cu_explainer.shap_values(X_test)
<class 'list'>
>>>
>>> cu_shap_values
array([[-0.0225287 , -0.15753658, -0.14129443, -0.04841001, -0.21607995,
        -0.08518306, -0.0558504 , -0.09816966, -0.06009924, -0.05091984],
       [ 0.23368585,  0.14425121, -0.10782719,  0.4295706 ,  0.12154603,
         0.509903  ,  0.22636597, -0.01573469,  0.24435756,  0.15525377]],
      dtype=float32)

相关用法


注:本文由纯净天空筛选整理自rapids.ai大神的英文原创作品 cuml.explainer.PermutationExplainer。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。