You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一张图中绘制多个分类器的决策边界?代码问题求助

问题解决:在同一张图中绘制多个分类器的决策边界

你的代码每次调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:01:09