PartialDependenceDisplay#

class sklearn.inspection.PartialDependenceDisplay(pd_results, *, features, feature_names, target_idx, deciles, kind='average', subsample=1000, random_state=None, is_categorical=None)[source]#

部分依赖图 (PDP) 和个体条件期望 (ICE)。

建议使用 from_estimator 来创建 PartialDependenceDisplay。所有参数都存储为属性。

有关 scikit-learn 可视化工具的一般信息,请参阅 可视化指南。有关解释这些图的指导,请参阅 检查指南

有关如何使用此类的示例,请参阅以下示例:使用部分依赖的高级绘图

版本 0.22 新增。

参数:
pd_resultsBunch 列表

featurespartial_dependence 结果。

features列表 (int,) 或 列表 (int, int)

给定图的特征索引。一个整数的元组将绘制一个特征的部分依赖曲线。两个整数的元组将绘制一个作为等高线图的双向部分依赖曲线。

feature_names字符串列表

features 中索引对应的特征名称。

target_idxint
  • 在多类别设置中,指定应计算 PDP 的类别。请注意,对于二元分类,始终使用正类别(索引 1)。

  • 在多输出设置中,指定应计算 PDP 的任务。

在二元分类或经典回归设置中忽略。

decilesdict

features 中特征索引的十分位数。

kind{'average', 'individual', 'both'} 或此类字符串列表, 默认='average'

是绘制数据集中所有样本的平均部分依赖性,还是每个样本一条线,或者两者都绘制。

  • kind='average' 产生传统的 PD 图;

  • kind='individual' 产生 ICE 图;

  • kind='both' 产生在同一图上同时绘制 ICE 和 PD。

可以提供此类字符串的列表,以按图指定 kind。列表的长度应与 features 中请求的交互次数相同。

注意

ICE('individual' 或 'both')对于双向交互图不是一个有效的选项。因此,将引发错误。双向交互图应始终配置为使用 'average' 种类。

注意

快速 method='recursion' 选项仅适用于 kind='average'sample_weights=None。计算个体依赖性并进行加权平均需要使用较慢的 method='brute'

在 0.24 版本中新增: 添加了 kind 参数,其中包含 'average''individual''both' 选项。

在 1.1 版本中新增: 增加了为每个图传递指定 kind 的字符串列表的可能性。

subsamplefloat, int 或 None, 默认=1000

kind 为 'individual' 或 'both' 时,用于 ICE 曲线的采样。如果为浮点数,应介于 0.0 和 1.0 之间,表示用于绘制 ICE 曲线的数据集比例。如果为整数,表示要使用的最大绝对样本数。

请注意,当 kind='both' 时,仍使用完整数据集计算部分依赖性。

0.24 版本新增。

random_stateint, RandomState instance or None, default=None

当 `subsamples` 不是 `None` 时,控制所选样本的随机性。有关详细信息,请参见 Glossary

0.24 版本新增。

is_categorical列表 (bool,) 或 列表 (bool, bool), 默认=None

features 中每个目标特征是否为分类特征。列表应与 features 大小相同。如果为 None,则所有特征都被假定为连续特征。

1.2 版本新增。

属性:
bounding_ax_matplotlib 坐标轴 或 None

如果 ax 是一个坐标轴或 None,则 bounding_ax_ 是绘制部分依赖图网格的坐标轴。如果 ax 是一个坐标轴列表或一个 numpy 坐标轴数组,则 bounding_ax_ 为 None。

axes_matplotlib 坐标轴的 ndarray

如果 ax 是一个坐标轴或 None,axes_[i, j] 是第 i 行第 j 列的坐标轴。如果 ax 是一个坐标轴列表,axes_[i]ax 中的第 i 个元素。None 元素对应于该位置不存在的坐标轴。

lines_matplotlib Artists 的 ndarray

如果 ax 是一个坐标轴或 None,lines_[i, j] 是第 i 行第 j 列的部分依赖曲线。如果 ax 是一个坐标轴列表,lines_[i] 对应于 ax 中的第 i 个元素的部分依赖曲线。None 元素对应于不存在的坐标轴或不包含线条图的坐标轴。

deciles_vlines_matplotlib LineCollection 的 ndarray

如果 ax 是一个坐标轴或 None,vlines_[i, j] 是表示第 i 行第 j 列 x 轴十分位数的线集合。如果 ax 是一个坐标轴列表,vlines_[i] 对应于 ax 中的第 i 个元素。None 元素对应于不存在的坐标轴或不包含 PDP 图的坐标轴。

0.23 版本新增。

deciles_hlines_matplotlib LineCollection 的 ndarray

如果 ax 是一个坐标轴或 None,vlines_[i, j] 是表示第 i 行第 j 列 y 轴十分位数的线集合。如果 ax 是一个坐标轴列表,vlines_[i] 对应于 ax 中的第 i 个元素。None 元素对应于不存在的坐标轴或不包含双向图的坐标轴。

