很明显可以看出,第一种和第二种方法都会明显的改变数据分布,我们的训练数据不再是真实数据的无偏表述。第一种方法中,我们浪费了很多数据,第二种方法中无中生有或者重复使用了数据,会导致过拟合的发生。
因此欠采样的逻辑中往往会结合集成学习来有效地使用数据,假设正例数据n,而反例数据m个。我们可以通过欠采样,随机无重复的生成(k=n/m)个反例子集,并将每个子集都与相同正例数据合并生成k个新的训练样本。我们在k个训练样本上分别训练一个分类器,最终将k个分类器的结果结合起来,比如求平均值。这就是EasyEnsemble。
提出这样建议的原因有很多。首先,简单的阈值调整从经验上来看往往比过采样和欠采样有效。其次,如果对统计学知识掌握有限,而且编程能力一般,在集成过程中容易出错,不如使用现有的集成学习并调整分类阈值。
1.2、一个简单但有效的方案
这种难度很低,也规避了不少容易出错的地方。我们使用集成学习降低过拟合风险,使用阈值调整规避和采样问题,同时选择合适的评估手段以防止偏见。而且这些都是现成的模型,5-10行的Python就可以实现。
二、交叉熵函数系列问题?与最大似然函数的关系和区别?
交叉熵用来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小。
交叉熵越低,表示非真实分布越接近真实分布,因此,交叉熵越低越好。
如何去衡量不同策略之间的差异呢?这就需要用到相对熵(KL散度,物理意义就是用来度量两个函数的相似度或者相近程度),用来衡量两个取值为正的函数或概率分布之间的差异,即:
现在假设我们想知道某个策略和最优策略之间的差异,我们就可以用相对熵来衡量这两者之间的差异。即,相对熵=某个策略的交叉熵-信息熵(根据系统真实分布计算而得的信息熵,为最优策略),公式如下:
KL(p||q)=H(p,q)-H(p)=
1)交叉熵损失函数的物理意义:用于描述模型预测值与真实值的差距大小
2)最小化交叉熵的本质就是对数似然函数的最大化
3)对数似然函数的本质就是衡量在某个参数下,整体的估计和真实情况一样的概率,越大代表越相近;而损失函数的本质就是衡量预测值和真实值之间的差距,越大代表越不相近。
三、HMM、MEMMvsCRF对比
1、马尔科夫假设
马尔科夫过程:每个状态的转移只依赖于前n个状态,并且只是个n阶的模型。最简单的马尔科夫过程是一阶的,即只依赖于前一个状态。
2、马尔科夫性
马尔科夫性是保证或者判断概率图是否为概率无向图的条件
2.1、判别式模型
判别模型是直接对P(Y|X)进行建模,就是说,直接根据X特性来对Y建模训练。具体的,我的训练过程是确定构件P(Y|X)模型里面“复杂映射关系”中的参数,完了再去inference一批新的sample。
判别式模型的特征总结如下:
1)对P(Y|X)建模
2)对所有的样本只构建一个模型,确认总体判别边界
3)观测到输入什么特征,就预测最可能的label
4)判别式的优点:对数据量要求没生成式的严格,速度也会快,小数据量下准确率也会好些。
2.2、生成式模型
在训练模型中,学习到的是X与Y的联合模型P(X,Y),需要确定维护这个联合概率分布的所有的信息参数。完了之后在inference再对新的sample计算P(Y|X),导出Y。
生成式总结有如下特点:
1.对P(X,Y)建模
3.中间生成联合分布,并可生成采样数据。
2.3序列建模
广义下的序列有这些特点:
对不同的序列有不同的问题需求,常见的序列建模方法总结如下:
1.拟合,预测未来节点(或走势分析):
a.常规序列建模方法:AR、MA、ARMA、ARIMA
b.回归拟合
c.NeuralNetworks
2.判断不同序列类别,及分类问题:HMM、CRF、GeneralClassifier(MLmodels、NNmodels)
3.不同时序对应的状态的分析,及序列标注问题:HMM、CRF、RecurrentNNs
3.HMM
3.1理解HMM
HMM属于典型的生成式模型。对照2.1的讲解,应该是要从训练数据中学到数据的各种分布,那么有哪些分布呢以及是什么呢?直接正面回答的话,正事HMM的5要素,其中有3个就是整个数据的不同角度的概率分布:
N,隐藏状态N={q1,...,qN},隐藏节点不能随意取,只能限定取包含在隐藏状态集中的符号。
所以图看起来是这样的:
下面来点高层次的理解:
3.2模型运行过程
模型的运行过程(工作流程)对应了HMM的3个问题。
3.2.1学习训练过程
对照2.1的讲解,HMM学习训练的过程,就是找出数据的分布情况,也就是模型参数的确定。
1.极大似然估计
一般做NLP的序列标注等任务,在训练阶段肯定有隐状态序列的。
2.Baum-Welch(前向后向)
3.2.2序列标注(解码)过程
学习完了HMM的分布参数,也就确定了一个HMM模型。需要注意的是,这个HMM是对我这一批全部的数据进行训练所得到的参数。序列标注问题也就是“预测过程”,通常称为解码过程。对应了序列建模问题3.对于序列标注问题,我们只需要学习出一个HMM模型即可,后面所有的新的sample都用这个HMM去apply。
在直白点就是,现在要在给定的观测序列下找出一条隐状态序列,条件是这个隐状态序列的概率是最大的那个。
具体地,都是用Viterbi算法解码,是用DP思想减少重复的计算。viterbi算法其实就是多步骤每步多选择模型的最优选择问题,其在每一步的所有选择都保存了前序所有步骤到当前步骤当前选择的最小总代价(或者最大价值)以及当前代价的情况下前继步骤的选择。依次计算完所有步骤后,通过回溯的方法找到最优选择路径。
回溯方法的基本思想就是按照输入数组的顺序,每一层递归处理一个元素,当处理最后一层的时候,也就是把数组中的所有元素都处理完的时候,把当前结果加入到最后的返回结果中。值得注意的是,每次在递归到下一层之前,我们加入了某个要处理的元素X,在下一层递归返回之后,我们要还会加入新的元素Y。那么在这一层递归中就相当于处理了不止一个新的元素。
Viterbi计算有向无环图的一条最大路径,应该还好理解,如图:
关键是注意,每次工作热点区只涉及到t与t-1,这对应了DP的无后效性的条件。
3.2.3序列概率过程
实际上,序列概率过程对应了序列建模问题2,即序列分类。
在3.2.2第一句话有说,在序列标注问题中,用一批完整的数据训练出了一支HMM模型即可。但,在序列分类问题中就不是训练一个HMM模型了。应该这么做(结合语音分类识别的例子):
目标:识别声音是A发出的还是B发出的。
HMM建模过程:
1.训练:将所有A说的语音数据作为dataset_A,将所有B说的语音数据作为dataset_B(当然,先要分别对dataset_A、dataset_B做预处理encode为元数据节点,形成sequences),然后分别用dataset_A、dataset_B去训练出HMM_A/HMM_B
后面两个算法采用了DP思想,减少计算量,每一直接引用前一个时刻的计算结果以避免重复计算,跟Viterbi一样的技巧。
4、MEMM
MEMM,即最大熵马尔科夫模型,属于判别式模型。
4.1理解MEMM
MEMM正因为是判别模型,所以上来就直接为了确定边界而去建模,比如说序列求概率(分类)问题,直接考虑找出函数分类边界。
比如可以这么定义特征函数:
所以总体上,MEMM的建模公式这样:
MEMM需要注意两点:
2.需要注意,之所以图的箭头这么画,是由MEMM的公式决定的,而公式是由creator定义出来的。
走一遍完整的流程:
step2.在给定的数据上,训练数据,确定参数,即确定了MEMM模型
step3.用确定的模型做序列标注问题或者序列求概率问题
4.2模型运行过程
MEMM模型的工作流程也包括了学习训练问题、序列标注问题、序列求概率问题。
4.2.1学习训练过程
一套MEMM由一套参数唯一确定,同样地,我需要通过训练数据学习这些参数。MEMM模型很自然需要学习里面的特征权重λ。
不过跟HMM不同的是,因为HMM是生成式模型,参数即为各种概率分布元参数,数据量足够可以用最大似然估计。而判别式模型是用函数直接判断,学习边界,MEMM即通过特征函数来界定。但同样,MEMM也有极大似然估计法、梯度下降、牛顿迭代法、拟牛顿下降、BFGS、L-BFGS等等。
4.2.2序列标注过程
只是现在的图中的每个隐状态节点的概率求法有一些差异而已,正确将每个节点的概率表示清楚,路径求解过程还是一样,采用viterbi算法。
4.2.3序列求概率过程
跟HMM举的例子不一样,也是分别去为每一批数据训练构建特定的MEMM,然后根据序列在每个MEMM模型的不同得分概率,选择最高分数的模型为wanted类别。
4.3标注偏置
1.现象
由于局部归一化问题,MEMM倾向于选择拥有更少转移的状态。
用viterbi算法解码MEMM,状态1倾向于转换到状态2,同时状态2qingxi倾向于保留在状态2.解码过程细节(需要会viterbi算法这个前提):
5、CRF
5.1理解CRF
不过一般说CRF为序列建模,就专指CRF线性链:
在2.1.2中有提到过,概率无向图的联合概率分布可以在因子分解下表示为:
所以CRF的建模公式如下:
CRF的重点概念:判别式模型、特征函数
1.特征函数
对于CRF,可以为他定义两款特征函数:转移特征&状态特征。建模总公式展开:
其中:
一般情况下,不把两种特征区分开,而是合在一起:
满足特征条件就取值为1,否则没贡献
再进一步理解的话,需要把特征函数部分拿出来:
CRF完美的满足这个形式,所以又可以归入到log-linearmodels之中。
5.2模型运行过程
5.2.1学习训练过程
一套CRF由一套参数λ唯一确定(先定义好各种特征函数)。
同样,CRF用极大似然估计方法、梯度下降、牛顿迭代、拟牛顿迭代、IIS、BFGS、L-BFGS等等。能用在log-linearmodels上的求参方法都可以用过来
5.2.2序列标注过程
只是现在的图中每个隐状态节点的概率求法有一些差异而已,正确将每个节点的概率表示清楚,路径求解过程还是一样,用viterbi算法
5.2.3序列求概率过程
跟HMM举的例子一样,也是分别为每一批数据训练构建特定的CRF,然后根据序列在每个MEMM模型的不同得分概率,选择最高分数的模型为wanted类别。只是貌似很少看到拿CRF或者MEMM来做分类的,直接用网络模型.......
5.3CRF++分析
1.定义模板
在CRF++下,应该是先定义特征模板,然后用模板自动批量产生大量的特征函数。每一条模板将在每一个token处生产若干个特征函数。
CRF++的模板(template)有U系列(unigram)、B系列(bigram),不过U模板都可以完成2-gram的作用。
2.产生特征函数
3.求参
对上述的各个特征以及初始权重进行迭代参数学习。
6.总结:HMMvs.MEMMvs.CRF
首先,CRF,HMM,MEMM都常用来做序列标注的建模,像分词、词性标注、以及命名实体标注
隐马模型一个最大的缺点就是由于其输出独立性假设,导致其不能考虑上下文的特征,限制了特征的选择,最大熵隐马模型则解决了隐马的问题,可以任意选择特征,但由于其在每一节都要进行归一化,所以只能找到局部最优值,同时也带来了标记偏置问题,即凡是训练语料中未出现的情况全都忽略掉。条件随机场很好的解决了这一问题,他并不在每一个节点进行归一化,而是所有特征进行归一化,因此可以求得全局的最优值。