集成学习(三)集成学习之投票法与Bagging (作业四)

作业四
    1. 什么是bootstraps?
        在统计学中,Bootstrap法具体是指用原样本自身的数据抽样得出新的样本及统计量。是一种有放回的抽样方法.它是一类非参数Monte Carlo方法,其实质是对观测信息进行再抽样,进而对总体的分布特性进行统计推断。
      其核心思想和基本步骤如下:
        (1) 采用重抽样技术从原始样本中抽取一定数量(自己给定)的样本,此过程允许重复抽样。
        (2) 根据抽出的样本计算给定的统计量T。
        (3) 重复上述N次(一般大于1000),得到N个统计量T。
        (4) 计算上述N个统计量T的样本方差,得到统计量的方差。
    1. bootstraps与bagging的联系
        Bagging采用均匀取样,而Boosting根据错误率来取样,因此Boosting的分类精度要优于Bagging。Bagging的训练集的选择是随机的,各轮训练集之间相互独立,而Boostlng的各轮训练集的选择与前面各轮的学习结果有关;Bagging的各个预测函数没有权重,而Boosting是有权重的;Bagging的各个预测函数可以并行生成,而Boosting的各个预测函数只能顺序生成(串行)。对于象神经网络这样极为耗时的学习方法。Bagging可通过并行训练节省大量时间开销。
    1. 什么是bagging?
        机器学习集成算法中的Bagging装袋算法就是基于bootstrap的一种算法,它其实和袋子没有什么关系,这么叫只是为了好听顺口和便于记忆,它的全称是Bootstrap aggregating自助聚合算法。所以看过本篇文章的你在以后再次看到Bagging时,希望你能在头脑中能立刻反应出:Bagging中打头的B代表Bootstrap--自助法,后面的agging代表aggregating--聚合,连起来就是“自助聚合算法”。
        bagging让该学习算法训练多轮,每轮的训练集由从初始的训练集中随机取出的n个训练样本组成,某个初始训练样本在某轮训练集中可以出现多次或根本不出现,训练之后可得到一个预测函数序列h1,⋯⋯hn , 最终的预测函数H对分类问题采用投票方式,对回归问题采用简单平均方法对新示例进行判别。
    1. 随机森林与bagging的联系与区别。
        随机森林是对装袋法的一种改进,随机森林也需要对自助抽样训练集建立一系列的决策树,这和决策树类似。不过,随机森林在建立树的时候,不和装袋法一样,装袋法建树的时候是将所有预测变量都考虑进去,而随机森林则是考虑每一个分裂点时,都是从所有的预测变量p中随机选取m个预测变量,分裂点所用的预测变量只能从这m个变量中选择。在每个分裂点处都重新进行抽样,选出m个预测变量,通常m≈√p,对每一个分裂点来说,这个算法将大部分可用预测变量排除在外,虽然听起来crazy,但是这个原理是很巧妙的。
        其实当随机森林中的m=p时,随机森林和装袋法是一样的。随机森林考虑每个分裂点的子集相对来说比装袋法少很多。这样得到的树的平均值有更小的方差,因而树的可信度相对来说比较高。
    1. 使用偏差与方差理论阐述为什么bagging能提升模型的预测精度?
        bagging基模型为弱模型,导致了每个基模型的准确度都不是很高(因为其在训练集上的准确度不高)。随着基模型数的增多,整体模型的期望值增加,更接近真实值,因此,整体模型的准确度提高。但是准确度一定会无限逼近于1吗?仍然并不一定,因为训练过程中准确度的提高的主要功臣是整体模型在训练集上的准确度提高,而随着训练的进行,整体模型的方差变大,导致防止过拟合的能力变弱,最终导致了准确度反而有所下降。
        基于boosting框架的Gradient Tree Boosting模型中基模型也为树模型,同Random Forrest,我们也可以对特征进行随机抽样来使基模型间的相关性降低,从而达到减少方差的效果。
    1. 请尝试使用bagging与基本分类模型或者回归模型做对比,观察bagging是否相对于基础模型的精度有所提高
# 使用scikit中自带的卫星数据
moons = make_moons(n_samples=20000)
# 逻辑回归分类器
log_clf = LogisticRegression()
#  随机森林分类器
rnd_clf = RandomForestClassifier()
# 支持向量机分类器
svm_clf = SVC(probability=True)
# 集成以上3种分类器的投票分类器

voting_clf = VotingClassifier(
    estimators=[('lr', log_clf), ('rf', rnd_clf), ('svc', svm_clf)],
    voting='soft'
)
# 分别输出 逻辑回归,随机森林,svm,投票分类器的准确率
for clf in (log_clf, rnd_clf, svm_clf, voting_clf):
    clf.fit(x_train, y_train)
    y_pred = clf.predict(x_test)
    print(clf.__class__.__name__, accuracy_score(y_test, y_pred))
    
out:
  LogisticRegression 0.891
    RandomForestClassifier 1.0
    SVC 1.0
    VotingClassifier 1.0



#  bagging 实现
bag_clf = BaggingClassifier(
   DecisionTreeClassifier(), n_estimators=500, max_samples=100,
   bootstrap=True, n_jobs=-1, random_state=42
)

    1. 假如让你来实现bagging,你会使用python+numpy+sklearn的基础模型来实现bagging吗?

refer

机器学习中的bootstrap到底是什么? - 知乎 (zhihu.com)
bootstrap, boosting, bagging 几种方法的联系 - 合唱团abc - 博客园 (cnblogs.com)
装袋法(bagging)和随机森林(random forests)的区别_CrazyDylan的博客-CSDN博客
Bagging和Boosting(偏差与方差)_Black eyes的博客-CSDN博客_bagging方差
为什么说bagging是减少variance,而boosting是减少bias? - 知乎 (zhihu.com)
bagging与boosting两种集成模型的偏差bias以及方差variance 的理解_Michael_Shentu的博客-CSDN博客_bagging boosting偏差方差
基于sklearn实现Bagging算法(python)_little_yan的博客-CSDN博客
机器学习分类—svm+bagging(sklearn)_蛙子的博客-CSDN博客
集成学习 (投票分类器 & bagging/pasting & RandomForest & Boosting)_soullines的博客-CSDN博客_bagging投票

你可能感兴趣的:(集成学习(三)集成学习之投票法与Bagging (作业四))