机器学习集成方法详解:Bagging、Boosting、Stacking、Voting、Blending
机器学习常被视为高深的技术概念,其核心在于让系统自行学会从数据中提取规律并做出预测。通常,借助数据集和算法,模型便能挖掘数据模式。然而现实往往不尽如人意——许多模型的准确率偏低,预测结果也存在偏差。此时,一种相对简便的解决方案便是引入“集成学习”。 所谓集成学习,通俗来说就是“三个臭皮匠,顶个诸葛亮
机器学习常被视为高深的技术概念,其核心在于让系统自行学会从数据中提取规律并做出预测。通常,借助数据集和算法,模型便能挖掘数据模式。然而现实往往不尽如人意——许多模型的准确率偏低,预测结果也存在偏差。此时,一种相对简便的解决方案便是引入“集成学习”。

所谓集成学习,通俗来说就是“三个臭皮匠,顶个诸葛亮”。它将多个机器学习模型的预测结果进行组合,从而得到一个更优、更稳定的模型。这种方式的一大优势是能有效缓解过拟合——即模型在训练数据上表现良好,在测试数据上同样不逊色。具体而言,集成学习的优点包括:
- 提升模型整体性能
- 减少过拟合风险
- 降低方差
- 比单一模型拥有更高的预测精度
- 能同时处理线性和非线性数据
无论是回归问题还是分类问题,集成技术都能发挥重要作用。下面我们逐一介绍几种主流的集成学习方法。
Voting(投票集成)
Voting(投票集成)是最直观的方式:在完整数据集上训练多个基础模型,每个模型都给出自己的预测结果,然后将这些预测视为“投票”。得票最多的预测即为最终答案。

在汇总基础预测时,有硬投票和软投票两种方式。

硬投票直接统计哪个预测被投票最多;软投票则更为精细,它会汇总每个模型对各类别的概率,取概率最高的类作为最终预测。对于回归问题,则不存在“投票”概念——直接将所有模型的预测值取平均,即为最终结果。
使用Scikit-learn实现Voting分类器非常简单:
from sklearn.ensemble import VotingClassifier
## Base Models
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
ensemble_voting = VotingClassifier(
estimators = [('dtc',DecisionTreeClassifier(random_state=42)),
('lr', LogisticRegression()),
('gnb', GaussianNB()),
('knn',KNeighborsClassifier()),
('svc',SVC())],
voting='hard')
ensemble_voting.fit(X_train,y_train)
Bagging(自助聚合)
Bagging(自助聚合)同样是将多个弱模型的结果聚合起来,但其抽样方式很特别——基于bootstrap(有放回抽样)生成不同的子集,每个模型在不同子集上训练,最后再聚合。随机森林是Bagging最经典的例子:它由大量决策树组成,每棵树在随机数据样本和随机特征上训练,然后整体投票得出最终结果。

Bagging通常有两种形式:决策树集合(即随机森林),以及非决策树模型的集合。原理相同,只是基础模型不同。在sklearn中,BaggingClassifier类允许你使用非决策树模型进行Bagging:
## Bagging Ensemble of Same Classifiers (Decision Trees)
from sklearn.ensemble import RandomForestClassifier
classifier= RandomForestClassifier(n_estimators= 10, criterion="entropy")
classifier.fit(x_train, y_train)
## Bagging Ensemble of Different Classifiers
from sklearn.ensemble import BaggingClassifier
from sklearn.svm import SVC
clf = BaggingClassifier(base_estimator=SVC(),
n_estimators=10, random_state=0)
clf.fit(X_train,y_train)
Boosting(提升)
Boosting(提升)走的是一条“亡羊补牢”的路线。它将弱学习器转变为强学习器,通过顺序训练模型,每个新模型都重点关注前一个模型犯错的样本。简而言之,就是给之前分类错误的样本增加权重,让下一个模型更“重视”它们。

训练第n+1个模型时,每个数据点初始权重相等,但被前一个模型分错的样本会获得更高权重。误差就这样从n传递到n+1,逐步压缩。ADA Boost是最经典的代表,它创建的是“决策树桩”森林(每个树桩只有一个节点和两个叶子),不像随机森林那样使用完整树。它不断为错分样本加大权重,直到错误率降到可接受范围。
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier
dt = DecisionTreeClassifier(max_depth=2, random_state=0)
adc = AdaBoostClassifier(base_estimator=dt, n_estimators=7, learning_rate=0.1, random_state=0)
adc.fit(x_train, y_train)
Stacking(堆叠)
Stacking(堆叠)由David H. Wolpert于1992年提出,又称“叠加泛化”。其核心思想是:将多个不同泛化器(基础模型)的预测结果作为特征,输入给一个元模型(第二层模型),由元模型做出最终预测。

具体操作上,先将数据拆分为训练集和测试集。训练集再分成k折。基础模型在k-1折上训练,在第k折上预测,并反复迭代直到每一折都被预测过。之后,基础模型在整个训练集上拟合一次,计算性能。所有这些预测(来自训练集)构成了第二层模型的特征,该第二层模型最后在测试集上预测。
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import StackingClassifier
base_learners = [
('l1', KNeighborsClassifier()),
('l2', DecisionTreeClassifier()),
('l3',SVC(gamma=2, C=1)))
]
model = StackingClassifier(estimators=base_learners, final_estimator=LogisticRegression(),cv=5)
model.fit(X_train, y_train)
Blending(混合)
Blending(混合)可以看作是Stacking的简化版。唯一区别在于:它从训练集中单独留出一部分作为验证集,仅在这个验证集上获取基础模型的预测结果,然后用这些预测结果构建第二层模型。流程更简单直接,但与Stacking本质相同。

