学习目标:
- 看完机器学习实战第三部分聚类算法
- 机器学习实战关联分析算法Apriori,FP-growth算法
- 《结构化机器学习课程》
学习内容:
- bagging(自举汇聚法)和 boosting(提升方法)
- AdaBoost
- Apriori
- FP-growth
- 机器学习策略
- “花书”应用数学和机器学习基础
学习时间:
- 6.5-6.11
学习产出:
- CSDN 技术博客 1 篇
- 习的 vlog 视频 1 个
- github仓库
Bagging算法
自举汇聚法(bootstrap aggregating),也称为bagging方法,是在从原始数据集选择S次后得到S个新数据集的一种技术,新数据集和原始数据集大小相等,每个数据集都是通过在原始数据集中随机选择一个样本来进行替换而得到的。替换就意味着可以多次选择同一个样本,即新数据集可以出现重复的值,而原始数据集中的某些值在新集合中则不再出现。
S个数据集建好之后,将某个学习算法分别作用于每个数据集就得到了S个分类器,当对新数据进行分类时,就可以应用这S个分类器进行分类。与此同时,选择分类器投票结果中最多的类别作为最后的分类结果。
Bagging对训练数据采用自举采样(boostrap sampling),即有放回地采样数据。
Boosting算法
boosting(提升方法)
提升(boosting)方法是一种与bagging很类似的技术,是常用的统计学习方法,应用广泛且有效。Boosting的思路则是采用重赋权(re-weighting)法迭代地训练基分类器,主要思想:
每一轮的训练数据样本赋予一个权重,并且每一轮样本的权值分布依赖上一轮的分类结果。
基分类器之间采用序列式的线性加权方式进行组合。分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类性能。
Bagging、Boosting二者之间的区别
样本选择上:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
样例权重:
Bagging:使用均匀取样,每个样例的权重相等。
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
预测函数:
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
并行计算:
Bagging:各个预测函数可以并行生成。
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
总结
这两种方法都是把若干个分类器整合为一个分类器的方法,只是整合的方式不一样,最终得到不一样的效果,将不同的分类算法套入到此类算法框架中一定程度上会提高了原单一分类器的分类效果,但是也增大了计算量。
将决策树与这些算法框架进行结合所得到的新的算法:
Bagging + 决策树 = 随机森林
AdaBoost + 决策树 = 提升树
Gradient Boosting + 决策树 = GBDT
Adaboost算法
Boosting,也称为增强学习或提升法,是一种重要的集成学习技术,能够将预测精度仅比随机猜度略高的弱学习器增强为预测精度高的强学习器。
Adaboost算法流程:
该算法是一个简单的弱分类算法提升过程,这个过程通过不断的训练,可以提高对数据的分类能力。整个过程如下所示:
- 先通过对N个训练样本的学习得到第一个弱分类器;
- 将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器 ;
- 将1和2都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器;
- 最终经过提升的强分类器。即某个数据被分为哪一类要由各分类器权值决定。
步骤如下:
1)计算样本权重
训练数据中的每个样本,赋予其权重,即样本权重,用向量D表示,这些权重都初始化成相等值。假设有n个样本的训练集:
( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) {(x1,y1),(x2,y2),...,(xn,yn)} (x1,y1),(x2,y2),...,(xn,yn)
2)计算错误率
利用第一个弱学习算法h1对其进行学习,学习完成后进行错误率ε的统计:
ϵ = 未 正 确 分 类 的 样 本 数 目 所 有 样 本 数 目 ϵ=\frac{未正确分类的样本数目}{所有样本数目} ϵ=所有样本数目未正确分类的样本数目
3)计算弱学习算法权重
弱学习算法也有一个权重,用向量α表示,利用错误率计算权重α:
a
=
1
2
l
n
(
1
−
ϵ
ϵ
)
a = \frac12ln(\frac{1-ϵ}{ϵ})
a=21ln(ϵ1−ϵ)
4)更新样本权重
在第一次学习完成后,需要重新调整样本的权重,以使得在第一分类中被错分的样本的权重,在接下来的学习中可以重点对其进行学习:
D t + 1 ( i ) = D t ( i ) e x p ( − a t y t h t ( x i ) ) s u m ( D ) D_{t+1}(i) = \frac{D_t(i)exp(-a_ty_th_t(x_i))}{sum(D)} Dt+1(i)=sum(D)Dt(i)exp(−atytht(xi))
5)重复进行学习
重复进行学习,这样经过t轮的学习后,就会得到t个弱学习算法、权重、弱分类器的输出以及最终的AdaBoost算法的输出:
{
h
1
,
h
2
,
.
.
.
,
h
t
{h_1,h_2,...,h_t}
h1,h2,...,ht}
{
a
1
,
a
2
,
.
.
.
,
a
t
{a_1,a_2,...,a_t}
a1,a2,...,at}
{
h
1
(
X
)
,
h
2
(
X
)
,
.
.
.
,
h
t
(
X
)
{h_1(X),h_2(X),...,h_t(X)}
h1(X),h2(X),...,ht(X)}
H
(
X
)
=
s
i
g
n
(
∑
i
=
1
t
a
i
h
i
(
X
)
)
H(X) = sign(\sum_{i=1}^ta_ih_i(X))
H(X)=sign(∑i=1taihi(X))
Apriori算法
根据物品间的支持度找出物品中的频繁项集。运用Apriori算法的思想,我们就能去掉很多非频繁的项集,大大简化计算量。
- Apriori算法流程
要使用Apriori算法,我们需要提供两个参数,数据集和最小支持度。先遍历1个物品组合的情况,剔除掉支持度低于最小支持度的数据项,然后用剩下的物品进行组合。遍历2个物品组合的情况,再剔除不满足条件的组合。不断递归下去,直到不再有物品可以组合。
FP-growth
FP-growth(Frequent Pattern Tree, 频繁模式树),是韩家炜老师提出的挖掘频繁项集的方法,是将数据集存储在一个特定的称作FP树的结构之后发现频繁项集或频繁项对,即常在一块出现的元素项的集合FP树。
FP-growth算法比Apriori算法效率更高,在整个算法执行过程中,只需遍历数据集2次,就能够完成频繁模式发现,其发现频繁项集的基本过程如下:
(1)构建FP树
(2)从FP树中挖掘频繁项集
FP-growth的一般流程如下:
- 先扫描一遍数据集,得到频繁项为1的项目集,定义最小支持度(项目出现最少次数),删除那些小于最小支持度的项目,然后将原始数据集中的条目按项目集中降序进行排列。
- 第二次扫描,创建项头表(从上往下降序),以及FP树。
- 对于每个项目(可以按照从下往上的顺序)找到其条件模式基(CPB,conditional patten base),递归调用树结构,删除小于最小支持度的项。如果最终呈现单一路径的树结构,则直接列举所有组合;非单一路径的则继续调用树结构,直到形成单一路径即可。
总结
本周主要是看《机器学习实战》第七章AdaBoost自适应增强算法的原理,跟了下代码流程,对比着学习了第十一章第十二章的关联分析算法Apriori,FP-growth算法,总结的还不是太全面,后便会再补充一下。
同步跟进了吴恩达机器学习课程的机器学习策略部分,从建立评估指标以及如何设置优化和满足来提升效率,训练/测试集的划分,估计可避免偏差/方差等来改善模型表现;对错误分类的样本进行误差分析。
这周开始看了《深度学习》(花书)第一部分应用数学基础,复习了线代,概率论,数值计算的一些基本概念。