PartialDependenceDisplay#

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

部分依賴圖 (Partial Dependence Plot, PDP)。

這也可以顯示個別的部分依賴性,這些通常被稱為:個體條件期望 (Individual Condition Expectation, ICE)。

建議使用 from_estimator 來創建 PartialDependenceDisplay。所有參數都將以屬性形式儲存。

請參閱 使用部分依賴性的進階繪圖使用者指南,以了解更多資訊。

在 0.22 版本中新增。

參數:
pd_resultsBunch 的列表

partial_dependence 對於 features 的結果。

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

給定圖表的特徵索引。一個整數的元組將繪製一個特徵的部分依賴曲線。兩個整數的元組將繪製一個雙向部分依賴曲線作為等高線圖。

feature_names字串的列表

對應於 features 中索引的特徵名稱。

target_idx整數
  • 在多類別設定中,指定應計算 PDP 的類別。請注意,對於二元分類,始終使用正類別(索引 1)。

  • 在多輸出設定中,指定應計算 PDP 的任務。

在二元分類或傳統迴歸設定中忽略。

deciles字典

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 版本中新增: 新增具有 'average''individual''both' 選項的 kind 參數。

在 1.1 版本中新增: 新增為每個圖表傳遞指定 kind 的字串列表的可能性。

subsample浮點數、整數或 None,預設值=1000

kind 為 'individual' 或 'both' 時,用於 ICE 曲線的取樣。如果為浮點數,則應介於 0.0 和 1.0 之間,並表示用於繪製 ICE 曲線的數據集比例。如果為整數,則表示要使用的最大絕對樣本數。

請注意,當 kind='both' 時,仍會使用完整數據集來計算部分依賴性。

在 0.24 版本中新增。

random_state整數、RandomState 實例或 None,預設值=None

當子取樣不是 None 時,控制所選樣本的隨機性。請參閱 詞彙表 以了解詳細資訊。

在 0.24 版本中新增。

is_categorical(布林值,) 的列表 或 (布林值, 布林值) 的列表,預設值=None

features 中,每個目標特徵是否為類別型。列表的大小應與 features 相同。如果為 None,則假定所有特徵為連續型。

在 1.2 版本中新增。

屬性:
bounding_ax_matplotlib 軸或 None

如果 ax 是一個軸或 None,則 bounding_ax_ 是繪製部分依賴圖網格的軸。如果 ax 是一個軸列表或軸的 numpy 陣列,則 bounding_ax_ 為 None。

axes_matplotlib 軸的 ndarray

如果 ax 是一個 axes 物件或 None,則 axes_[i, j] 是位於第 i 列和第 j 行的 axes。如果 ax 是一個 axes 物件的列表,則 axes_[i]ax 中的第 i 個項目。值為 None 的元素表示該位置不存在 axes。

lines_matplotlib Artist 物件的 ndarray

如果 ax 是一個 axes 物件或 None,則 lines_[i, j] 是位於第 i 列和第 j 行的部分相依性曲線。如果 ax 是一個 axes 物件的列表,則 lines_[i] 是對應於 ax 中第 i 個項目的部分相依性曲線。值為 None 的元素表示不存在 axes,或該 axes 不包含折線圖。

deciles_vlines_matplotlib LineCollection 物件的 ndarray

如果 ax 是一個 axes 物件或 None,則 vlines_[i, j] 是表示第 i 列和第 j 行 x 軸十分位數的線條集合。如果 ax 是一個 axes 物件的列表,則 vlines_[i] 對應於 ax 中的第 i 個項目。值為 None 的元素表示不存在 axes,或該 axes 不包含 PDP 圖。

版本 0.23 新增。

deciles_hlines_matplotlib LineCollection 物件的 ndarray

如果 ax 是一個 axes 物件或 None,則 vlines_[i, j] 是表示第 i 列和第 j 行 y 軸十分位數的線條集合。如果 ax 是一個 axes 物件的列表,則 vlines_[i] 對應於 ax 中的第 i 個項目。值為 None 的元素表示不存在 axes,或該 axes 不包含雙向圖。

