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


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