Boosting算法及wordvec笔记

机器学习

机器学习主要干三件事

  • 1、设计模型,确定查找目标函数的范围
    首先我们应该给机器划定一个圈子,告诉它就在这个圈子里面找目标函数。这个圈子称之为模型。
    模型定义了一个函数空间,也就是说目标函数只能在模型所定义的这个函数空间里面。
    模型决定了目标函数模拟效果的上限。
  • 2、选择损失函数,制定函数的评价标准
    要让机器在模型所定义的函数空间中找到目标函数,需要告诉机器目标函数需要具备什么样子特质。
    我们用损失函数(loss function)来量化函数的好坏,Loss越小,代表函数越“好”。函数空间中最“好”的那个函数就是目标函数,它对应的Loss是最小的。
  • 3、选择优化器,为机器指明如何找到目标函数的途径
    找目标函数的最后一步就是告诉机器怎样在模型所定义的函数空间中去找到Loss最小的函数。
    一般的做法是先初始化模型的参数(具体初始化的方式有若干种),然后在训练集上算出loss针对各个参数的偏微分,最后按照一定的计算规则对各个参数进行更新。参数更新的规则称为优化器(optimizer)。


    偏差和方差
机器学习算法来说,其泛化误差可以分解为两部分,偏差(bias)和方差(variance);
偏差指的是算法的期望预测与真实预测之间的偏差程度,反应了模型本身的拟合能力;
方差度量了同等大小的训练集的变动导致学习性能的变化,刻画了数据扰动所导致的影响。
当模型越复杂时,拟合的程度就越高,模型的训练偏差就越小。但此时如果换一组数据可能模型的变化就会很大,即模型的方差很大。所以模型过于复杂的时候会导致过拟合。
当模型越简单时,即使我们再换一组数据,最后得出的学习器和之前的学习器的差别就不那么大,模型的方差很小,但因为模型简单,所以偏差会很大。
也就是说,在训练一个模型时,偏差和方差都得照顾到,漏掉一个都不行;
对于 Bagging 算法来说,由于会并行地训练很多不同的分类器的目的就是降低这个方差(variance),因为采用了相互独立的基分类器多了以后,h 的值自然就会靠近。所以对于每个基分类器来说,目标就是如何降低这个偏差(bias),所以一般会采用深度很深甚至不剪枝的决策树。
对于 Boosting 来说,每一步都会在上一轮的基础上更加拟合原数据,所以可以保证偏差(bias),所以对于每个基分类器来说,问题就在于如何选择 variance 更小的分类器,即更简单的分类器,所以一般选择深度很浅的决策树。

Boosting

一种迭代更新的逐步降低模型整体的误差的办法,集成学习的一种策略

  • 算法的三个要素
    (1)函数模型:Boosting的函数模型是叠加型的
    (2)目标函数:选定某种损失函数作为优化目标
    (3)优化算法:贪婪地逐步优化

  • 特点
    (1)一种用来提高弱分类算法准确度的方法
    (2)训练过程为阶梯状,弱分类器按次序一一进行训练,弱分类器的训练集按照某种策略每次都进行一定的转化。最后以一定的方式将弱分类器组合成一个强分类器

    Boosting

  • AdaBoost
    在整个训练集上维护一个分布权值向量 Dt( x) ,用赋予权重的训练集通过弱分类算法产生分类假设 Ht ( x) ,即基分类器,然后计算他的错误率,用得到的错误率去更新分布权值向量 Dt( x) ,对错误分类的样本分配更大的权值,正确分类的样本赋予更小的权值。
    每次更新后用相同的弱分类算法产生新的分类假设,这些分类假设的序列构成多分类器。
    对这些多分类器用加权的方法进行联合,最后得到决策结果。

    AdaBoost

    前一个学习器改变权重w,然后再经过下一个学习器,最终所有的学习器共同组成最后的学习器。
    如果一个样本在前一个学习器中被误分,那么它所对应的权重会被加重,相应地,被正确分类的样本的权重会降低。
    adaboosting

    adaboosting

    adaboosting

  • Gradient Boosting
    Gradient Boosting 在迭代的时候选择梯度下降的方向来保证最后的结果最好。
    损失函数用来描述模型的“靠谱”程度,假设模型没有过拟合,损失函数越大,模型的错误率越高
    如果我们的模型能够让损失函数持续的下降,则说明我们的模型在不停的改进,而最好的方式就是让损失函数在其梯度方向上下降

