shap.plots.decision

shap.plots.decision(base_value: float | ndarray, shap_values: ndarray, features: ndarray | Series | DataFrame | list | None = None, feature_names=None, feature_order='importance', feature_display_range=None, highlight=None, link='identity', plot_color=None, axis_color='#333333', y_demarc_color='#333333', alpha=None, color_bar=True, auto_size_plot=True, title=None, xlim=None, show=True, return_objects=False, ignore_warnings=False, new_base_value=None, legend_labels=None, legend_location='best') DecisionPlotResult | None

使用累积 SHAP 值可视化模型决策。

每条绘制的线解释一个单一的模型预测。如果绘制的是单个预测,特征值将被打印在图中(如果提供)。如果同时绘制多个预测,则不会打印特征值。同时绘制过多的预测会使图表难以辨认。

参数:
base_valuefloat 或 numpy.ndarray

这是特征贡献的起始参考值。通常,这是 explainer.expected_value

shap_valuesnumpy.ndarray

来自 explainer.shap_values() 的 SHAP 值矩阵(# 特征)或(# 样本 x # 特征)。或来自 explainer.shap_interaction_values() 的 SHAP 交互值立方体(# 样本 x # 特征 x # 特征)。

featuresnumpy.array 或 pandas.Series 或 pandas.DataFrame 或 numpy.ndarray 或 list

特征值矩阵(# 特征)或(# 样本 x # 特征)。这提供了所有特征的值,以及可选的特征名称。

feature_nameslist 或 numpy.ndarray

特征名称列表(# 特征)。如果为 None,且 features 参数提供了 Pandas 对象,则可以从中派生名称。否则,将生成数字特征名称。

feature_orderstr 或 None 或 list 或 numpy.ndarray

可以是“importance”(默认值)、“hclust”(层次聚类)、None,或一个索引列表/数组。

feature_display_range: slice 或 range

feature_order 对特征进行排序后要绘制的特征切片或范围。步长为 1 或 None 将以升序显示特征。步长为 -1 将以降序显示特征。如果 feature_display_range=None,则使用 slice(-1, -21, -1)(即以降序显示最后 20 个特征)。如果 shap_values 包含交互值,特征数量会自动扩展以包括所有可能的交互:N(N + 1)/2,其中 N = shap_values.shape[1]

highlightAny

指定哪些观测值以不同的线条样式绘制。支持所有 numpy 索引方法。例如,整数索引列表或布尔数组。

linkstr

使用 “identity” 或 “logit” 来指定 x 轴使用的转换。 “logit” 链接将对数几率(log-odds)转换为概率。

plot_colorstr 或 matplotlib.colors.ColorMap

用于绘制图线的颜色光谱。如果为 str,则假定为已注册的 matplotlib 颜色名称。

axis_colorstr 或 int

用于绘制图表坐标轴的颜色。

y_demarc_colorstr 或 int

用于在 y 轴上绘制特征分界线的颜色。

alphafloat

用于绘制图线的 Alpha 混合值,范围在 [0, 1] 之间。

color_barbool

是否绘制颜色条(图例)。

auto_size_plotbool

是否自动调整 matplotlib 图的大小以适应显示的特征数量。如果为 False,请在调用此函数之前使用 matplotlib 指定图的大小。

titlestr

图表的标题。

xlim: tuple[float, float]

x 轴的范围(例如 (-1.0, 1.0))。如果未指定,当 link="identity" 时,界限由以 base_value 为中心的最大/最小预测值确定。当 link="logit" 时,x 轴范围为 (0, 1),中心在 0.5。xlim 的值不会被 link 函数转换。提供此参数是为了简化在相同尺度上生成多个图表以进行比较。

showbool

在返回前是否调用 matplotlib.pyplot.show()。将此设置为 False 允许在创建图表后对其进行进一步的自定义。

return_objectsbool

是否返回一个包含各种绘图特性的 DecisionPlotResult 对象。这可用于使用相同的特征排序和尺度生成多个决策图。

ignore_warningsbool

一次性绘制大量数据点或过多特征可能会很慢,或者可能创建非常大的图表。将此参数设置为 True 可覆盖阻止绘制大量数据的硬编码限制。

new_base_valuefloat

SHAP 值是相对于一个基准值的。默认情况下,这个基准值是模型原始预测的期望值。使用 new_base_value 可以将基准值移动到任意值(例如,二元分类任务的截断点)。

legend_labelslist of str

图例标签列表。如果为 None,则不显示图例。

legend_locationstr

图例位置。可以是 “best”、“upper right”、“upper left”、“lower left”、“lower right”、“right”、“center left”、“center right”、“lower center”、“upper center”、“center” 中的任意一个。

返回:
DecisionPlotResult 或 None

如果 return_objects=True,则返回一个 DecisionPlotResult 对象。否则返回 None(默认值)。

示例

使用相同的特征顺序和 x 轴绘制两个决策图。

>>> range1, range2 = range(20), range(20, 40)
>>> r = decision_plot(base, shap_values[range1], features[range1], return_objects=True)
>>> decision_plot(base, shap_values[range2], features[range2], feature_order=r.feature_idx, xlim=r.xlim)

在此处查看更多决策图示例