版本 0.23 新增。

contours_matplotlib Artist 物件的 ndarray

如果 ax 是一個 axes 物件或 None,則 contours_[i, j] 是位於第 i 列和第 j 行的部分相依性圖。如果 ax 是一個 axes 物件的列表,則 contours_[i] 是對應於 ax 中第 i 個項目的部分相依性圖。值為 None 的元素表示不存在 axes,或該 axes 不包含等高線圖。

bars_matplotlib Artist 物件的 ndarray

如果 ax 是一個 axes 物件或 None,則 bars_[i, j] 是位於第 i 列和第 j 行的部分相依性長條圖 (用於類別特徵)。如果 ax 是一個 axes 物件的列表,則 bars_[i] 是對應於 ax 中第 i 個項目的部分相依性長條圖。值為 None 的元素表示不存在 axes,或該 axes 不包含長條圖。

在 1.2 版本中新增。

heatmaps_matplotlib Artist 物件的 ndarray

如果 ax 是一個 axes 物件或 None,則 heatmaps_[i, j] 是位於第 i 列和第 j 行的部分相依性熱圖 (用於一對類別特徵)。如果 ax 是一個 axes 物件的列表,則 heatmaps_[i] 是對應於 ax 中第 i 個項目的部分相依性熱圖。值為 None 的元素表示不存在 axes,或該 axes 不包含熱圖。

在 1.2 版本中新增。

figure_matplotlib Figure 物件

包含部分相依性圖表的 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), 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 參數,可以繪製部分依賴圖、個別條件期望圖或兩者的疊加圖。 len(features) 個圖會以 n_cols 欄的網格排列。雙向部分依賴圖會繪製為等高線圖。特徵值的十分位數將以刻度標記顯示在單向圖的 x 軸上,並顯示在雙向圖的兩個軸上。

請在使用者指南中閱讀更多資訊。

注意

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' 方法(預設使用)不會考慮提升過程的 init 預測器。實際上,如果 init 是常數估計器(預設值),則這會產生與 'brute' 相同的值,直到目標響應中的常數偏移。但是,如果 init 不是常數估計器,則 'recursion' 的部分依賴值不正確,因為偏移量會與樣本相關。最好使用 'brute' 方法。請注意,這僅適用於 GradientBoostingClassifierGradientBoostingRegressor,不適用於 HistGradientBoostingClassifierHistGradientBoostingRegressor

1.0 版新增。

參數:
estimatorBaseEstimator

一個已擬合的估計器物件,實作 predictpredict_probadecision_function。不支援多輸出多類分類器。

X形狀為 (n_samples, n_features) 的類陣列、資料框

X 用於產生目標 features 的值網格(將評估部分依賴的位置),也用於在 method'brute' 時產生補集特徵的值。

features整數、字串、整數對、字串對的清單

要為其建立 PDP 的目標特徵。如果 features[i] 是整數或字串,則建立單向 PDP;如果 features[i] 是元組,則建立雙向 PDP(僅在 kind='average' 時支援)。每個元組的大小必須為 2。如果任何條目是字串,則它必須在 feature_names 中。

sample_weight形狀為 (n_samples,) 的類陣列,預設為 None

當平均模型輸出時,會使用樣本權重來計算加權平均值。如果為 None,則樣本的權重相同。如果 sample_weight 不為 None,則 method 將會被設定為 'brute'。請注意,sample_weight 會在 kind='individual' 時被忽略。

於 1.3 版本新增。

categorical_features形狀為 (n_features,) 或 (n_categorical_features,) 的類陣列,dtype={bool, int, str},預設為 None

指示哪些特徵是類別特徵。

  • None:沒有特徵會被視為類別特徵;

  • 布林值類陣列:形狀為 (n_features,) 的布林值遮罩,指示哪些特徵是類別特徵。因此,此陣列的形狀與 X.shape[1] 相同;

  • 整數或字串類陣列:指示類別特徵的整數索引或字串。

