首先bagging算法是集成学习中两大类算法中的其中一个代表算法,还有另一类的经典算法是Xgboost。他们主要的区别是前者学习器之间不存在依赖关系和可以并行生成学习器,后者学习器之间存在强依赖关系和可以串行生成学习器。
bagging算法:(1)bagging算法可以解决回归问题和分类问题。(2)它从原始数据中随机抽取n个样本,重复s次,于是就有个s个训练集,每个训练集都可以训练出一个弱分类器,最终生成s个弱分类器,预测结果将有这些分类器投票决定(选择分类器投票结果中最多的类别作为最后预测结果)。代表的有随机森林。
bagging算法概念
输入为样本集D={(x,y1),(x2,y2),...(xm,ym )} ,弱学习器算法, 弱分类器迭代次数T。
输出为最终的强分类器f(x)
对于t=1,2...,T:
a)对训练集进行第t次随机采样,每个样本被采样的概率为1/m,共采集m次,得到包含m个样本的采样集Dm
b)用采样集Dm训练第m个弱学习器Gm(x)
如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。
他的采样方法跟第2章介绍的评估学习器泛化性能的自主采样方法一样,而未被采取到的样本称为“包外样本”,因此我们可以将包外样本来对最终的学习器来评估泛化性能。
由于Bagging算法每次都进行采样来训练模型,因此泛化能力很强,对于降低模型的方差很有作用。当然对于训练集的拟合程度就会差一些,也就是模型的偏倚会大一些。
简单的投票方法
(1): 一票否决
对训练出来的多个方法树计算RMSE(AUC),RMSE最小的话(AUC最大的话),使用该方法树。
(2): 少数服从多数(可以加权)
绝对多数投票法:假设有一半以上的基学习器都预测了类别c,那么此时集成后的学习器给出的预测结果就是c,否则拒绝预测。
相对投票法:这个是选择票数最多的类别,如果最多票数的类别个数大于1,则随机从中选择一个。
(3): 阈值表决
加权平均法
对于简单平均法,其是以如下方式对各个模型进行结合的:
对于加权平均法对各个模型的结合方式如下所示,以该策略进行模型结合的典型算法就是AdaBoost算法
bagging算法代表:随机森林
什么是随机森林?
随机森林是一种多功能的机器学习算法,能够执行回归和分类的任务。同时,它也是一种数据降维手段,用于处理缺失值、异常值以及其他数据探索中的重要步骤,并取得了不错的成效。另外,它还担任了集成学习中的重要方法,在将几个低效模型整合为一个高效模型时大显身手。
在随机森林中,我们将生成很多的决策树,并不像在CART模型里一样只生成唯一的树。
(1)当在基于某些属性对一个新的对象进行分类判别时,随机森林中的每一棵树都会给出自己的分类选择,并由此进行“投票”,森林整体的输出结果将会是票数最多的分类选项;(2)而在回归问题中,随机森林的输出将会是所有决策树输出的平均值。
随机森林的概念
随机森林(Random Forset,简称RF)由于是bagging算法的一个扩展变体,RF在此基础上在决策树训练中引入了随机属性选择。假定属性一共有d个,那么RF则在树结点上在随机选择一个包含k个属性的子集。再从其中选择最优。k值一般推荐k=log2d。
随机森林简单、容易实现、计算开销小。在个体学习器之间的差异度增加后泛化性能会进一步提升。但是RF在基学习器较少时,泛化性能通常较差,随着个体学习器的增加,泛化性能会有所改善。
from sklearn.ensemble import RandomForestClassifier
# 建立随机森林分类器
random_forest = RandomForestClassifier(n_estimators = 100, random_state = 50, verbose = 1, n_jobs = -1)
#n_estimators : 指森林中树的个数
#n_jobs : 拟合(fit)和预测(predict)时并行运行的job数目,当设置为-1时,job数被设置为核心(core)数。
# 训练数据集
random_forest.fit(train, train_labels)
#verbose :冗余控制 控制树增长过程中的冗余(verbosity)。
# 提取重要特征
feature_importance_values = random_forest.feature_importances_
feature_importances = pd.DataFrame({'feature': features, 'importance': feature_importance_values})
# 对测试数据进行预测
predictions = random_forest.predict_proba(test)[:, 1]
完整代码文件查看码云
网友评论