Python中如何绘制AdaBoost各逻辑回归基分类器的独立决策边界
逐基分类器绘制AdaBoost决策边界实现方案
核心实现逻辑
- 训练完成的AdaBoost分类器,所有内部经加权拟合的基分类器会统一存储在实例的
estimators_属性中,该属性为列表结构,长度与设定的n_estimators=4完全匹配,可直接遍历取出完成决策边界绘制。 - 传入AdaBoost的逻辑回归实例,会被sklearn内部自动克隆副本后执行迭代训练,手动fit的原始逻辑回归模型不会被集成模型复用,这一机制不影响后续提取内部基分类器的操作。
完整可运行代码
import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_moons from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.ensemble import AdaBoostClassifier from sklearn.inspection import DecisionBoundaryDisplay # 生成数据集 X, y = make_moons(n_samples=100, noise=0.2, random_state=42) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 初始化逻辑回归基估计器 logisticRegr = LogisticRegression() logisticRegr.fit(X_train, y_train) # 构建包含4个基分类器的AdaBoost模型 clf = AdaBoostClassifier(logisticRegr, n_estimators=4, random_state=42) clf.fit(X_train, y_train) # 用训练集拟合,避免测试集数据泄露 # 初始化2x2布局的子图画布,适配4个独立决策边界的展示需求 fig, axes = plt.subplots(2, 2, figsize=(10, 8)) axes = axes.ravel() # 遍历每个基分类器独立绘制决策边界 for idx, base_clf in enumerate(clf.estimators_): # 调用官方工具绘制决策面,无需手动生成预测网格 DecisionBoundaryDisplay.from_estimator( base_clf, X, cmap=plt.cm.coolwarm, alpha=0.8, ax=axes[idx], response_method="predict" ) # 叠加原始样本的散点标记 axes[idx].scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.coolwarm, edgecolor="black") axes[idx].set_title(f"第{idx+1}个AdaBoost基分类器") axes[idx].set_xticks([]) axes[idx].set_yticks([]) plt.tight_layout() plt.show()
效果说明
- 代码运行后会输出包含4个独立子图的画布,每个子图单独对应AdaBoost每轮迭代训练得到的逻辑回归基分类器的决策边界,完全匹配需求。
- 可通过调整
figsize、alpha、cmap等参数自定义图片的展示风格。 - 相比手动生成网格点逐点预测的传统写法,调用
DecisionBoundaryDisplay工具的实现方式更简洁,和sklearn版本的兼容性更强。
内容的提问来源于stack exchange,提问作者Burcu İçen
相关产品推荐
相关产品推荐

