如何在同一张图中绘制多个分类器的决策边界?代码问题求助
问题解决:在同一张图中绘制多个分类器的决策边界
你的代码每次调用DecisionBoundaryDisplay.from_estimator时,默认会创建新的坐标轴,导致每个分类器的决策边界都在单独的图中显示,最终仅保留最后一个分类器的结果。
以下是修改后的代码,可将所有分类器的决策边界绘制在同一张图中:
import matplotlib.pyplot as plt from sklearn.datasets import load_iris from sklearn.linear_model import LogisticRegression from sklearn.inspection import DecisionBoundaryDisplay from sklearn.discriminant_analysis import LinearDiscriminantAnalysis,QuadraticDiscriminantAnalysis from sklearn.ensemble import AdaBoostClassifier,BaggingClassifier,RandomForestClassifier,HistGradientBoostingClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import VotingClassifier,ExtraTreesClassifier iris = load_iris() X = iris.data[:, :2] classifiers = [LogisticRegression(solver='sag',penalty='l2',multi_class='ovr', max_iter=25000,random_state=None,fit_intercept=True), LinearDiscriminantAnalysis(), QuadraticDiscriminantAnalysis(), DecisionTreeClassifier(min_samples_leaf=1), BaggingClassifier(), RandomForestClassifier(), AdaBoostClassifier(), HistGradientBoostingClassifier(), VotingClassifier(estimators=[('rfc',RandomForestClassifier()), ('dtc',DecisionTreeClassifier())],voting ='soft'), ExtraTreesClassifier()] # 创建固定的坐标轴,所有绘图都在该轴上进行 fig, ax = plt.subplots() # 仅绘制一次原始数据点,避免重复叠加 ax.scatter(X[:, 0], X[:, 1], c=iris.target, edgecolor="k") for classifier in classifiers: classifier.fit(X, iris.target) # 指定ax参数,将决策边界绘制到已创建的坐标轴上 disp = DecisionBoundaryDisplay.from_estimator( classifier, X, response_method="predict", xlabel=iris.feature_names[0], ylabel=iris.feature_names[1], alpha=0.3, # 降低透明度,让多个边界叠加后更清晰区分 ax=ax # 关键:强制使用同一个坐标轴 ) plt.show()
核心修改点:
- 提前创建固定的
fig, ax对象,确保所有绘图共享同一坐标轴 - 将散点图移到循环外,仅绘制一次,避免重复叠加导致点的视觉效果异常
- 在
DecisionBoundaryDisplay.from_estimator中添加ax=ax参数,强制将每个分类器的决策边界绘制到同一个图中 - 降低
alpha值到0.3,让不同分类器的半透明边界叠加后仍能清晰区分
内容的提问来源于stack exchange,提问作者ala mazahreh
相关产品推荐
相关产品推荐

