Flaretie
11/12/2018 - 3:01 AM

普通的学习笔记

非常普通的学习笔记

语言模型

如果把有监督学习算法归结成$f(x)\rightarrow y$ ,那么在NLP中,可以把 $x$看做j句子里的一个词语,$y$是这个词语的上下文词语,于是这里的$f$就是语言模型(Language model),它的作用是判断$(x,y)$是否符合NLP法则

词向量

Word2vec 来源于这个思想;但不同的是,它的最终目的,只关心模型训练完后的副产物—模型参数(这里特指神经网络的权重),并将这些参数,作为输入 x 的某种向量化的表示,这个向量便叫做—词向量

Skip-gram 和 CBOW 模型

从语言模型的概念出发有

  • 把一个词语作为输入,来预测它周围的上下文,这个模型就叫做 Skip-gram 模型
  • 用上下文作为输入,来预测这个词语,这样的模型叫做 CBOW 模型

现在我们想通过输入的$x$来预测$y$,但是这里的数学模型直接受数值型的输入,同样由于这个是训练之前,我们也不可以用word2vec,我们现在想要的是$x$的一个原始输入形式— one-hot encoder

One-hot encoder

One hot encoding is a process by which categorical variables are converted into a form that could be provided to ML algorithms to do a better job in prediction.

The categorical value assignment can be done using sklearn’s LabelEncoder. However, problem with label encoding is that it assumes higher the categorical value, better the category.

举例:产生这个的原因,假如现在有三家公司名字分别为XYZ,当他们转换成 Label Encoder 之后会变成1 2 3。这时,就会导致在分析的时候机器会认为Z>Y>X,甚至还会出现 (X+Z)/2 = Y的情况,但是这显然是不对的

所以,当我们想要二进制化目录同时保留他们原有的特性(每个词语的唯一性)的时候我们更多的是使用one-hot encoder

Skip-gram 网络结构

$x$ 就是上面提到的 one-hot encoder 形式的输入,$y$ 是在这 $V$ 个词上输出的概率,我们希望跟真实的 $y$ 的 one-hot encoder 一样。

首先,隐层的激活函数其实是线性的,相当于没做任何处理(这也是 Word2vec 简化之前语言模型的独到之-------处),我们要训练这个神经网络,用反向传播算法,本质上是链式求导,在此不展开说明了,

当模型训练完后,最后得到的其实是神经网络的权重,比如现在输入一个 x 的 one-hot encoder: [1,0,0,…,0],则在输入层到隐含层的权重里,只有对应 1 这个位置的权重被激活,这些权重的个数,跟隐含层节点数是一致的,从而这些权重组成一个向量 $vx$ 来表示$x$,而因为每个词语的 one-hot encoder 里面 1 的位置是不同的,所以,这个向量 $vx$ 就可以用来唯一表示 $x$

另外,输出 $y$ 也是用 $V$ 个节点表示的,对应V个词语。激活的是隐含层到输出层的权重,这些权重的个数,跟隐含层一样,也可以组成一个向量 $vy$,他的维度和 $vx$ 一样,并且可以看做是该词语的另一种词向量。而这两种词向量 $vx$ 和 $vy$,成为输入向量输出向量

Word2vec 本质上是一种降维操作—把词语从 one-hot encoder 形式的表示降维到 Word2vec 形式

Skip-gram 更一般的情形

更一般的情形为:当 y 有多个词的时候,这时候的网络结构图会变成并联

CBOW 更一般的情形

。。。

Word2vec 的训练技巧

Word2vec的本质是语言模型,输出的本质是一个多分类问题。然而实际当中,词语的个数非常非常多,会造成极大的计算困难,于是需要技巧来加速训练

  • hierarchical softmax
  • negative sampling

Sent2vec简析

The sentence embedding is defined as the average of the source word embeddings of its constituent words. This model is furthermore augmented by also learning source embedding for not only uni-grams but also n-grams of words present in each sentence, and averaging the n-gram embedding along with the words.

与FastText的区别

Predict from source word sequences to target words, as opposed to character sequences to target words.

在何种情况下使用 Sent2Vec

  • 当需要训练的数据集十分庞大
  • 用于主观性分类
    • 举例:影评
    • 主要原因是该算法有着良好的泛化能力

基本概念

决策树是一种依托于策略抉择而建立起来的树。是一种预测模型,代表的是一种对象特征属性与对象目标值之间的一种映射关系。

决策树只有单一输出;如果有多个输出,可以分别建立独立的决策树来处理不同的输出

基本算法

ID3

