當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。