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 列表
features的partial_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()
- 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'方法(默认使用)不会考虑 boosting 过程的init预测器。实际上,只要init是一个常数估计器(默认情况),它将产生与'brute'相同的值,只是目标响应中有一个常数偏移。但是,如果init不是常数估计器,则'recursion'的部分依赖值将不正确,因为偏移将取决于样本。最好使用'brute'方法。请注意,这仅适用于GradientBoostingClassifier和GradientBoostingRegressor,而不适用于HistGradientBoostingClassifier和HistGradientBoostingRegressor。1.0 版本新增。
- 参数:
- estimatorBaseEstimator
一个已拟合的估计器对象,实现 predict、predict_proba 或 decision_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_resolution和percentiles。在版本 1.7 中新增。
- methodstr, 默认='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, 默认=None
包含传递给
matplotlib.pyplot.plot调用的关键字的字典。用于单向部分依赖图。它可用于定义ice_lines_kw和pdp_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。
- 返回:
- 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 坐标轴 或 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 中新增。
- 返回:
- display
PartialDependenceDisplay 返回一个包含部分依赖图的
PartialDependenceDisplay对象。
- display