求助:sklearn PartialDependenceDisplay设置ylim不生效的问题
解决PartialDependenceDisplay设置y轴范围被覆盖的问题
问题场景:使用sklearn的PartialDependenceDisplay.from_estimator绘制部分依赖图时,提前通过ax.set_ylim()设置的y轴范围被忽略,但ax.set_title()可以正常生效。
原因
PartialDependenceDisplay.from_estimator方法在绘图过程中,会自动根据计算出的部分依赖值重新设置y轴范围,这会覆盖你提前设置的ylim参数。
解决方案
有两种可行方式固定y轴范围:
方法1:绘图完成后再设置y轴范围
将ax.set_ylim()的调用放在from_estimator之后,覆盖方法自动设置的范围:
import pandas as pd import matplotlib.pyplot as plt from sklearn.datasets import load_diabetes from sklearn.tree import DecisionTreeRegressor from sklearn.inspection import PartialDependenceDisplay diabetes = load_diabetes() X = pd.DataFrame(diabetes.data, columns=diabetes.feature_names) y = diabetes.target tree = DecisionTreeRegressor() tree.fit(X, y) fig, ax = plt.subplots(figsize=(12, 6)) tree_disp = PartialDependenceDisplay.from_estimator(tree, X, ["age", "bmi"], ax=ax) # 绘图后设置y轴范围 ax.set_ylim(50, 300) plt.show()
方法2:通过from_estimator的关键字参数传递y轴范围
from_estimator支持将ylim作为关键字参数传入,直接指定绘图时的y轴范围:
import pandas as pd import matplotlib.pyplot as plt from sklearn.datasets import load_diabetes from sklearn.tree import DecisionTreeRegressor from sklearn.inspection import PartialDependenceDisplay diabetes = load_diabetes() X = pd.DataFrame(diabetes.data, columns=diabetes.feature_names) y = diabetes.target tree = DecisionTreeRegressor() tree.fit(X, y) fig, ax = plt.subplots(figsize=(12, 6)) # 直接在from_estimator中传入ylim参数 tree_disp = PartialDependenceDisplay.from_estimator( tree, X, ["age", "bmi"], ax=ax, ylim=(50, 300) ) plt.show()
这两种方法都能成功固定y轴范围,方便对比不同模型的部分依赖图结果。
内容的提问来源于stack exchange,提问作者Martan
相关产品推荐
相关产品推荐

