集成学习实战:使用随机森林、AdaBoost和Stacking对鸢尾花数据进行分类与性能评估

1次阅读
没有评论

共计 1940 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

背景介绍

集成学习通过组合多个基础模型来提高预测性能,是机器学习中非常实用的技术。它特别适用于:

集成学习实战:使用随机森林、AdaBoost 和 Stacking 对鸢尾花数据进行分类与性能评估

  • 数据集存在噪声或异常值
  • 单个模型容易过拟合
  • 需要提高模型泛化能力

鸢尾花数据集是经典的分类问题,包含 3 种鸢尾花的特征数据,非常适合用来演示集成学习方法。

技术选型对比

随机森林

  • 基于 bagging 的集成方法
  • 通过构建多棵决策树降低方差
  • 天然支持并行训练
  • 对异常值不敏感

AdaBoost

  • 基于 boosting 的集成方法
  • 通过迭代调整样本权重
  • 更关注难分类样本
  • 容易受到噪声数据影响

Stacking

  • 组合多种基础模型
  • 使用元学习器进行最终预测
  • 计算成本较高
  • 性能通常优于单一方法

核心实现细节

1. 数据准备

首先加载鸢尾花数据集并进行预处理:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 加载数据
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

2. 随机森林实现

from sklearn.ensemble import RandomForestClassifier

# 初始化随机森林
rf = RandomForestClassifier(
    n_estimators=100,  # 100 棵树
    bootstrap=True,    # 放回抽样
    random_state=42
)

# 训练模型
rf.fit(X_train, y_train)

3. AdaBoost 实现

from sklearn.ensemble import AdaBoostClassifier

# 初始化 AdaBoost
ada = AdaBoostClassifier(
    n_estimators=100,  # 100 次迭代
    learning_rate=0.1, # 学习率
    random_state=42
)

# 训练模型
ada.fit(X_train, y_train)

4. Stacking 实现

from sklearn.ensemble import StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier

# 定义基分类器
base_models = [('dt', DecisionTreeClassifier(random_state=42)),
    ('knn', KNeighborsClassifier())
]

# 初始化 Stacking
stack = StackingClassifier(
    estimators=base_models,
    final_estimator=LogisticRegression(),  # 元学习器
    cv=5
)

# 训练模型
stack.fit(X_train, y_train)

性能评估

from sklearn.metrics import classification_report

# 定义评估函数
def evaluate_model(model, X_test, y_test):
    y_pred = model.predict(X_test)
    print(classification_report(y_test, y_pred))

# 评估随机森林
print("随机森林性能:")
evaluate_model(rf, X_test, y_test)

# 评估 AdaBoost
print("\nAdaBoost 性能:")
evaluate_model(ada, X_test, y_test)

# 评估 Stacking
print("\nStacking 性能:")
evaluate_model(stack, X_test, y_test)

避坑指南

  1. 数据不平衡问题
  2. 解决方案:使用 class_weight 参数或重采样技术

  3. 过拟合问题

  4. 随机森林:调整 max_depth
  5. AdaBoost:降低学习率
  6. Stacking:减少基分类器数量

  7. 计算资源不足

  8. 减小 n_estimators
  9. 使用更简单的基分类器

总结与扩展

通过本实验可以看出,Stacking 在鸢尾花数据集上表现最好,但计算成本也最高。随机森林在保持较好性能的同时训练速度更快。

可以进一步尝试:

  1. 在其他数据集上测试这些方法
  2. 调整模型超参数
  3. 尝试不同的基分类器组合
  4. 使用更复杂的元学习器

集成学习是提升模型性能的有力工具,掌握这些基础方法后,可以继续探索更高级的集成技术。

正文完
 0
评论(没有评论)