0.23 版本新增。

contours_matplotlib Artists 的 ndarray

如果 ax 是一个坐标轴或 None,contours_[i, j] 是第 i 行第 j 列的部分依赖图。如果 ax 是一个坐标轴列表,contours_[i] 对应于 ax 中的第 i 个元素的部分依赖图。None 元素对应于不存在的坐标轴或不包含等高线图的坐标轴。

bars_matplotlib Artists 的 ndarray

如果 ax 是一个坐标轴或 None,bars_[i, j] 是第 i 行第 j 列的部分依赖条形图(针对分类特征)。如果 ax 是一个坐标轴列表,bars_[i] 对应于 ax 中的第 i 个元素的部分依赖条形图。None 元素对应于不存在的坐标轴或不包含条形图的坐标轴。

1.2 版本新增。

heatmaps_matplotlib Artists 的 ndarray

如果 ax 是一个坐标轴或 None,heatmaps_[i, j] 是第 i 行第 j 列的部分依赖热图(针对一对分类特征)。如果 ax 是一个坐标轴列表,heatmaps_[i] 对应于 ax 中的第 i 个元素的部分依赖热图。None 元素对应于不存在的坐标轴或不包含热图的坐标轴。

1.2 版本新增。

figure_matplotlib Figure

包含部分依赖图的图。

另请参阅

partial_dependence

计算部分依赖值。

PartialDependenceDisplay.from_estimator

绘制部分依赖。

示例

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from sklearn.datasets import make_friedman1
>>> from sklearn.ensemble import GradientBoostingRegressor
>>> from sklearn.inspection import PartialDependenceDisplay
>>> from sklearn.inspection import partial_dependence
>>> X, y = make_friedman1()
>>> clf = GradientBoostingRegressor(n_estimators=10).fit(X, y)
>>> features, feature_names = [(0,)], [f"Features #{i}" for i in range(X.shape[1])]
>>> deciles = {0: np.linspace(0, 1, num=5)}
>>> pd_results = partial_dependence(
...     clf, X, features=0, kind="average", grid_resolution=5)
>>> display = PartialDependenceDisplay(
...     [pd_results], features=features, feature_names=feature_names,
...     target_idx=0, deciles=deciles
... )
>>> display.plot(pdp_lim={1: (-1.38, 0.66)})
<...>
>>> plt.show()
../../_images/sklearn-inspection-PartialDependenceDisplay-1.png
classmethod from_estimator(estimator, X, features, *, sample_weight=None, categorical_features=None, feature_names=None, target=None, response_method='auto', n_cols=3, grid_resolution=100, percentiles=(0.05, 0.95), custom_values=None, method='auto', n_jobs=None, verbose=0, line_kw=None, ice_lines_kw=None, pd_line_kw=None, contour_kw=None, ax=None, kind='average', centered=False, subsample=1000, random_state=None)[source]#

部分依赖 (PD) 和个体条件期望 (ICE) 图。

可以通过设置 kind 参数来绘制部分依赖图、个体条件期望图或两者的叠加图。此方法为 features 中的每个条目生成一个图。这些图以 n_cols 列的网格排列。对于一维部分依赖图,特征值的十分位数显示在 x 轴上。对于二维图,十分位数显示在两个轴上,PDP 是等高线图。

有关 scikit-learn 可视化工具的一般信息,请参阅 可视化指南。有关解释这些图的指导,请参阅 检查指南

有关如何使用此类方法的示例,请参见 部分依赖和个体条件期望图

注意

PartialDependenceDisplay.from_estimator 不支持在多次调用中使用相同的轴。要绘制多个估计器的部分依赖性,请将第一次调用创建的轴传递给第二次调用

>>> from sklearn.inspection import PartialDependenceDisplay
>>> from sklearn.datasets import make_friedman1
>>> from sklearn.linear_model import LinearRegression
>>> from sklearn.ensemble import RandomForestRegressor
>>> X, y = make_friedman1()
>>> est1 = LinearRegression().fit(X, y)
>>> est2 = RandomForestRegressor().fit(X, y)
>>> disp1 = PartialDependenceDisplay.from_estimator(est1, X,
...                                                 [1, 2])
>>> disp2 = PartialDependenceDisplay.from_estimator(est2, X, [1, 2],
...                                                 ax=disp1.axes_)

警告

对于 GradientBoostingClassifierGradientBoostingRegressor'recursion' 方法(默认使用)不会考虑 boosting 过程的 init 预测器。实际上,只要 init 是一个常数估计器(默认情况),它将产生与 'brute' 相同的值,只是目标响应中有一个常数偏移。但是,如果 init 不是常数估计器,则 'recursion' 的部分依赖值将不正确,因为偏移将取决于样本。最好使用 'brute' 方法。请注意,这仅适用于 GradientBoostingClassifierGradientBoostingRegressor,而不适用于 HistGradientBoostingClassifierHistGradientBoostingRegressor

