投票法思路
投票法是一种遵循少数服从多数原则的集成学习模型,通过多个模型的集成降低方差,从而提高模型的鲁棒性和泛化能力。
- 对于回归模型:投票法最终的预测结果是多个其他回归模型预测结果的平均值。
- 对于分类模型:硬投票法的预测结果是多个模型预测结果中出现次数最多的类别;软投票对各类测结果的概率进行求和,最终选取概率之和最大的类标签。软投法考虑到了预测概率这一额外的信息,因此可以得出比硬投票法更加准确的预测结果。
硬和软的区别:
- 硬:样本一定属于某一类别,硬生生地分进去。
- 软:根据样本属于各个类别的概率进行划分。比如样本x属于类别A的概率是65%,属于B的概率是55%,则样本x属于类别A。
当投票合集中使用的模型能预测出清晰的类别标签时,适合使用硬投票。软投票同样可以用于那些本身并不预测类成员概率的模型,只要他们可以输出类似于概率的预测分数值(例如支持向量机、k-最近邻和决策树)。
好的投票法对基模型有要求:
- 基模型之间的效果不能差别过大。当某个基模型相对于其他基模型效果过差时,该模型很可能成噪声。
- 基模型之间应该有较小的同质性。例如在基模型预测效果近似的情况下,基于树模型与线性模型投票,往往优于两个树模型或两个线性模型。
投票法的案例
Sklearn中提供了 VotingRegressor 与 VotingClassifier 两个投票方法。 这两种模型的操作方式相同,并采用相同的参数。
class sklearn.ensemble.VotingClassifier(estimators, *, voting=‘hard’, weights=None, n_jobs=None, flatten_transform=True, verbose=False)
针对非拟合估计器的Soft Voting/Majority规则分类器。
参数 | 说明 |
---|---|
estimators | list of (str, estimator) tuples。由基模型的名字和基模型组成的元组 |
voting | {‘hard’, ‘soft’}, default=’hard’。其中"hard":多数决定投票,“soft”:基于预测概率总和最大值的投票 |
weights | array-like of shape (n_classifiers,), default=None。权重序列(float或int),用于在平均(soft voting)之前对预测的类标签(hard voting)或类概率的出现进行加权。如果没有,使用统一的权重。 |
n_jobs | int, default=None。所有并行estimators fit作业数量,None表示是1。-1表示使用所有处理器。 |
flatten_transform | bool, default=Tru。如果voting= 'soft’且flatten_transform=True, 转化方法返回大小为(n_samples, n_classifiers * n_classes)的矩阵。如果flat _transform=False,它返回(n_classifiers, n_samples, n_classes)。 |
verbose | bool, default=Fals。如果为True,拟合时经过的时间将在拟合完成时打印出来。 |
上面参数说明来源sklearn中文翻译网址
bagging思路
Bagging不仅仅集成模型最后的预测结果,同时采用一定策略来影响基模型训练,保证基模型可以服从一定的假设。前面的投票法的VotingClassifier希望各个模型之间具有较大的差异性,而在实际操作中的模型却往往是同质的,因此一个简单的思路是通过不同的采样增加模型的差异性。
Bagging的核心在于自助采样(bootstrap)这一概念,即有放回的从数据集中进行采样,也就是说,同样的一个样本可能被多次进行采样。一个自助采样的小例子是我们希望估计全国所有人口年龄的平均值,那么我们可以在全国所有人口中随机抽取不同的集合(这些集合可能存在交集),计算每个集合的平均值,然后将所有平均值的均值作为估计值。
Bagging方法之所以有效,是因为每个模型都是在略微不同的训练数据集上拟合完成的,这又使得每个基模型之间存在略微的差异,使每个基模型拥有略微不同的训练能力。
- 对回归问题的预测:通过预测取平均值来进行的。
- 对于分类问题的预测:通过对预测取多数票预测来进行的。
Bagging同样是一种降低方差的技术,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效果更加明显。在实际的使用中,加入列采样的Bagging技术对高维小样本往往有神奇的效果。
为什么加入列采样的Bagging技术对高维小样本往往有神奇的效果?
会变成随机森林
bagging案例
Sklearn为我们提供了 BaggingRegressor 与 BaggingClassifier 两种Bagging方法的API,这两种方法的默认基模型是树模型。
这里的树模型一般指决策树,它是一种树形结构。决策树的建立过程是一个对数据不断划分的过程,每次划分中,首先要选择用于划分的特征,之后要确定划分的方案(类别/阈值)。
每次划分相当于做一次决策,希望每做一次划分之后的新集合内部的样本“纯度”尽可能的高(新集合内部同质性提升最大),划分指标有信息增益、增益率、基尼系数。
Bagging的一个典型应用是随机森林。顾名思义,“森林”是由许多“树”bagging组成的。在具体实现上,用于每个决策树训练的样本和构建决策树的特征都是通过随机采样得到的,随机森林的预测结果是多个决策树输出的组合(投票)。随机森林的示意图如下:
bagging代码示例