集成学习是提高模型鲁棒性的重要方法,在数据、特征处理之后的阶段,如果在算法方面没有提升,可以尝试在模型集成方面发力,可以收到意想不到的结果。但并不是使用集成学习方法就一定会提高结果。例如stacking方法,理论讲其结果渐进等价于第一层最优子模型结果,使用stacking至少不会大幅度降低模型效果。
一、投票方法
常用的有软投票和硬投票两种,例如,支持向量机可以输出各个样本属于某一类的概率,将多个模型的这种结果进行加权,便得到软投票的集成结果。硬投票更简单,直接多数服从少数即可。
二、Bagging
最常用的莫过于随机森林方法,其思想在随机森林原理这篇文章中有详细介绍。在构建模型的过程中,随机有放回的采样部分样本训练基学习器,最后将基学习器的结果进行融合就是bagging的最终结果。
三、Boosting
提升方法在boosting原理这篇文章中有较为详细的介绍。Boosting算法可以并行处理,而Boosting的思想是一种迭代的方法,每一次训练的时候都更加关心分类错误的样例,给这些分类错误的样例增大权重,下一次迭代的目标就是能够更容易辨别出上一轮分类错误的样例。最终将这些弱分类器进行加权。
四、Stacking
接下来重点介绍一下Stacking方法。
df = pd.read_csv('C:/Users/Titanic/train.csv')
test = df.sample(frac=0.1)
test.to_csv('C:/Users/Titanic/test.csv')
train = df[~df.PassengerId.isin(test.PassengerId)]
train.to_csv('C:/Users/Titanic/train.csv')
In [43]:
import pandas as pd
usedColumnFeature = ['PassengerId','Pclass','Sex','Age','SibSp','Parch','Fare','Embarked','Survived']
train = pd.read_csv('C:/Users/Titanic/train.csv', usecols=usedColumnFeature)
train.dropna(subset=['Age'],how='any',axis=0,inplace=True)
test = pd.read_csv('C:/Users/Titanic/test.csv', usecols=usedColumnFeatur