从数学上的角度来看,梯度的方向是函数增长速度最快的方向,那么梯度的反方向就是函数减少最快的方向。
那么,如果想计算一个函数的最小值,就可以使用梯度下降法的思想来做;
如果要计算一个函数的最大值,沿梯度相反的方向即可。
Gradient Boosting
  • XGBoost
    XGBoost 是GBDT的一个变种,最大的区别是xgboost通过对目标函数做二阶泰勒展开,从而求出下一步要拟合的树的叶子节点权重(需要先确定树的结构),从而根据损失函数求出每一次分裂节点的损失减小的大小,从而根据分裂损失选择合适的属性进行分裂。
  1. 相对GBDT来说,XGB在增加二阶梯度有更高的精度。
  2. XGB的节点划分策略带有进行预排序,利用样本在损失函数上面的二阶梯度作为权值。
  3. XGB对稀疏的特征划分方式。
  4. 在处理特征的粒度上进行多线程的优化。
  5. 使用近似算法替代每个样本逐个判断最佳分裂点的Exact Greedy Algorithm算法。
  • LightGBM
    轻量级梯度Boosting框架,解决传统的boosting算法在大样本高纬度数据的环境下耗时的问题;
    Lightgbm使用了如下两种解决办法:
    (1) GOSS(Gradient-based One-Side Sampling, 基于梯度的单边采样),不是使用所用的样本点来计算梯度,而是对样本进行采样来计算梯度;
    (2) EFB(Exclusive Feature Bundling, 互斥特征捆绑) ,不是使用所有的特征来进行扫描获得最佳的切分点,而是将某些特征进行捆绑在一起来降低特征的维度,使寻找最佳切分点的消耗减少。

Boosting系列算法的主要区别在于其三要素选取的函数不同.

wordvec

自然语言处理(NLP)系统通常将词汇作为离散的单一符号,这些符号编码毫无规律,无法提供不同词汇之间可能存在的关联信息。
词向量:
简单粗暴:词向量维度大小为整个词汇表的大小,对于每个具体的词汇表中的词,将对应的位置置为1。
降维:通过训练,将每个词都映射到一个较短的词向量上来(维度以 50 维和 100 维比较常见)
【CBOW模型】
CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。


CBOW的训练模型.png

【Skip-Gram模型】
Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。


Skip-Gram模型训练.png

【google word2vec】

google_word2vec.jpg

word2vec关心的是模型训练完后的副产物——模型参数并将这些参数,作为输入 x 的某种向量化的表示,便叫做词向量

借用网上的一个例子,如何用 Word2vec 寻找相似词:
1)对于一句话:“她们 夸 吴彦祖 帅 到 没朋友”,如果输入 x 是“吴彦祖”,那么 y 可以是"她们"、"夸"、"帅"、"没朋友" 这些词;
现有另一句话:"她们 夸 小明 帅 到 没朋友",如果输入 x 是"小明",那么不难发现,这里的上下文 y 跟上面一句话一样从而 f(吴彦祖) = f(小明) = y,所以大数据告诉我们:我 = 吴彦祖(完美的结论)

参考链接

  • https://www.cnblogs.com/zhubinwang/p/5170087.html
  • https://lightgbm.apachecn.org/#/
  • https://www.cnblogs.com/zhubinwang/p/5170087.html
  • https://www.jianshu.com/p/623ef31f186e
  • https://blog.csdn.net/weiyongle1996/article/details/78446244
  • https://www.jianshu.com/p/3daf08229d78
  • https://www.jianshu.com/p/5e6c5b616114
  • https://zhuanlan.zhihu.com/p/42740654
  • https://www.jianshu.com/p/b90a9ce05b28
  • https://www.zhihu.com/question/21661274
  • https://zhuanlan.zhihu.com/p/26306795
  • https://www.zhihu.com/question/44832436/answer/266068967
  • https://zhuanlan.zhihu.com/p/22477976
  • https://zhuanlan.zhihu.com/p/43736169
  • https://zhuanlan.zhihu.com/p/49972507
  • https://github.com/hankcs/HanLP/wiki/word2vec
  • http://www.hankcs.com/nlp/word2vec.html
  • https://github.com/svn2github/word2vec
  • https://zhuanlan.zhihu.com/p/33799633

你可能感兴趣的:(Boosting算法及wordvec笔记)