起源

  • J. Ross Quinlan于1975提出的一种贪心算法

  • 建立在奥卡姆剃刀的基础上,越是小型的决策树越优于大的决策树

    奥卡姆剃刀(英语:Occam's Razor, Ockham's Razor),又称“奥坎的剃刀”,拉丁文为lex parsimoniae,意思是简约之法则,是由14世纪逻辑学家、圣方济各会修士奥卡姆的威廉(William of Occam,约1287年至1347年,奥卡姆(Ockham)位于英格兰萨里郡)提出的一个解决问题的法则,他在《箴言书注》2卷15题说“切勿浪费较多东西,去做‘用较少的东西,同样可以做好的事情’。”换一种说法,如果关于同一个问题有许多种理论,每一种都能作出同样准确的预言,那么应该挑选其中使用假定最少的。尽管越复杂的方法通常能做出越好的预言,但是在不考虑预言能力(即结果大致相同)的情况下,假设越少越好。

算法核心

信息增益越大,区分样本的能力就越强,越具有代表性。于是根据信息增益的分支标准来划分数据,重复之后生成决策树,这是一种从上向下的贪心算法

用法

  • 可用于划分标称型数据集
  • 没有剪枝的过程,为了去除过度数据的匹配的问题,可通过裁剪合并相邻的无法长生大量信息增益的叶子结点

评判标准

  • 信息熵:$Entropy(D)=-\sum_\limits{k=1}^K p_k \cdot \log_2 p_k$
  • 信息增益: $Gain(D,a)=Entropy(D)-\sum_\limits{v=1}^V \frac{|D^v|}{D} Entropt(D^v)$

笔记

ID3并非不能用于连续值,只是当处理连续值得时候会有非常多可分点,于是时间复杂度会变得大,计算缓慢

C4.5

简介

C4.5在ID3的基础上进行了改进,克服了两个缺点

  1. 用信息增益选择属性时偏向于选择分枝比较多的属性值,即取值多的属性
  2. 不能处理连续属性

评判标准

  • 增益率:$GainRatio(D,T)=\frac{Gain(D,T)}{IV(T)}$
    • 固有值Intrinstic value: $IV(T)=-\sum_\limits{v=1}V\frac{|Dv|}{D}\log_2\frac{|D^v|}{D}$
    • 分支标准的属性可取值越多,则IV的值越大
      • 因此增益率准则对可取值数目较少的属性有所偏好,因此C4.5算法并不是直接选择增益率最大的属性作为分支标准,而是先从候选属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的

处理连续属性

  • 把连续属性转换为离散属性在进行处理
  • 对连续属性进行排序,只有在分类发生改变的地方才需要切开

CART

与ID3的区别

  • CART中用于选择变量的不纯性度量是Gini指数
  • 如果目标变量是标称的,并且是具有两个以上的类别,则CART可能考虑将目标类别合并成两个超类别(双化)
  • 如果目标变量是连续的,则CART算法找出一组基于树的回归方程来预测目标变量。

算法

CART(Classification And Regression Tree)算法既可以用于创建分类树,也可以用于创建回归树。其重要特点包含其中三个方面

  1. 二分递归分割:永远把数据一分为二,最终生成的决策树结构是二叉树。正式由于这个原因,它的每一步决策树只能是“是”或“否”。当一个feature有多个值得时候,也还是把数据分成两部分
  2. 单变量分割:每次最优划分都是正对单个变量
  3. 算法终止条件
    • 简单来说是当一个点包含的数据记录都属于同一个类别时候可以终止分裂
    • 严格来说,我们计算$\chi^2$的值,当这个值很小的时候说明分类条件和类别是独立的,即按照这个分类条件来进行分类是没有道理的,此时停止分类

评判指标

  • 分类的目标变量:GINI、双化或有序双化
  • 连续的目标变量:最小二乘偏差(LSD)或者最小绝对偏差(LAD)

GINI

  • GINI指数反映了从数据集中随机抽出两个样本,他们类别不一样的概率
  • 第$i$个取值的$Gini$指数计算方式为:$gini(T_i)=1-\sum_\limits{j=1}^n p_j^2$
    • $n$—数据的类别数
    • $p_j$样本属于第$j$个类别的概率
  • Gini split infomation: $\sum_\limits{i=1}^2=\frac{N_i}{N}gini(Ti)$

特征双化

当特征的值是离散的,同时是具有两个以上的取值,则算法会考虑将目标类别合并成两个超类别,即双化

连续特征处理

  • 转换成离散属性
  • 分裂点:将这些特征值按照从小到大的顺序进行排列,然后求相邻点的平均值,这些平均值就是分裂点。

上面的过程完成了决策树的生成

剪枝

通过算法生成的决策树非常详细而且庞大,在如此详细的情况下,这样的分类在训练数据上会表现的非常完好,但代价就是在测试数据上的表现会很差,简单来说就是过度拟合

剪枝可分为预剪枝和后剪枝