ensemble learning学习笔记

本文深入探讨了Bagging和Gradient Boosting两种集成学习方法。Bagging通过有放回的随机抽样创建多个分类器,并以等权方式结合预测结果;而Boosting则通过迭代学习,为每次训练赋予不同权重,侧重于纠正先前模型的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,bagging(bootstrap aggregation)

每次从N个数据集中有放回的的随机抽样m次,每次取出n个数据。
因此训练处n个同类型的分类器(回归器),这些分类器(回归器)的参数不同。
最后将这些分类器结合起来。最后predict的时候,结合这m个分类器来共同决定y_pred的值。对于Bagging来讲,它们权重相同,因此就是取平均,对于分类问题,就是投票解决,票数最多者取胜。

Bias:又叫underfit,由于模型选择造成的误差(一般是由于模型太简单,无法作为实际的预测器)
Variance:又叫overfit,数据太大之后,由于采样的数据的随机性造成各个模型之间差异太大(一般数据太大,模型越复杂,Variance就越大)
Bagging就是来平衡Bias和Variance的。
%Data set X, Y
[N, D] = size(X)
Classifiers = cell(1, Nbag) %分配空间
for i=1:Nbag:
ind = ceil(N*rand(Nuse, 1)) %抽样,随机抽取N个数据(1, Nuse)
Xi = X(ind, :); Yi = Y(ind, :); %取出索引
Classifiers{i} = Train_Classifier(Xi, Yi) %训练
end;

%测试数据集
[Ntest, D] = size(Xtest);
predict = zeros(Ntest, Nbag) %分配空间
for i=1:Nbag, %应用分类器
predict(:, i)=Apply_Classfier(Xtest, Classifier{i})
end;
predict = (mean(predict, 2) > 1.5); %投票表决
对于RandomFroest: Bagging applied to decision trees
Problem:
对于大量的数据,训练得到了相同的分类器,在这些数据上取平均没意义
Solution:
每一步训练时,不用全部特征,而是选择其中一些子特征集,以此来保持决策树的多样性,然后在这些分类器上取平均
In decisionTreeSplitData2(X,Y):
For each of a subset of features:
For each possible split:
Score the split(e.g. information gain)
Pick the feature & split with the best score
Recurse on each subset




2, Gradient Boosting
Bagging是给每个分类器相同的权重,而Boosting是给不同的权重
重点关注那些预测错误的样本,给予它们更多权重。
因此Boosting是基于残差(residual error)的学习。
学习过程中,会有一系列的预测期^y[i]
MSE: J(.)=(y[1]-^y[1])^2 + ... + (y[n]-^y[n])^2
因此需要调整^y来使得J(.)变小
^y[i] = ^y[i] + alpha f[i]
f[i]≈▽J(y, ^y)=(y[i]-^y[i]) for MSE


% Data set X, Y
mu = mean(Y); % Often start with constant "mean" predictor
dY = Y-mu %subtract this prediction away
For k=1:Nboost,
learner{k} = Train_Regressor(X, dY); %dY是残差
alpha(k) = 1; % alpha: a "learning rate" or "step size"
% smaller alphas need to use more classifiers, but tend to predict better givene enough of them
% compute the residual given our new prediction
dY = dY-alpha(k)*predict(Learn{k}, X) %每次重新计算残差
end;


% Test data Xtest
[Ntest, D] = size(Xtest);
predict = zeros(Ntest, 1);
For k=1:Nboost,
predict = predict + alpha(k)*predict(Learn{k}, Xtest);
end;




























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值