一、集成学习(Ensemble Learning)
集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新的学习器。
集成学习的主要思想:
1、Bagging:代表算法是随机森林(Random Forest)
2、Boosting:代表算法是AdaBoost、GBDT
3、Stacking:由于深度学习的发展,现已基本不用
为什么要用集成学习?
- 弱学习器之间存在一定差异,这会导致分类边界不同,将多个弱分类器合并后,可以得到更加合理的边界,减少整体错误率,实现更好的效果。
- 对于数据集过大或者过小,可分别通过划分和有放回抽样产生不同的子数据集,然后使用子数据集进行训练,产生不同的分类器,最终合并成为一个大的分类器。
- 如果数据的划分边界过于复杂,使用线性模型很难描述,那么可以训练多个模型,再进行模型的融合。
- 对于多个异构的特征集,很难进行融合,则可以考虑每个数据集训练一个分类模型,然后将多个模型融合。
二、Bagging思想
Bagging 方法又称为自举汇聚法(Bootstrap Aggregating),其思想是:在m 个原始数据集上通过有放回抽样的方式,重新选出m 个数据进行训练,得到一个分类器;重复上述操作n 次,得到n 个分类器。
Bagging 方法用于分类模型 – 多数投票;
Bagging 方法用于回归模型 – 求均值
Bagging 方法的弱学习器可以是基本的算法模型,如:Linear、Ridge、Lasso、Logistic、Softmax、ID3、CART、C4.5、SVM、KNN等。
Bagging 方法是有放回的抽样,且每个子集的样本数量必须有原始数据集一致,所以子集中是存在重复数据的,但是在模型训练过程中会将重复数据删除,即最终用于训练模型的数据集样本数和原始样本数是不一致的。
三、随机森林(Random Forest)
在Bagging策略的基础上修改后的一种算法
-
从原始样本集(n个样本)中用Bootstrap(有放回重采样)方法选出n 个样本;
(注意:真正用于训练模型的是n 个样本去重后的样本集!)
-
使用去重后的子数据集训练决策树:从所有特征属性中随机选择k 个属性,从这k 个属性中选择最佳分割属性作为节点来迭代的创建决策树;
(最终用于划分的特征属性是局部最优的)
- 重复以上两步m 次,创建m 个决策树;
- 这m 个决策树形成随机森林,通过投票表决结果来决定数据属于哪一类。
决策树:从当前节点的所有特征属性中选择最优划分属性,用于划分的特征属性是全局最优的;
随机森林:对于决策树的每一个节点,都是从当前节点的所有特征属性中随机选择k 个属性,然后从这k 个属性中选择最佳划分特征属性,用于划分的特征属性是局部最优的。
四、RF API
sklearn库中随机森林分类器RandomForestClassifer API:
sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion='gini',
max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0,
max_features='auto', max_leaf_nodes=None, min_impurity_split=1e-07, bootstrap=True,
oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None)
参数说明:
-
:森林中决策树的数量,即子模型的数量,值过小会导致欠拟合,过大会导致过拟合,一般选择50~100,默认为10。n_estimators
-
:分类方法,可选值为’gini’和信息增益’entropy’,默认为’gini’。criterion
-
:树的最大深度,默认为None,表示一直扩展到叶子节点足够纯或者样本数小于min_samples_slpit。max_depth
-
:指定选择最优划分属性的时候,从多少个特征属性中选择,即k。默认为’auto’:max_features=sqrt(n_features),一般不改动。max_features
-
:分割叶子节点所需的最少样本数量,默认为2。min_samples_split
-
:叶子节点所需的最少样本数量,默认为1。min_smaples_leaf
-
:是否进行有放回重采样,默认为True。bootstrap
五、总结
RF 的主要优点:
1、训练可以并行化,对于大规模样本的训练具有速度优势。
2、由于进行随机选择决策树划分特征列表,这样当样本维度较高(特征属性较多)时,仍然具有较高的训练性能。
3、可以给出各个特征的重要性列表。
4、由于存在随机抽样,训练出来的模型方差小,泛化能力强。
5、实现简单。
6、对于部分特征的缺失不敏感。
RF 的主要缺点:
1、在某些噪音比较大的特征上,模型容易陷入过拟合。
2、取值较多的划分特征对RF的决策会产生更大影响,从而有可能影响模型效果。
RF scikit-learn 相关参数
参数 | RandomForestClassifer | RandomForestRegressor |
---|---|---|
criterion | 划分标准,默认为’gini’,可选gini和entropy | 划分标准,可选mse 和mae,默认mse |
loss | 不支持 | 损失函数,可选’linear’、‘square’、‘exponential’,默认为linear,一般不改动 |
n_estimators | 最大迭代次数,即随机森林中决策树的个数,值过小会导致欠拟合,过大会导致过拟合。一般取50~100,默认为10. | 同左 |
max_features | 给定选择最佳划分特征时,选择多少个特征属性进行考虑,默认为’auto’:max_features=sqrt(n_features) | 同左 |
max_depth | 决策树的最大深度,默认为None,表示一直扩展到叶子节点足够纯或者样本数小于min_samples_split | 同左 |
min_samples_split | 分割节点所需的最少样本数量,默认为2. | 同左 |
min_samples_leaf | 叶子节点中最少样本数量,默认为1. | 同左 |
bootstrap | 是否进行有放回重采样,默认为True。 | 同左 |