目录
5. 使用偏差和方差阐释为什么bagging能提升模型的预测精度
6. 使用Bagging和基本分类模型或者回归模型做对比,观察bagging是否相对于基础模型的精度有所提高
7. 你会使用python+numpy+sklearn的基础模型来实现bagging吗?
作业
1. 什么是Bootstraps
由原始数据经过重复有放回抽样所获得的与原始数据集含量相等的样本称为再抽样样本
由再抽样样本计算所得的统计量称为自助统计量(bootstrap statistic)
由原始数据集计算所得的统计量称为观察统计量
自助统计量::观察统计量<=>观察统计量::真值
其核心思想和基本步骤如下:
(1) 采用再抽样技术从原始样本中抽取一定数量(自己给定)的样本,此过程允许重复抽样。
(2) 根据抽出的样本计算给定的统计量T。
(3) 重复上述N次(一般大于1000),得到N个统计量T。
(4) 计算上述N个统计量T的样本方差,得到统计量的方差。
其中的再抽样是有返还的抽样(sampling with replacement)方式。
原文链接:https://blog.csdn.net/gsthyx/article/details/108053023
2. bootstraps和bagging的联系
Bagging的核心在于自助采样(bootstrap)这一概念。通过有放回的采样,在总体的不同采样数据集上训练模型。
3. 什么是bagging
通过有放回的采样, 采样出T个含K个样本的采样集合,然后基于每个采样集合训练出一个基学习器,再将这些基学习器进行结合,这就是Bagging的基本流程。每个模型都是在略微不同的训练数据集上拟合完成的,这又使得每个基模型之间存在略微的差异,使每个基模型拥有略微不同的训练能力。
4. 随机森林和bagging的联系和区别
Bagging的一个典型应用是随机森林,每个决策树训练的样本和构建决策树的特征都是通过随机采样得到的,随机森林的预测结果是多个决策树输出的组合(投票)。
5. 使用偏差和方差阐释为什么bagging能提升模型的预测精度
从偏差考虑,各模型有相近的bias,, bagging无法显著降低模型的偏差。
从方差考虑,
假设有同分布的n个随机变量,方差为, 两两变量之间的相关性为, 则
而若每个模型完全相同, 所以bagging能减小方差,提升模型的预测精度
若每个模型完全独立
6. 使用Bagging和基本分类模型或者回归模型做对比,观察bagging是否相对于基础模型的精度有所提高
使用决策树对一个含有1000个样本20维特征的随机分类数据集进行分类。
使用重复的分层k-fold交叉验证来评估该模型,一共重复3次,每次有10个fold。我们将评估该模型在所有重复交叉验证中性能的平均值和标准差。
Bagging Accuracy: 0.858 (0.036)
Decision TreeAccuracy: 0.807 (0.045)
Bagging Accuracy: 0.865 (0.038)
Decision TreeAccuracy: 0.804 (0.047)
可以看到bagging方法确实提高了基础模型的精度。
# evaluate bagging algorithm for classification
from numpy import mean
from numpy import std
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
# define dataset
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=5)
# define the model
model = BaggingClassifier()
# evaluate the model
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
# report performance
print('Bagging Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
model = DecisionTreeClassifier(min_samples_leaf=5)
# evaluate the model
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
# report performance
print('Decision TreeAccuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores)))
7. 你会使用python+numpy+sklearn的基础模型来实现bagging吗?
待补
笔记
投票法
介绍
投票法在回归模型与分类模型上均可使用:
- 回归投票法:预测结果是所有模型预测结果的平均值。
- 分类投票法:预测结果是所有模型种出现最多的预测结果。
分类投票法又可以被划分为硬投票与软投票:
- 硬投票:预测结果是所有投票结果最多出现的类。
- 软投票:预测结果是所有投票结果中概率加和最大的类。
硬投票和软投票的区别
模型 1 的预测结果是 类别 A 的概率为 99% 判断是A
模型 2 的预测结果是 类别 A 的概率为 49% 判断是B
模型 3 的预测结果是 类别 A 的概率为 49% 判断是B
硬投票:B (A:1 B2)
软投票:A (99 + 49 + 49) / 3 = 65.67%
适用场景:
硬投票:投票合集中使用的模型能预测出清晰的类别标签
软投票:投票集合中使用的模型能预测类别的概率。同样用于那些本身并不预测类成员概率的模型,只要他们可以输出类似于概率的预测分数值(例如支持向量机、k-最近邻和决策树)
投票法问题:所有模型贡献都是一致的
代码
VotingRegressor 与 VotingClassifier
这两种模型的操作方式相同,采用相同的参数。
使用模型需要提供一个模型列表,列表中每个模型采用Tuple的结构表示,第一个元素代表名称,第二个元素代表模型,需要保证每个模型必须拥有唯一的名称
models = [('lr',LogisticRegression()),('svm',SVC())]
ensemble = VotingClassifier(estimators=models, voting='soft')#models是一个list
bagging
不仅仅集成模型最后的预测结果,同时采用一定策略来影响基模型训练,保证基模型可以服从一定的假设。
采样出T个含K个样本的采样集合(有放回),然后基于每个采样集合训练出一个基学习器,再将这些基学习器进行结合
是因为每个模型都是在略微不同的训练数据集上拟合完成的,这又使得每个基模型之间存在略微的差异,使每个基模型拥有略微不同的训练能力。
代码
Bagging的一个典型应用是随机森林