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()
- 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_)
警告
對於
GradientBoostingClassifier
和GradientBoostingRegressor
,'recursion'
方法(預設使用)不會考慮提升過程的init
預測器。實際上,如果init
是常數估計器(預設值),則這會產生與'brute'
相同的值,直到目標響應中的常數偏移。但是,如果init
不是常數估計器,則'recursion'
的部分依賴值不正確,因為偏移量會與樣本相關。最好使用'brute'
方法。請注意,這僅適用於GradientBoostingClassifier
和GradientBoostingRegressor
,不適用於HistGradientBoostingClassifier
和HistGradientBoostingRegressor
。1.0 版新增。
- 參數:
- estimatorBaseEstimator
一個已擬合的估計器物件,實作 predict、predict_proba 或 decision_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_proba 或 decision_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’
用於計算平均預測值的方法
'recursion'
僅適用於某些基於樹的估計器(即GradientBoostingClassifier
、GradientBoostingRegressor
、HistGradientBoostingClassifier
、HistGradientBoostingRegressor
、DecisionTreeRegressor
、RandomForestRegressor
),但在速度方面更有效率。 使用此方法,分類器的目標回應始終是決策函數,而不是預測機率。由於'recursion'
方法在設計上隱式計算 ICE 的平均值,因此它與 ICE 不相容,因此kind
必須是'average'
。'brute'
支援任何估計器,但計算量較大。'auto'
:對於支援它的估計器使用'recursion'
,否則使用'brute'
。 如果sample_weight
不為None
,則無論估計器為何,都會使用'brute'
。
請參閱 此筆記 以了解
'brute'
和'recursion'
方法之間的差異。- n_jobs整數,預設為 None
用於計算部分相依性的 CPU 數量。計算會根據
features
參數指定的特徵進行平行化。None
表示 1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有處理器。有關更多詳細信息,請參閱 詞彙表。- verbose整數,預設為 0
PD 計算期間的詳細輸出。
- line_kw字典,預設為 None
具有傳遞給
matplotlib.pyplot.plot
呼叫的關鍵字的字典。用於單向部分相依性繪圖。它可以用來定義ice_lines_kw
和pdp_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 不是
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)[原始碼]#
繪製局部依賴圖。
- 參數:
- 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 版本中新增。
- 返回:
- display
PartialDependenceDisplay
返回包含局部依賴圖的
PartialDependenceDisplay
物件。
- display