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_resultslist of Bunch
partial_dependence
对于features
的结果。- featureslist of (int,) or list of (int, int)
给定图的特征索引。一个整数的元组将绘制一个特征的偏依赖曲线。两个整数的元组将绘制一个二维偏依赖曲线作为等高线图。
- feature_nameslist of str
与
features
中索引对应的特征名称。- target_idxint
在多类别设置中,指定应计算 PDP 的类别。请注意,对于二元分类,始终使用正类别(索引 1)。
在多输出设置中,指定应计算 PDP 的任务。
在二元分类或经典回归设置中被忽略。
- decilesdict
features
中特征索引的十分位数。- kind{‘average’, ‘individual’, ‘both’} or list of such str, default=’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 or None, default=1000
当
kind
为 'individual' 或 'both' 时,用于 ICE 曲线的采样。如果是浮点数,应在 0.0 到 1.0 之间,表示用于绘制 ICE 曲线的数据集比例。如果是整数,表示要使用的最大绝对样本数。请注意,当
kind='both'
时,仍使用完整数据集来计算偏依赖。0.24 版本新增。
- random_stateint, RandomState instance or None, default=None
当 `subsamples` 不是 `None` 时,控制选定样本的随机性。详见术语表。
0.24 版本新增。
- is_categoricallist of (bool,) or list of (bool, bool), default=None
features
中每个目标特征是否为类别型。列表的长度应与features
的大小相同。如果为None
,则所有特征都被假定为连续型。1.2 版本新增。
- 属性:
- bounding_ax_matplotlib Axes or None
如果
ax
是一个轴或 None,则bounding_ax_
是绘制偏依赖图网格的轴。如果ax
是一个轴列表或一个 numpy 轴数组,则bounding_ax_
为 None。- axes_ndarray of matplotlib Axes
如果
ax
是一个轴或 None,则axes_[i, j]
是第 i 行第 j 列的轴。如果ax
是一个轴列表,则axes_[i]
是ax
中的第 i 个元素。值为 None 的元素表示该位置不存在的轴。- lines_ndarray of matplotlib Artists
如果
ax
是一个轴或 None,则lines_[i, j]
是第 i 行第 j 列的偏依赖曲线。如果ax
是一个轴列表,则lines_[i]
是与ax
中第 i 个元素对应的偏依赖曲线。值为 None 的元素表示不存在的轴或不包含线图的轴。- deciles_vlines_ndarray of matplotlib LineCollection
如果
ax
是一个轴或 None,则vlines_[i, j]
是表示第 i 行第 j 列 x 轴十分位数的线集合。如果ax
是一个轴列表,则vlines_[i]
对应于ax
中的第 i 个元素。值为 None 的元素表示不存在的轴或不包含 PDP 图的轴。0.23 版本新增。
- deciles_hlines_ndarray of matplotlib LineCollection
如果
ax
是一个轴或 None,则vlines_[i, j]
是表示第 i 行第 j 列 y 轴十分位数的线集合。如果ax
是一个轴列表,则vlines_[i]
对应于ax
中的第 i 个元素。值为 None 的元素表示不存在的轴或不包含二维图的轴。0.23 版本新增。
- contours_ndarray of matplotlib Artists
如果
ax
是一个轴或 None,则contours_[i, j]
是第 i 行第 j 列的偏依赖图。如果ax
是一个轴列表,则contours_[i]
是与ax
中第 i 个元素对应的偏依赖图。值为 None 的元素表示不存在的轴或不包含等高线图的轴。- bars_ndarray of matplotlib Artists
如果
ax
是一个轴或 None,则bars_[i, j]
是第 i 行第 j 列的偏依赖条形图(针对分类特征)。如果ax
是一个轴列表,则bars_[i]
是与ax
中第 i 个元素对应的偏依赖条形图。值为 None 的元素表示不存在的轴或不包含条形图的轴。1.2 版本新增。
- heatmaps_ndarray of matplotlib Artists
如果
ax
是一个轴或 None,则heatmaps_[i, j]
是第 i 行第 j 列的偏依赖热图(针对一对分类特征)。如果ax
是一个轴列表,则heatmaps_[i]
是与ax
中第 i 个元素对应的偏依赖热图。值为 None 的元素表示不存在的轴或不包含热图的轴。1.2 版本新增。
- figure_matplotlib Figure
包含偏依赖图的图形。
另请参阅
示例
>>> 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()
- 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_)
警告
对于
GradientBoostingClassifier
和GradientBoostingRegressor
,'recursion'
方法(默认使用)将不考虑提升过程的init
预测器。实际上,只要init
是一个常数估计器(默认情况),这会产生与'brute'
相同的值,仅在目标响应上有一个常数偏移。但是,如果init
不是常数估计器,则'recursion'
的偏依赖值将不正确,因为偏移将依赖于样本。此时最好使用'brute'
方法。请注意,这仅适用于GradientBoostingClassifier
和GradientBoostingRegressor
,不适用于HistGradientBoostingClassifier
和HistGradientBoostingRegressor
。1.0 版本新增。
- 参数:
- estimatorBaseEstimator
一个已拟合的估计器对象,实现了 predict、predict_proba 或 decision_function。不支持多输出多类别分类器。
- X{array-like, dataframe} of shape (n_samples, n_features)
X
用于为目标features
生成值网格(将在此处评估偏依赖),当method
为'brute'
时也用于生成补集特征的值。- featureslist of {int, str, pair of int, pair of str}
用于创建 PDP 的目标特征。如果
features[i]
是整数或字符串,则创建单向 PDP;如果features[i]
是元组,则创建双向 PDP(仅支持kind='average'
)。每个元组必须包含 2 个元素。如果任何条目是字符串,则它必须在feature_names
中。- sample_weightarray-like of shape (n_samples,), default=None
样本权重用于计算模型输出平均值时的加权平均值。如果为
None
,则样本权重相等。如果sample_weight
不为None
,则method
将设置为'brute'
。请注意,对于kind='individual'
,sample_weight
被忽略。1.3 版本新增。
- categorical_featuresarray-like of shape (n_features,) or shape (n_categorical_features,), dtype={bool, int, str}, default=None
指示分类特征。
None
:不考虑任何特征为分类特征;布尔型 array-like:形状为
(n_features,)
的布尔掩码,指示哪些特征是分类特征。因此,此数组的形状与X.shape[1]
相同;整数或字符串 array-like:整数索引或字符串,指示分类特征。
1.2 版本新增。
- feature_namesarray-like of shape (n_features,), dtype=str, default=None
每个特征的名称;
feature_names[i]
包含索引为i
的特征的名称。默认情况下,特征名称对应于 NumPy 数组的数字索引和 pandas 数据框的列名。- targetint, default=None
在多类别设置中,指定应计算 PDP 的类别。请注意,对于二元分类,始终使用正类别(索引 1)。
在多输出设置中,指定应计算 PDP 的任务。
在二元分类或经典回归设置中被忽略。
- response_method{‘auto’, ‘predict_proba’, ‘decision_function’}, default=’auto’
指定是使用 predict_proba 还是 decision_function 作为目标响应。对于回归器,此参数将被忽略,响应始终是 predict 的输出。默认情况下,首先尝试 predict_proba,如果不存在则回退到 decision_function。如果
method
为'recursion'
,则响应始终是 decision_function 的输出。- n_colsint, default=3
网格图中最大列数。仅当
ax
为单个轴或None
时激活。- grid_resolutionint, default=100
图中每个目标特征轴上的等距点数。如果设置了
custom_values
参数,则此参数将被覆盖。- percentilestuple of float, default=(0.05, 0.95)
用于创建 PDP 轴极值的下限和上限百分位数。必须在 [0, 1] 之间。如果设置了
custom_values
参数,则此参数将被覆盖。- custom_valuesdict
一个字典,将
features
元素索引映射到应在该特征上计算偏依赖的值数组。为特征设置值范围会覆盖grid_resolution
和percentiles
。1.7 版本新增。
- methodstr, default=’auto’
用于计算平均预测值的方法。
'recursion'
仅支持某些基于树的估计器(即GradientBoostingClassifier
、GradientBoostingRegressor
、HistGradientBoostingClassifier
、HistGradientBoostingRegressor
、DecisionTreeRegressor
、RandomForestRegressor
),但在速度方面更高效。使用此方法时,分类器的目标响应始终是决策函数,而不是预测概率。由于'recursion'
方法隐式地按设计计算 ICE 的平均值,它与 ICE 不兼容,因此kind
必须是'average'
。'brute'
支持任何估计器,但计算量更大。'auto'
:对于支持'recursion'
的估计器,使用'recursion'
;否则使用'brute'
。如果sample_weight
不为None
,则无论估计器如何,都使用'brute'
。
请参阅此说明,了解
'brute'
和'recursion'
方法之间的差异。- n_jobsint, default=None
用于计算偏依赖的 CPU 数量。计算在
features
参数指定的特征上并行化。None
表示 1,除非在joblib.parallel_backend
上下文。-1
表示使用所有处理器。详见术语表。- verboseint, default=0
PD 计算期间的详细输出。
- line_kwdict, default=None
传递给
matplotlib.pyplot.plot
调用的关键字字典。用于单向偏依赖图。它可用于定义ice_lines_kw
和pdp_line_kw
的共同属性。- ice_lines_kwdict, default=None
传递给
matplotlib.pyplot.plot
调用的关键字字典。用于单向偏依赖图中的 ICE 线。在ice_lines_kw
中定义的键值对优先于line_kw
。- pd_line_kwdict, default=None
传递给
matplotlib.pyplot.plot
调用的关键字字典。用于单向偏依赖图中的偏依赖线。在pd_line_kw
中定义的键值对优先于line_kw
。- contour_kwdict, default=None
传递给
matplotlib.pyplot.contourf
调用的关键字字典。用于双向偏依赖图。- axMatplotlib axes or array-like of Matplotlib axes, default=None
如果传入单个轴,则将其视为边界轴,并在这些边界内绘制偏依赖图网格。
n_cols
参数控制网格中的列数。如果传入轴数组,则偏依赖图将直接绘制到这些轴中。
如果为
None
,则创建一个图形和一个边界轴,并将其视为单个轴的情况。
- kind{‘average’, ‘individual’, ‘both’}, default=’average’
是绘制数据集中所有样本的偏依赖平均值,还是每样本一条线,或者两者都绘制。
kind='average'
生成传统 PD 图;kind='individual'
产生 ICE 图。
请注意,快速
method='recursion'
选项仅适用于kind='average'
和sample_weights=None
。计算个体依赖性并进行加权平均需要使用较慢的method='brute'
。- centeredbool, default=False
如果为
True
,ICE 和 PD 线将从 y 轴原点开始。默认情况下,不进行中心化处理。1.1 版本新增。
- subsamplefloat, int or None, default=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` 时,控制选定样本的随机性。详见术语表。
- 返回:
- display
PartialDependenceDisplay
- display
另请参阅
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()
- 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 axes or array-like of Matplotlib axes, default=None
- 如果传入单个轴,则将其视为边界轴
并在这些边界内绘制偏依赖图网格。
n_cols
参数控制网格中的列数。
- 如果传入轴数组,则偏依赖图将直接绘制到这些轴中。
如果为
None
,则创建一个图形和一个边界轴,并将其视为单个轴的情况。
- 如果为
None
,则创建一个图形和一个边界轴,并将其视为单个轴的情况。 如果为
None
,则创建一个图形和一个边界轴,并将其视为单个轴的情况。
- 如果为
- n_colsint, default=3
网格图中最大列数。仅当
ax
为单个轴或None
时激活。- line_kwdict, default=None
传递给
matplotlib.pyplot.plot
调用的关键字字典。用于单向偏依赖图。- ice_lines_kwdict, default=None
传递给
matplotlib.pyplot.plot
调用的关键字字典。用于单向偏依赖图中的 ICE 线。在ice_lines_kw
中定义的键值对优先于line_kw
。1.0 版本新增。
- pd_line_kwdict, default=None
传递给
matplotlib.pyplot.plot
调用的关键字字典。用于单向偏依赖图中的偏依赖线。在pd_line_kw
中定义的键值对优先于line_kw
。1.0 版本新增。
- contour_kwdict, default=None
用于双向偏依赖图,传递给
matplotlib.pyplot.contourf
调用的关键字字典。- bar_kwdict, default=None
用于单向分类偏依赖图,传递给
matplotlib.pyplot.bar
调用的关键字字典。1.2 版本新增。
- heatmap_kwdict, default=None
用于双向分类偏依赖图,传递给
matplotlib.pyplot.imshow
调用的关键字字典。1.2 版本新增。
- pdp_limdict, default=None
全局最小和最大平均预测值,使得所有图都具有相同的比例和 y 轴限制。
pdp_lim[1]
是单偏依赖曲线的全局最小和最大值。pdp_lim[2]
是双向偏依赖曲线的全局最小和最大值。如果为None
(默认),则将从所有预测值的全局最小和最大值推断限制。1.1 版本新增。
- centeredbool, default=False
如果为
True
,ICE 和 PD 线将从 y 轴原点开始。默认情况下,不进行中心化处理。1.1 版本新增。
- 返回:
- display
PartialDependenceDisplay
返回一个包含偏依赖图的
PartialDependenceDisplay
对象。
- display