【scikit-learn】sklearn.ensemble.StackingClassifier 类:堆叠泛化分类器

sklearn.ensemble.StackingClassifier(堆叠泛化分类器)

StackingClassifiersklearn.ensemble 提供的 堆叠泛化(Stacking) 分类模型,它 组合多个不同的基分类器,并通过一个元分类器进行二次学习,适用于 二分类和多分类任务


1. StackingClassifier 作用

  • 用于分类任务(如 信用评分、疾病预测)。
  • 结合多个基分类器的预测结果,通过 元分类器(二次学习)进一步优化最终分类
  • VotingClassifier 更强大,因为它利用了元分类器学习各个模型的关系

2. StackingClassifier 代码示例

(1) 训练 Stacking 分类器

from sklearn.ensemble import StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 加载数据
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

# 定义基分类器
base_classifiers = [
    ("lr", LogisticRegression(max_iter=200)),
    ("dt", DecisionTreeClassifier(max_depth=3)),
    ("svm", SVC(kernel="linear", probability=True))
]

# 训练 Stacking 分类器(元分类器:逻辑回归)
stacking_clf = StackingClassifier(estimators=base_classifiers, final_estimator=LogisticRegression())
stacking_clf.fit(X_train, y_train)

# 计算准确率
accuracy = stacking_clf.score(X_test, y_test)
print("Stacking 分类器准确率:", accuracy)

解释

  • 基分类器(estimators:逻辑回归、决策树、SVM 组合。
  • 元分类器(final_estimator:逻辑回归,学习基分类器的输出,提高性能。

3. StackingClassifier 主要参数

StackingClassifier(estimators, final_estimator=None, cv=None, stack_method="auto", n_jobs=None, passthrough=False, verbose=0)
参数说明
estimators包含的基分类器列表[("lr", LogisticRegression()), ...]
final_estimator元分类器(默认 LogisticRegression()
cv交叉验证(默认 None,可设为 5 进行交叉验证)
stack_method如何堆叠基分类器的输出"auto""predict_proba" 等)
passthrough是否将原始特征传递给元分类器(默认 False
n_jobs并行计算的 CPU 核数(默认 None-1 使用所有核心)

4. 比较各分类器的性能

for clf in (stacking_clf, *[clf for _, clf in base_classifiers]):
    clf.fit(X_train, y_train)
    print(clf.__class__.__name__, "准确率:", clf.score(X_test, y_test))

示例输出

StackingClassifier 准确率: 0.98
LogisticRegression 准确率: 0.95
DecisionTreeClassifier 准确率: 0.92
SVC 准确率: 0.96

解释

  • Stacking 通常比单个基分类器表现更好
  • 元分类器结合多个基分类器的优点,提高准确率

5. StackingClassifier vs. VotingClassifier

模型适用情况主要区别
VotingClassifier组合多个模型,进行投票简单但不能学习模型间的关系
StackingClassifier组合多个模型,并用元分类器学习更强大,能发现最佳组合方式

示例

from sklearn.ensemble import VotingClassifier

voting_clf = VotingClassifier(estimators=base_classifiers, voting="soft")
voting_clf.fit(X_train, y_train)

print("Voting 分类器准确率:", voting_clf.score(X_test, y_test))
print("Stacking 分类器准确率:", stacking_clf.score(X_test, y_test))

解释

  • VotingClassifier 仅对基分类器进行投票,StackingClassifier 额外使用元分类器优化
  • Stacking 通常比 Voting 效果更好

6. cv 对 Stacking 的影响

stacking_clf_cv = StackingClassifier(estimators=base_classifiers, final_estimator=LogisticRegression(), cv=5)
stacking_clf_cv.fit(X_train, y_train)

accuracy_cv = stacking_clf_cv.score(X_test, y_test)
print("交叉验证 Stacking 分类器准确率:", accuracy_cv)

解释

  • cv=5 进行 5 折交叉验证,提高泛化能力

7. 适用场景

  • 分类任务(如 信用评分、疾病预测)。
  • 希望组合多个分类器,并利用元分类器优化最终结果
  • VotingClassifier 不足时,Stacking 可能更优

8. 结论

  • StackingClassifier 适用于分类任务,组合多个基分类器,并通过元分类器进行二次学习,提高分类性能,比 VotingClassifier 更强大,适用于 多个模型的组合优化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值