下面是Blending完整的Python示例,展示了其具体步骤:
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
## Base Models
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
## Meta Learner
from sklearn.linear_model import LogisticRegression
## Creating Sample Data
X,y = make_classification(n_samples=10000, n_features=20, n_informative=15, n_redundant=5, random_state=42)
## Training a Individual Logistic Regression Model
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)
logrec = LogisticRegression()
logrec.fit(X_train,y_train)
pred = logrec.predict(X_test)
score = accuracy_score(y_test, pred)
print('Base Model Accuracy: %.3f' % (score*100))
## Defining Base Models
def base_models():
models = list()
models.append(('knn', KNeighborsClassifier()))
models.append(('dt', DecisionTreeClassifier()))
models.append(('svm', SVC(probability=True)))
return models
## Fitting Ensemble Blending Model
## Step 1:Splitting Data Into Train, Holdout(Validation) and Test Sets
X_train_full, X_test, y_train_full, y_test = train_test_split(X, y, test_size=0.3, random_state=1)
X_train, X_val, y_train, y_val = train_test_split(X_train_full, y_train_full, test_size=0.33, random_state=1)
## Step 2: train base models on train set and make predictions on validation set
models = base_models()
meta_X = list()
for name, model in models:
# training base models on train set
model.fit(X_train, y_train)
# predict on hold out set
yhat = model.predict_proba(X_val)
# storing predictions
meta_X.append(yhat)
# horizontal stacking predictions
meta_X = np.hstack(meta_X)
## Step 3: Creating Blending Meta Learner
blender = LogisticRegression()
## training on base model predictions
blender.fit(meta_X, y_val)
## Step 4: Making predictions using blending meta learner
meta_X = list()
for name, model in models:
yhat = model.predict_proba(X_test)
meta_X.append(yhat)
meta_X = np.hstack(meta_X)
y_pred = blender.predict(meta_X)
# Evaluate predictions
score = accuracy_score(y_test, y_pred)
print('Blending Accuracy: %.3f' % (score*100))
---------------------------------
Base Model Accuracy: 82.367
Blending Accuracy: 96.733
从结果可以明显看出,Blending模型将准确率从82.367%提升到了96.733%——集成学习的威力由此可见一斑。
总结
读到这里,你可能会问:到底哪个集成方法最好?或者,我该从哪个开始用?
一个很务实的建议是:先从简单的单个模型开始尝试。如果单个模型表现尚可,就先用它,没必要一上来就搞集成。有些场景下,单个模型反而比集成模型跑得更好,甚至好很多。
要特别提醒的是:集成学习绝不应该是你的第一选择,而应该是最后一个选择。原因很简单——集成模型训练非常耗时,对算力的要求也高得多。所以别一上来就搞大动作。
回到实际问题:如果你的数据方差高,试试Bagging;如果基础模型偏差高(欠拟合严重),那就上Boosting;如果有好几个模型都表现不错,拿不准选哪个,那Stacking或Blending可以帮你“综合”一下。当然,具体哪种方法最适合,最终还是得看你的数据和特征分布——没有任何一招能通吃所有场景。
总的来说,集成学习是提升模型精度和稳定性的利器。尤其在竞赛中,它往往是拉开分数差距的关键。但记住:工具虽好,不能滥用,用在刀刃上才有价值。
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:机器学习集成方法详解:Bagging、Boosting、Stacking、Voting、Blending要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点面壁智能聚焦端侧AI,不拼参数大小,而是通过知识密度提升与模型风洞技术,将大模型压缩至手机、汽车等设备。其MiniCPM以2B参数超越同期8B对手。CTO曾国洋22岁主导训练中国首个大语言模型CPM-1。端侧AI追求“默契系统”,在用户开口前预判需求,已在吉利、上汽大众等车型落地应用。
印度IT巨头HCLTech投资最高350亿卢比建设AI数据中心,容量可扩展至50MW,提供从设计到运营的端到端服务,旨在满足政府及企业日益增长的算力需求,抢占印度快速增长的数据中心市场,并推动AI基础设施布局。
小米具身机器人在汽车工厂自攻螺母上件工站实现双侧作业成功率98%,接近人工水平。同时在新工站分别达到90%成功率,从单一操作拓展至多工站协同,验证了具身智能在复杂工业环境的落地能力。
全球AI行业正迎来新的财富格局,DeepSeek创始人梁文锋凭借其公司的迅猛发展,个人财富急剧膨胀,一举超越多位硅谷知名人物,成为全球AI公司领域的新首富。以下将详细解析其身价飙升背后的关键因素及公司发展历程。 一、身价飙升至360亿美元,超越多位AI大佬 根据最新彭博亿万富豪指数,DeepSeek
- 日榜
- 周榜
- 月榜
热点快看
