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


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


用法:

class cuml.explainer.KernelExplainer(*, model, data, nsamples='auto', link='identity', verbose=False, random_state=None, is_gpu_model=None, handle=None, dtype=None, output_type=None)

SHAP 内核解释器的 GPU 加速。

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

KernelExplainer 基于 Python SHAP 包的 KernelExplainer 类:https://github.com/slundberg/shap/blob/master/shap/explainers/_kernel.py

GPU版本的当前特点:

  • 与 SHAP 包不同,nsamples 是解释器初始化时的参数,初始化时间很小。

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

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

  • 进一步的优化正在进行中。例如,如果背景数据集具有常量值列,并且观察值在某些条目中具有相同的值,则可以减少函数的评估次数(这将在下一个版本中出现)。

参数

model函数

采用样本矩阵 (n_samples, n_features) 并计算具有形状 (n_samples) 的样本的输出的函数。函数必须使用 CuPy 或 NumPy 数组作为输入/输出。

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

cuML 的内核 SHAP 目前支持表格数据,因此它需要一个背景数据集,而不是 shap.masker 对象。用于集成特征的背景数据集。为了确定某个特征的影响,将该特征设置为“missing”,并观察模型输出的变化。可接受的格式:CUDA 数组接口兼容对象,如 CuPy、cuDF DataFrame/Series、NumPy ndarray 和 Pandas DataFrame/Series。

nsamples整数(默认 = 2 * data.shape[1] + 2048)

解释每个预测时重新评估模型的次数。更多样本导致 SHAP 值的方差估计值更低。 “auto” 设置使用 nsamples = 2 * X.shape[1] + 2048

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

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

random_state: int, RandomState instance or None (default = None)

用于创建数据集的随机数生成器的种子。注意:由于采样算法的设计,并发会影响结果,因此目前不能保证 100% 确定性执行。

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 KernelExplainer
>>>
>>> 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 = KernelExplainer(
...     model=model.predict,
...     data=X_train,
...     gpu_model=True)
>>>
>>> cu_shap_values = cu_explainer.shap_values(X_test)
>>> cu_shap_values
array([[ 0.02104662, -0.03674018, -0.01316485,  0.02408933, -0.5943235 ,
         0.15274985, -0.01287319, -0.3050412 ,  0.0262317 , -0.07229283],
       [ 0.15244992,  0.16341315, -0.09833339,  0.07259235, -0.17099564,
         2.7372282 ,  0.0998467 , -0.29607034, -0.11780564, -0.50097287]],
      dtype=float32)

相关用法


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