集成学习:
一种思想,指导着一套算法的学习
弱学习器 60%
强学习器 99%
多个弱学习器组合在一起,最终达到比单独一个强学习器还要好的效果
一个算法 80%
boosting: 弱弱增强,解决欠拟合的问题
bagging: 每一个模型都容易过拟合,相互遏制,稳定性变强(robust),泛化能力增强
3个 分类结果
建立几个模型来解决单一预测问题
这些预测最后结合成组合预测,因此优于任何一个单分类的做出预测。
未来数据上,做出很好的预测
训练数据集合上表现很好,测试数据集合上表现很好
欠拟合:训练数据集合上表现不好,测试数据集合上表现不好
过拟合:训练数据集合上表现好,测试数据集合上表现不好
模型的泛化性能差
分类为例:
每个弱学习器单独训练,单独预测,预测结果组合,解决欠拟合
bagging
先训练一个弱学习器,下一个学习器在上一个学习器的错误数据上进行训练
boosting
5.2 Bagging
每个弱学习器单独训练,单独预测,平权组合预测结果,做预测【分类问题,平权投票;回归问题,取平均值】
N个样本随机有放回的抽取N次 (66%)
每个学习器对数据做随机抽样(保证每个学习器都能拿到尽可能多的数据,每一个学习器拿到的数据集不能完全相同)
单独训练
单独预测
预测结果组合(平权)即看这个部分那个类别多,咱们的结果就选择这个类别
随机森林构造过程
随机:指咱们的学习器随机采样的过程
多个子学习器(决策树) + bagging 风格
100个特征 20 100颗
- 随机抽样数据
- 随机抽样特征
- 每个决策树单独训练
- 每个数都有预测能力
- 平均投票(回归问题:取平均值)
3 随机森林api介绍
sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None, bootstrap=True, random_state=None, min_samples_split=2)
.fit(x_train, y_train
.predict(x_test)
.score(x_test, y_test)
5 bagging集成优点
简单, 方便, 通用
先训练一个弱学习器,
下一个学习器在上一个学习器做错的数据上进行重点的学习
下一个学习器在上一个学习器做错的数据上进行重点的学习
下一个学习器在上一个学习器做错的数据上进行重点的学习 。。。
多个学习器之间进行加权组合
Boosting
关键点:
如何确认投票权重?
如何调整数据分布?
随着学习的积累从弱到强
Adaboost,GBDT,XGBoost
1.2 实现过程:
准确率: 100
调整权重: 50 个预测对的 50个预测错
50 / (50 + 50 * 2)
boosting的过程:
第一个弱学习期在数据集合上进行训练
调整数据权重(预测错误的数据权重增加,预测正确的数据权重减小)
下一个学习器就在上一个学习器调整过权重的数据集上在进行训练
调整数据分布
下一个学习器就在上一个学习器调整过权重的数据集上在进行训练
调整数据分布
。
。
。
所有学习器加权组合在一起(预测结果加权组合作为最终结果)
如何调整数据权重? (咱们每一次都是在上一次的基础上进行权重更新)
咱们的回归问题中 --> 权重之和为1
如何调整学习器的权重?
= 1/2 * ln((1 - 错误率)/错误率)
m 1/m
10 1/10
3个错的
7的对的
错误率= 0.3
学习器的权重 alpha1 = 1/2 * ln((1 - 0.3) / 0.3)
= 0.5 * ln(7/3)
调整数据的权重
预测对的样本
0.1 * e^(- 0.5 * ln(7/3))
预测错的样本
0.1 * e^(0.5 * ln(7/3))
0.1 * e^(- 0.5 * ln(7/3)) * 7 + 0.1 * e^(0.5 * ln(7/3)) * 3
adaboost
True, False
- 全部的训练数据,初始化成平权,训练学习器
- 计算学习器在训练数据上的错误率(调整训练数据的权重)
- 根据错误率调整数据权重
- 下一轮的学习器的训练
- 上面做循环m次,训练出率m个学习器
- 所有的学习器加权投票
GBDT(了解)
GBDT = 梯度下降 + Boosting + 决策树
回归问题用方差作为咱们决策树的度量
分类则是 信息增益、信息增益率或者基尼指数
h0(x) = 1.475
连续值怎么衡量纯不纯粹,一不一致, 方差
h1(x) = -0.275 (年龄<21) 0.275 (年龄>=21)
h2(x) = -0.1 (体重<30) 0.03 (体重>=30)
H(x) = h0(x) + h1(x) + h2(x)
= 1.475 + 0.275 + 0.03
= 1.78
1.使用梯度下降法优化代价函数;
2.使用一层决策树作为弱学习器,负梯度作为目标值;(梯度的负值是函数下降最快的方向)
3.利用boosting思想进行集成。
XGBoost【了解】
GBDT = 梯度下降 + Boosting + 决策树
XGBoost= 二阶泰勒展开+boosting+决策树+正则化
w, f(w)
w0, f(w0)
f’(w0) = 1
f(w0 + 0.000001) = f(w0) + 0.000001 * f’(w0)
XGBoost= 二阶泰勒展开+boosting+决策树+正则化
- 面试题:了解XGBoost么,请详细说说它的原理
回答要点:二阶泰勒展开,boosting,决策树,正则化
Boosting:XGBoost使用Boosting提升思想对多个弱学习器进行迭代式学习
二阶泰勒展开:每一轮学习中,XGBoost对损失函数进行二阶泰勒展开,使用一阶和二阶梯度进行优化。
决策树:在每一轮学习中,XGBoost使用决策树算法作为弱学习进行优化。
正则化:在优化过程中XGBoost为防止过拟合,在损失函数中加入惩罚项,限制决策树的叶子节点个数以及决策树叶子节点的值。
bagging集成与boosting集成的区别:
区别一:数据方面
Bagging:对数据进行采样训练;
Boosting:根据前一轮学习结果调整数据的重要性。(对整体的数据进行训练)
区别二:投票方面
Bagging:所有学习器平权投票;
Boosting:对学习器进行加权投票。
区别三:学习顺序
Bagging的学习是并行的,每个学习器没有依赖关系;
Boosting学习是串行,学习有先后顺序。
区别四:主要作用
Bagging主要用于提高泛化性能(解决过拟合,也可以说降低方差)
Boosting主要用于提高训练精度 (解决欠拟合,也可以说降低偏差)
数据分析
机器学习
深度学习: 图像
名字
算法分类
思路
怎么用api
细致数学原理
实现步骤
优化
具有快速的业务理解及学习能力,逻辑思维、自我驱动、抗压能力强
ACL、 EMNLP 、NIPS、ICLR、ICML等会议
百词斩
100天阅读
深度学习 图像
CNN LeCun LeNet-5