1.0 版本新增。

参数:
estimatorBaseEstimator

一个已拟合的估计器对象,实现 predictpredict_probadecision_function。不支持多输出多分类分类器。

X{array-like, dataframe}, 形状为 (n_samples, n_features)

X 用于为目标 features 生成值网格(将在此处评估部分依赖性),并在 method'brute' 时也用于生成补充特征的值。

features列表 {int, str, int 对, str 对}

用于创建 PDP 的目标特征。如果 features[i] 是整数或字符串,则创建单向 PDP;如果 features[i] 是元组,则创建双向 PDP(仅支持 kind='average')。每个元组的大小必须为 2。如果任何条目是字符串,则它必须在 feature_names 中。

sample_weightshape 为 (n_samples,) 的 array-like, default=None

在对模型输出进行平均时,样本权重用于计算加权平均值。如果为 None,则样本权重相等。如果 sample_weight 不是 None,则 method 将设置为 'brute'。请注意,对于 kind='individual'sample_weight 被忽略。

在版本 1.3 中新增。

categorical_features形状为 (n_features,) 或 (n_categorical_features,) 的 array-like, dtype={bool, int, str}, 默认=None

指示类别特征。

  • None:不考虑任何特征为分类特征;

  • 布尔型 array-like:形状为 (n_features,) 的布尔掩码,指示哪些特征是分类的。因此,此数组的形状与 X.shape[1] 相同;

  • 整数或字符串 array-like:整数索引或字符串,指示分类特征。

1.2 版本新增。

feature_names形状为 (n_features,) 的 array-like, dtype=str, 默认=None

每个特征的名称;feature_names[i] 包含索引为 i 的特征的名称。默认情况下,NumPy 数组的特征名称对应于其数值索引,pandas 数据帧的特征名称对应于其列名。

targetint, 默认=None
  • 在多类别设置中,指定应计算 PDP 的类别。请注意,对于二元分类,始终使用正类别(索引 1)。

  • 在多输出设置中,指定应计算 PDP 的任务。

在二元分类或经典回归设置中忽略。

response_method{'auto', 'predict_proba', 'decision_function'}, 默认='auto'

指定是使用 predict_proba 还是 decision_function 作为目标响应。对于回归器,此参数被忽略,响应始终是 predict 的输出。默认情况下,首先尝试 predict_proba,如果不存在,则回退到 decision_function。如果 method'recursion',则响应始终是 decision_function 的输出。

n_colsint, 默认=3

网格图中最大列数。仅当 ax 为单个轴或 None 时激活。

grid_resolutionint, default=100

对于每个目标特征,图轴上等间距点的数量。如果设置了 custom_values 参数,则此参数将被覆盖。

percentiles浮点数元组, 默认=(0.05, 0.95)

用于创建 PDP 轴极端值的上下百分位数。必须在 [0, 1] 之间。如果设置了 custom_values 参数,则此参数将被覆盖。

custom_valuesdict

一个字典,将 features 元素的索引映射到一个值数组,该特征的部分依赖性应该在该值数组上计算。为特征设置值范围将覆盖 grid_resolutionpercentiles

在版本 1.7 中新增。

methodstr, 默认='auto'

用于计算平均预测的方法

请参阅 此注释,了解 'brute''recursion' 方法之间的区别。

n_jobsint, default=None

用于计算部分依赖的 CPU 数量。计算在 features 参数指定的特征上并行化。

None 表示 1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。有关更多详细信息,请参阅词汇表

verboseint, default=0

PD 计算期间的详细输出。

line_kwdict, 默认=None

包含传递给 matplotlib.pyplot.plot 调用的关键字的字典。用于单向部分依赖图。它可用于定义 ice_lines_kwpdp_line_kw 的共同属性。

ice_lines_kwdict, 默认=None

包含传递给 matplotlib.pyplot.plot 调用的关键字的字典。用于单向部分依赖图中的 ICE 线。ice_lines_kw 中定义的键值对优先于 line_kw

pd_line_kwdict, 默认=None

包含传递给 matplotlib.pyplot.plot 调用的关键字的字典。用于单向部分依赖图中的部分依赖。在 pd_line_kw 中定义的键值对优先于 line_kw

contour_kwdict, 默认=None

包含传递给 matplotlib.pyplot.contourf 调用的关键字的字典。用于双向部分依赖图。