在 1.2 版本中新增。

feature_names形狀為 (n_features,) 的類陣列,dtype=str,預設為 None

每個特徵的名稱;feature_names[i] 保存索引為 i 的特徵名稱。預設情況下,特徵的名稱對應於 NumPy 陣列的數值索引,以及 pandas 資料框架的欄位名稱。

target整數,預設為 None
  • 在多類別設定中,指定應計算 PDP 的類別。請注意,對於二元分類,始終使用正類別(索引 1)。

  • 在多輸出設定中,指定應計算 PDP 的任務。

在二元分類或傳統迴歸設定中忽略。

response_method{‘auto’, ‘predict_proba’, ‘decision_function’},預設為 ‘auto’

指定是否使用 predict_probadecision_function 作為目標回應。對於迴歸器,此參數會被忽略,並且回應始終是 predict 的輸出。預設情況下,會先嘗試 predict_proba,如果它不存在,則會回退到 decision_function。如果 method'recursion',則回應始終是 decision_function 的輸出。

n_cols整數,預設為 3

網格圖中的最大欄數。僅當 ax 為單一軸或 None 時才有效。

grid_resolution整數,預設為 100

繪圖軸上等間隔點的數量,針對每個目標特徵。

percentiles浮點數的元組,預設為 (0.05, 0.95)

用於為 PDP 軸建立極端值的下百分位數和上百分位數。必須在 [0, 1] 範圍內。

method字串,預設為 ‘auto’

用於計算平均預測值的方法

請參閱 此筆記 以了解 'brute''recursion' 方法之間的差異。

n_jobs整數,預設為 None

用於計算部分相依性的 CPU 數量。計算會根據 features 參數指定的特徵進行平行化。

None 表示 1,除非在 joblib.parallel_backend 上下文中。-1 表示使用所有處理器。有關更多詳細信息,請參閱 詞彙表

verbose整數,預設為 0

PD 計算期間的詳細輸出。

line_kw字典,預設為 None

具有傳遞給 matplotlib.pyplot.plot 呼叫的關鍵字的字典。用於單向部分相依性繪圖。它可以用來定義 ice_lines_kwpdp_line_kw 的通用屬性。

ice_lines_kw字典,預設為 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 軸的類陣列,預設值=None
  • 如果傳入單一軸,則會將其視為邊界軸,並在這些邊界內繪製局部依賴圖的網格。n_cols 參數控制網格中的欄數。

  • 如果傳入軸的類陣列,則會將局部依賴圖直接繪製到這些軸中。

  • 如果為 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 版本中新增。

subsample浮點數、整數或 None,預設值=1000

kind 為 'individual' 或 'both' 時,ICE 曲線的取樣。如果為 float,則應介於 0.0 和 1.0 之間,並表示用於繪製 ICE 曲線的資料集比例。如果為 int,則表示要使用的絕對樣本數。

請注意,當 kind='both' 時,仍會使用完整資料集來計算平均局部依賴性。

random_state整數、RandomState 實例或 None,預設值=None

當 subsamples 不是 Nonekind'both''individual' 時,控制所選樣本的隨機性。有關詳細資訊,請參閱 詞彙表

返回:
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)[原始碼]#

繪製局部依賴圖。

參數:
axMatplotlib 軸或 Matplotlib 軸的類陣列,預設值=None
  • 如果傳入單一軸,則會將其視為邊界軸

    並在這些邊界內繪製局部依賴圖的網格。n_cols 參數控制網格中的欄數。

  • 如果傳入軸的類陣列,則會將局部依賴

    圖直接繪製到這些軸中。

  • 如果為 None,則會建立一個圖形和一個邊界軸,並將其視為

    單一軸的情況。

n_cols整數,預設為 3

網格圖中的最大欄數。僅當 ax 為單一軸或 None 時才有效。

line_kw字典,預設為 None

以關鍵字組成的字典傳遞給 matplotlib.pyplot.plot 呼叫。用於單向局部依賴圖。

ice_lines_kw字典,預設為 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 物件。