算法小知识点
1. Bootstrap 自助法
- 一种抽样方法:有放回地从 N 个样本中抽样 n 个样本
- 核心思想:子样本之于样本,可以类比样本之于总体
- 适用于小样本
2. Bagging - Random Forest
- Bagging 和 Boosting都是 集成学习(ensemble learning) 领域的基本算法
- Bagging (bootstrap aggregation):
- 从样本集中用Bootstrap采样选出n个训练样本(放回,因为别的分类器抽训练样本的时候也要用);
- 在所有属性上,用这n个样本训练分类器(CART or SVM or …);
- 重复以上两步m次,就可以得到m个分类器(CART or SVM or …);
- 将数据放在这m个分类器上跑,最后投票机制(多数服从少数)看到底分到哪一类(分类问题)。
- Bagging代表算法 - Random Forest(随机森林):
- 用Random的方式(详见第4点)构造一棵决策树(CART, Classification and Regression Tree)
- 用1的方法构造很多决策树,每棵决策树都最大可能地进行生长而不进行剪枝,许多决策树构成一片森林,决策树之间没有联系
- 测试数据进入每一棵决策树,每棵树做出自己的判断,然后进行投票选出最终所属类别(默认每棵树权重一致)
- 随机森林中Random指:
- 训练样本选择方面的Random - Bootstrap方法随机选择子样本;
- 特征选择方面的Random - 属性集中随机选择k个属性,每个树节点分裂时,从这随机的k个属性,选择最优的。
- 随机森林的优缺点:
- 不容易出现过拟合,因为选择训练样本的时候就不是全部样本
- 既可以处理属性为离散值的量,也可以处理属性为连续值的量,但是不能给出一个连续型的输出
- 可以处理成千上万的输入特征,并确定最重要的特征,因此被认为是一个不错的降维方法。
- 分类不平衡的情况时,随机森林是能够平衡数据集误差的有效方法,
- 注意:
- Bagging树"并行"生成,如Random Forest;Boosting树"串行"生成,如Adaboost
- Boosting中的基模型为弱模型,而Random Forest中的基树是强模型(大多数情况)
- Boosting重采样的不是样本,而是样本的分布,每次迭代之后,样本的分布会发生变化,也就是被分错的样本会更多的出现在下一次训练集中
3. Boosting - Adaboost
- Bagging 和 Boosting都是 集成学习(Ensemble Learning) 领域的基本算法
- Boosting算法代表 - Adaboost(Adaptive Boosting,自适应提升算法):
- 针对同一个训练集训练不同的分类器(弱分类器),然后进行分类,对于分类正确的样本权值低,分类错误的样本权值高(通常是边界附近的样本),最后的分类器是很多弱分类器的线性叠加(加权组合)
- Boosting算法更加关注错分的样本。这些分错的样本,在给下一个分类器的时候权重就得到提高,也就是会影响到下次取训练样本的分布。
- Adaboost算法中有两种权重,一种是数据的权重,另一种是弱分类器的权重。其中,数据的权重主要用于弱分类器寻找其分类误差最小的决策点,找到之后用这个最小误差计算出该弱分类器的权重。
- AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法的二类分类学习方法。
- Adaboost优缺点:
- 不用做特征筛选,可以使用各种方法构造子分类器,Adaboost算法提供的是框架
- 相比较于随机森林,更不用担心过拟合问题
- 在每次迭代时候会给噪声点较大的权重,因此对于噪音数据和异常数据是十分敏感的
- Adaboost是一种"串行"算法,运行速度慢
- 注意:
- Bagging树"并行"生成,如Random Forest;Boosting树"串行"生成,如Adaboost
- Boosting中的基模型为弱模型,而Random Forest中的基树是强模型(大多数情况)
- Boosting重采样的不是样本,而是样本的分布,每次迭代之后,样本的分布会发生变化,也就是被分错的样本会更多的出现在下一次训练集中
4. 模型评估方法
留出法(hold-out)
直接将数据集D划分为两个互斥的部分,其中一部分作为训练集S,另一部分用作测试集T。
K-折交叉验证法(cross-validation)
交叉验证法先将数据集D划分为k个大小相似的互斥子集,每次采用k−1个子集的并集作为训练集,剩下的那个子集作为测试集。进行k次训练和测试,最终返回k个测试结果的均值。
留一法(leave-one-out,LOO)
留一法是k折交叉验证k=m(m为样本总数)时候的特殊情况。即每次只用一个样本作测试集。该方法计算开销较大。
5. 梯度提升树
- 梯度提升决策树(Gradient Boosting Decision Tree - CBDT)也叫做累加回归树(Multiple Additive Regression Tree - MART),梯度提升树是以 CART 作为基函数,采用加法模型和前向分步算法的一种梯度提升方法。
- GBDT中的树是回归树(不是分类树),GBDT用来做回归预测,调整后也可以用于分类。
- GBDT也是Boosting家族的成员。与Adaboost的相同点 - GBDT也是迭代,使用了前向分布算法;不同点 - 弱学习器限定了只能使用CART回归树模型,同时GBDT是基于残差学习的算法,没有AdaBoost中的样本权重的概念。
- 回归树:回归树总体流程类似于分类树,区别在于,回归树的每一个节点都会得一个预测值,以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分枝是穷举每一个特征的每个阈值找最好的分割点,但衡量最好的标准不再是ID3中的最大熵,而是最小化平方误差,通过最小化平方误差能够找到最可靠的分枝依据。
- 提升树:提升树是迭代多棵回归树来共同决策。当采用平方误差损失函数时,每一棵回归树学习的是之前所有树的结论和残差,拟合得到一个当前的残差回归树。残差 = 真实值 - 预测值 。提升树即是整个迭代过程生成的回归树的累加。
6. ID3、C4.5、CART
- ID3:
- ID3算法是以信息论为基础,以信息熵和信息增益度为衡量标准,从而实现对数据的归纳分类。每次根据“最大信息熵增益”选取当前最佳的特征来分割数据,并按照该特征的所有取值来切分,也就是说如果一个特征有4种取值,数据将被切分4份,一旦按某特征切分后,该特征在之后的算法执行中,将不再起作用。
- 最大信息熵增益,即信息不确定性减少的程度最大。
- ID3算法计算每个属性的信息增益,并选取具有最高增益的属性作为给定的测试属性。在建立决策树的过程中,根据特征属性划分数据,使得原本“混乱”的数据的熵(混乱度)减少,按照不同特征划分数据熵减少的程度会不一样。在ID3中选择熵减少程度最大的特征来划分数据(贪心),也就是“最大信息熵增益”原则。
- ID3采用的信息增益度量存在一个缺点,它一般会优先选择有较多属性值的Feature,因为属性值多的Feature会有相对较大的信息增益。
- C4.5:
- C4.5算法核心思想是ID3算法,是ID3算法的改进,改进方面有四方面,第一就是用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足。第二就是在树构造过程中进行剪枝。第三就是能处理连续(非离散)的数据。第四就是能处理不完整的数据。
- 信息增益率=信息增益/IV(a),说明信息增益率是信息增益除了一个属性a的固有值得来的。
- 增益率准则其实对可取类别数目较少的特征有所偏好,于是C4.5算法不直接选择增益率最大的候选划分属性,候选划分属性中找出信息增益高于平均水平的属性(这样保证了大部分好的的特征),再从中选择增益率最高的。
- CART:
- ID3和C4.5虽然在对训练样本集的学习中可以尽可能多的挖掘信息,但其生成的决策树分支较大,规模较大。为了简化决策树的规模,提高生成决策树的效率,就出现了根据基尼指数来选择的CART。
- CART为分类和回归树,既可以用于分类也可以用于回归。对回归树用平方误差最小准则,对分类树用基尼指数最小化准则。