集成学习笔记--Boosting&Bagging,Adaboost,随机森林

目录

笔记

Boosting

Bagging&Boosting对比

Adaboost

Adaboost算法整体流程:

优缺点:

Adaboost的api


集成学习概述

集成学习笔记--Boosting&Bagging,Adaboost,随机森林_第1张图片

2 决策树

集成学习笔记--Boosting&Bagging,Adaboost,随机森林_第2张图片集成学习笔记--Boosting&Bagging,Adaboost,随机森林_第3张图片3 随机森林集成学习笔记--Boosting&Bagging,Adaboost,随机森林_第4张图片集成学习笔记--Boosting&Bagging,Adaboost,随机森林_第5张图片


4  Bagging和boosting集成学习笔记--Boosting&Bagging,Adaboost,随机森林_第6张图片集成学习笔记--Boosting&Bagging,Adaboost,随机森林_第7张图片

集成学习笔记--Boosting&Bagging,Adaboost,随机森林_第8张图片

 


Boosting

原理:随着学习的积累从弱到强

实现过程:

  1. 初始化训练数据权重,初始权重相等
  2. 通过学习器计算错误率
  3. 计算学习器的投票权重
  4. 对每个样本进行重新赋权
  5. 重复1-4
  6. 对构建好的最后的学习器进行加权投票

集成学习笔记--Boosting&Bagging,Adaboost,随机森林_第9张图片


Bagging&Boosting对比

1.数据方面:

       Bagging数据随机放回,重新采样

       Boosting:对数据进行权重调整

2.投票方面:

       Bagging 平权投票

       Boosting 加权投票

3.学习顺序方面:

       Bagging 并行(训练多个弱分类器)

       Boosting 串行(迭代生成弱分类器)

4.主要作用:

       Bagging 解决过拟合问题

       Boosting 欠拟合


Adaboost

前向分布算法:

弱学习器—决策树

通过将迭代生成弱学习器,并将产生的弱学习器与当前已有的学习器加和,最终产生一个强学习器。

Gm(x)是第m次迭代产生的弱学习器,最后将Sign(Fm(x))作为x的输出类别。

损失函数:

(1)

损失函数大,权重小;反之权重大。

所以我们可以从损失函数推导出样本权重w和学习器权重afa的推导公式。

损失函数L取:

集成学习笔记--Boosting&Bagging,Adaboost,随机森林_第10张图片

现在将(1)式代入上式进行推导:

集成学习笔记--Boosting&Bagging,Adaboost,随机森林_第11张图片

令Wmi=/

集成学习笔记--Boosting&Bagging,Adaboost,随机森林_第12张图片

集成学习笔记--Boosting&Bagging,Adaboost,随机森林_第13张图片

可以转换成+-1alpham,所以

预测错误的时候是正的,预测对的时候是负的。

集成学习笔记--Boosting&Bagging,Adaboost,随机森林_第14张图片

最终推导得到如下Wmi的递推公式:

集成学习笔记--Boosting&Bagging,Adaboost,随机森林_第15张图片

Adaboost算法整体流程:

优缺点:


Adaboost的api

# -*- coding:utf-8 -*-

from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import make_classification
from sklearn.svm import SVC

X, y = make_classification(n_samples=1000, n_features=4,
                           n_informative=2, n_redundant=0,
                           random_state=0, shuffle=False)

# 弱学习器更改为svm,需要设置algorithm为SAMME
cl=SVC()
# 默认决策树,max_depth=1,集成学习,本来弱,集成后结果反而更好;本来强,集成后结果不一定好。
clf = AdaBoostClassifier(base_estimator=cl,n_estimators=100, random_state=0,algorithm='SAMME')

clf.fit(X, y)
cl.fit(X,y)

print(clf.predict([[0, 0, 0, 0]]))

print(clf.score(X, y))
print(cl.score(X, y))#单个强的话效果更好

你可能感兴趣的:(集成学习,boosting,随机森林)