axMatplotlib 坐标轴 或 Matplotlib 坐标轴的 array-like, 默认=None
  • 如果传入单个坐标轴,则将其视为边界坐标轴,并在这些边界内绘制部分依赖图的网格。n_cols 参数控制网格中的列数。

  • 如果传入一个坐标轴的 array-like,则部分依赖图将直接绘制到这些坐标轴中。

  • 如果为 None,则创建一个图形和一个边界坐标轴,并将其视为单个坐标轴的情况。

kind{'average', 'individual', 'both'}, 默认='average'

是绘制数据集中所有样本的平均部分依赖性,还是每个样本一条线,或者两者都绘制。

  • kind='average' 产生传统的 PD 图;

  • kind='individual' 结果为 ICE 图。

请注意,快速 method='recursion' 选项仅适用于 kind='average'sample_weights=None。计算个体依赖性并进行加权平均需要使用较慢的 method='brute'

centeredbool, 默认=False

如果为 True,ICE 和 PD 线将从 y 轴原点开始。默认情况下,不进行居中。

版本 1.1 中新增。

subsamplefloat, int 或 None, 默认=1000

kind 为 'individual' 或 'both' 时,用于 ICE 曲线的采样。如果为 float,则应介于 0.0 和 1.0 之间,表示用于绘制 ICE 曲线的数据集比例。如果为 int,则表示要使用的绝对样本数。

请注意,当 kind='both' 时,仍使用完整数据集计算平均部分依赖性。

random_stateint, RandomState instance or None, default=None

subsamples 不是 None 并且 kind'both''individual' 时,控制所选样本的随机性。有关详细信息,请参见 Glossary

返回:
displayPartialDependenceDisplay

另请参阅

partial_dependence

计算部分依赖值。

示例

>>> import matplotlib.pyplot as plt
>>> from sklearn.datasets import make_friedman1
>>> from sklearn.ensemble import GradientBoostingRegressor
>>> from sklearn.inspection import PartialDependenceDisplay
>>> X, y = make_friedman1()
>>> clf = GradientBoostingRegressor(n_estimators=10).fit(X, y)
>>> PartialDependenceDisplay.from_estimator(clf, X, [0, (0, 1)])
<...>
>>> plt.show()
../../_images/sklearn-inspection-PartialDependenceDisplay-2.png
plot(*, ax=None, n_cols=3, line_kw=None, ice_lines_kw=None, pd_line_kw=None, contour_kw=None, bar_kw=None, heatmap_kw=None, pdp_lim=None, centered=False)[source]#

绘制部分依赖图。

参数:
axMatplotlib 坐标轴 或 Matplotlib 坐标轴的 array-like, 默认=None
  • 如果传入单个坐标轴,则将其视为边界坐标轴

    并在这些边界内绘制部分依赖图的网格。n_cols 参数控制网格中的列数。

  • 如果传入一个坐标轴的 array-like,则部分依赖图

    将直接绘制到这些坐标轴中。

  • 如果为 None,则创建一个图形和一个边界坐标轴,并将其视为

    单个坐标轴的情况。

n_colsint, 默认=3

网格图中的最大列数。仅当 ax 是单个轴或 None 时激活。

line_kwdict, 默认=None

包含传递给 matplotlib.pyplot.plot 调用的关键字的字典。用于单向部分依赖图。

ice_lines_kwdict, 默认=None

包含传递给 matplotlib.pyplot.plot 调用的关键字的字典。用于单向部分依赖图中的 ICE 线。ice_lines_kw 中定义的键值对优先于 line_kw

1.0 版本新增。

pd_line_kwdict, 默认=None

包含传递给 matplotlib.pyplot.plot 调用的关键字的字典。用于单向部分依赖图中的部分依赖。在 pd_line_kw 中定义的键值对优先于 line_kw

1.0 版本新增。

contour_kwdict, 默认=None

包含传递给 matplotlib.pyplot.contourf 调用的关键字的字典,用于双向部分依赖图。

bar_kwdict, 默认=None

包含传递给 matplotlib.pyplot.bar 调用的关键字的字典,用于单向分类部分依赖图。

1.2 版本新增。

heatmap_kwdict, 默认=None

包含传递给 matplotlib.pyplot.imshow 调用的关键字的字典,用于双向分类部分依赖图。

1.2 版本新增。

pdp_limdict, 默认=None

全局最小和最大平均预测值,使所有图具有相同的比例和 y 轴限制。pdp_lim[1] 是单个部分依赖曲线的全局最小和最大值。pdp_lim[2] 是双向部分依赖曲线的全局最小和最大值。如果为 None(默认),则将从所有预测的全局最小和最大值推断限制。

版本 1.1 中新增。

centeredbool, 默认=False

如果为 True,ICE 和 PD 线将从 y 轴原点开始。默认情况下,不进行居中。

版本 1.1 中新增。

返回:
displayPartialDependenceDisplay

返回一个包含部分依赖图的 PartialDependenceDisplay 对象。