Ensemble methods(组合方法,集成方法)

机器学习的算法中,讨论的最多的是某种特定的算法,比如Decision Tree,KNN等,在实际工作以及kaggle竞赛中,Ensemble methods(组合方法)的效果往往是最好的,当然需要消耗的训练时间也会拉长。

所谓Ensemble methods,就是把几种机器学习的算法组合到一起,或者把一种算法的不同参数组合到一起。基本上分为如下两类:

  • Averaging methods(平均方法),就是利用训练数据的全集或者一部分数据训练出几个算法或者一个算法的几个参数,最终的算法是所有这些算法的算术平均。比如Bagging Methods(装袋算法),Forest of Randomized Trees(随机森林)等。

实际上这个比较简单,主要的工作在于训练数据的选择,比如是不是随机抽样,是不是有放回,选取多少的数据集,选取多数训练数据。后续的训练就是对各个算法的分别训练,然后进行综合平均。
这种方法的基础算法一般会选择很强很复杂的算法,然后对其进行平均,因为单一的强算法很容易就导致过拟合(overfit现象),而经过aggregate之后就消除了这种问题。

  • boosting methods(提升算法),就是利用一个基础算法进行预测,然后在后续的其他算法中利用前面算法的结果,重点处理错误数据,从而不断的减少错误率。其动机是使用几种简单的弱算法来达到很强大的组合算法。所谓提升就是把“弱学习算法”提升(boost)为“强学习算法,是一个逐步提升逐步学习的过程;某种程度上说,和neural network有些相似性。经典算法 比如AdaBoost(Adaptive Boost,自适应提升),Gradient Tree Boosting(GBDT)。

这种方法一般会选择非常简单的弱算法作为基础算法,因为会逐步的提升,所以最终的几个会非常强。

boosting相对复杂,有如下几个方面:
1)流程:

2)如何开始。选择一个弱分类器,只要比随机猜测好一点点就可,也就是说a>0即可。
3)前面算法如何影响后续算法,或者说,如何进行算法的提升。
前面算法的系数w会根据一定的算法修改从而形成后续算法的系数,所以如何修改系数w是非常关键的。不同的损失函数(算法的预测值和数据的实际值之差)以及如何极小化损失函数的方法决定了如何更新系数w,同时决定了boosting的最终效果,几个常见的boosting:

4)最终的算法表现形式:

其中 ,而e为算法错误率,如果e<0.5那么a>0,e越小(错误越少)a越大(权重越高),该算法在最终结果中约有话语权。



【NOTE】
本文中,算法本身不重要,重要的是,什么是Ensemble Methods,以及如何做boost的过程。一旦决定了loss function,我们就可以用求偏导数+找梯度方向来处理boost的方向。


参考文章:
http://blog.csdn.net/dark_scope/article/details/24863289
http://blog.csdn.net/dark_scope/article/details/14103983
《The Elements of Statistical Learning 》

  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为C知道,我可以告诉你Smote(Synthetic Minority Over-sampling Technique)和Ensemble-based methods的结合可以通过下面的步骤来实现: 1. 首先,使用Smote进行过采样,产生更多的训练样本,以处理不平衡的数据集。 2. 然后,使用Ensemble-based methods,如AdaBoost或Random Forest,来训练模型。这些算法可以使用鲁棒的集成方法,将多个弱学习器组合成一个强学习器。 3. 在训练模型时,采用重采样技术(例如Bootstrap),从过采样的示例中随机选取一定比例的样本用于训练每个基础学习器。 4. 对于AdaBoost方法,需要根据误分类率调整每个基础学习器的权重。 这里是一个简单的代码示例,展示了如何将Smote和Random Forest结合起来。 ``` from imblearn.over_sampling import SMOTE from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import classification_report # 假设数据集已经被划分为X_train, y_train和X_test, y_test # 过采样使用Smote算法 smote = SMOTE(random_state=42) X_train_smote, y_train_smote = smote.fit_resample(X_train, y_train) # 使用随机森林算法训练模型 rf = RandomForestClassifier(n_estimators=100, random_state=42) rf.fit(X_train_smote, y_train_smote) # 预测测试集并输出分类报告 y_pred = rf.predict(X_test) print(classification_report(y_test, y_pred)) ``` 这段代码使用了imblearn库中的Smote算法来进行过采样,然后使用随机森林算法进行训练。最后,输出了分类报告来评估模型的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值