数据集:记录的集合
示例/样本:关于一个事件或对象的描述
属性/特征:反映事件或对象在某方面的表现或性质的事项
属性空间/样本空间/输入空间:属性张成的空间
特征向量:对象在这个空间中的坐标位置
D包含m个示例的数据集,每个示例由d个属性描述,则d被称为样本的维数
学习/训练:从数据中学得模型的过程
训练数据:训练过程中使用的数据
训练样本:其中的每个样本
训练集:训练样本组成的集合
模型:“学习器”,看作学习算法在给定数据和参数空间上的实例化
标记:关于示例结果的信息
样例:拥有了标记信息的示例
标记空间/输出空间:所有标记的集合
分类:对于离散值的预测任务
回归:对于连续值的预测任务
监督学习/无监督学习:训练数据是否拥有标记信息
归纳:从特殊到一般的泛化过程,即从具体的事实归结出一般性的规律
演绎:从基础原理推演出具体状况
归纳偏好:机器学习算法在学习过程中对某种类型假设的偏好
没有免费的午餐 定理:
我们只关注自己正在试图解决的问题(某个具体应用任务),NFL定理是让我们清楚地认识到脱离具体问题,空谈什么学习算法更好毫无意义。
如果考虑所有潜在的问题,则所有学习算法一样好,要谈论算法的相对优劣,必须针对具体的学习问题。
统计学习方法都是由 模型、策略和算法 构成的
模型是所要学习的条件概率分布或决策函数。
模型的假设空间包含所有可能的条件概率分布或决策函数。
假设空间定义为条件概率的集合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nMSBfEMY-1645697064835)(https://gitee.com/maluyao17/my-photo/raw/master/img/image-20220124205130794.png)]
定义为一个参数向量决定的条件概率分布族
假设空间定义为决策函数的集合
定义为一个参数向量决定的函数族
监督学习对于给定的输入,在假设空间中选取模型f作为决策函数输出相应的真实值Y。而这个真实值Y于与f可能会不一致。
利用损失函数(loss function)或代价函数(cost function)来度量预测的错误程度。
因为不知道联合概率分布,所以常使用经验风险:
来估计期望风险。但现实中训练样本有限,所以用经验风险预估往往不太理想,需要对经验风险进行矫正。
错误率:分类错误的样本数占总样本总数的比例
精度 = 1 - 错误率
误差:学习器的实际预测输出与样本的真实输出之间的差异
训练误差:学习器在训练集上的误差
泛化误差:学习器在新样本上的误差
过拟合:学习器把训练样本学得太好了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降
欠拟合:学习器对训练样本的一般性质尚未学好
对过拟合的解释:
给定数据集:
用高次多项式对该数据集的数据进行拟合:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-23Ao2yXK-1645697064841)(C:\Users\maluyao\Desktop\note\机器学习\image-20220124174658681.png)]
给定经验风险最小化:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gqUgjqHt-1645697064841)(C:\Users\maluyao\Desktop\note\机器学习\image-20220124174719364.png)]
将数据集带入,并令其偏导数为0求其参数:
得到M次多项式函数的拟合图像:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SnF3SMOe-1645697064842)(C:\Users\maluyao\Desktop\note\机器学习\image-20220124175414453.png)]
对于上图拟合结果:
因此,在实际学习的模型选时,不仅要考虑对已知数据的预测能力,而且还要考虑对未知数据的预测能力。
训练误差与测试误差
随着多项式次数(模型复杂度)的增加,训练误差会减小,直至趋向于0。而测试误差会先减小而后增大。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4fc6zXbO-1645697064842)(C:\Users\maluyao\Desktop\note\机器学习\image-20220124180328506.png)]
应选择复杂度适当的模型,以达到使测试误差最小的学习目的。
测试集:测试学习器对新样本的判别能力,然后以测试集上的测试误差作为泛化误差的近似。测试集应该经尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用该
留出法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7b1kvwtO-1645697064842)(C:\Users\maluyao\Desktop\note\机器学习\image-20220120221153591.png)]
交叉验证法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LoFFTvkg-1645697064843)(C:\Users\maluyao\Desktop\note\机器学习\image-20220120221245758.png)]
自助法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NGd7Qy0v-1645697064843)(C:\Users\maluyao\Desktop\note\机器学习\image-20220120221410974.png)]
调参:在进行模型评估与选择时,需要对算法参数进行设定
验证集:把学得模型在实际使用中遇到的数据称为测试数据
均方误差
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wZ3R87V8-1645697064843)(C:\Users\maluyao\Desktop\note\机器学习\image-20220120222156395.png)]
错误率与精度
查准率、查全率
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uTmqQSh8-1645697064844)(C:\Users\maluyao\Desktop\note\机器学习\image-20220120222554553.png)]
平衡点:查准率 = 查全率
ROC与AUC
ROC:受试者工作特征
AUC:ROC曲线下的面积
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kZyWli7s-1645697064845)(C:\Users\maluyao\Desktop\note\机器学习\image-20220120223117956.png)]
假设检验 假设学习器泛化错误率是e0
交叉验证t检验
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lqecUMd1-1645697064845)(C:\Users\maluyao\Desktop\note\机器学习\image-20220120224506717.png)]
McNemar检验
方差
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ax3RqnI9-1645697064846)(C:\Users\maluyao\Desktop\note\机器学习\image-20220120231257252.png)]
偏差
噪声
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iVUgJyEB-1645697064846)(C:\Users\maluyao\Desktop\note\机器学习\image-20220120231416192.png)]
假定噪声为0,将泛化误差分解为偏差与方差的表达式
试图学得一个通过属性的线性组合来进行预测的函数。
线性回归:试图学得一个线性模型以尽可能准确地预测实值输出标记
线性回归试图学得:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDDvT3BQ-1645697064847)(C:\Users\maluyao\Desktop\note\机器学习\image-20220121101220048.png)]
利用均方误差作为性能度量:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ovsrGa34-1645697064847)(C:\Users\maluyao\Desktop\note\机器学习\image-20220121101304077.png)]
求导将均方误差最小化:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PqWMt2SN-1645697064847)(C:\Users\maluyao\Desktop\note\机器学习\image-20220121101450964.png)]
对于数据集D,样本由d个属性描述,则试图学得:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZtkQiJdj-1645697064848)(C:\Users\maluyao\Desktop\note\机器学习\image-20220121101703184.png)]
将示例作为一行组成矩阵X,其中每行的前d个元素表示d个属性值:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t8dYnZs8-1645697064848)(C:\Users\maluyao\Desktop\note\机器学习\image-20220121103421057.png)]
可求得系数w的最优解(XTX为满秩矩阵或正定矩阵时):
假设示例所对应的输出标记是在指数尺度上变化,以对数作为线性模型逼近的目标:
对于分类任务,只需找一个单调可微函数将分类任务的真实标记y与线性回归模型的预测值联系起来。
Sigmoid函数:在z=0附近变化很陡,带入转换后可得:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wYdavyhN-1645697064849)(C:\Users\maluyao\Desktop\note\机器学习\image-20220121114802548.png)]
其中,对数几率可表现为
该 对数几率回归 模型可用作近似概率预测和求取最优解
用“极大似然法”估计w和b:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z1B4IWwF-1645697064850)(C:\Users\maluyao\Desktop\note\机器学习\image-20220121123708427.png)]
用p0和p1重写似然项:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v62CzlnX-1645697064850)(C:\Users\maluyao\Desktop\note\机器学习\image-20220121123736173.png)]
用牛顿法迭代得最优解:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zma20n4F-1645697064851)(C:\Users\maluyao\Desktop\note\机器学习\20170528002827749)]
极大似然估计
将二分类学习方法直接推广到多分类。先对问题进行拆分,然后为拆分出的每个二分类任务训练一个分类器;在测试时,对这些分类器的预测结果进行集成以获得最终的分类结果。
一个根结点->若干个内部结点+若干个叶结点
叶结点 = 决策结果
其他结点 = 属性测试
决策树学习基本算法:
递归返回的情景:
剪枝:防止把训练集自身的一些特点当作所有数据都具有的一般性质而过拟合,所以 主动去掉一些分支来降低过拟合的风险
预剪枝
在决策树生成过程中,对每个结点在划分前进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点
有些分支的当前划分虽不能提升泛化性能、甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显著提高
后剪枝
先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点
将结点替换为叶结点自顶向下考察,其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多
对于多变量决策树,非叶结点不再是仅对某个属性,而是对属性的线性组合进行测试。不是为每个非叶结点寻找一个最优划分属性,而是试图建立一个合适的线性分类器。
决策树:分类决策树模型是一种描述对实例进行分类的树形结构,决策树有结点和有向边组成。
结点有两种类型:内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类
由决策树的根结点到叶结点的每一条路径构建一条规则;
路径上内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论。
每一个实例都被一条路径或一条规则所覆盖,而且只被一条路径或一条规则所覆盖。
决策树可以表示给定特征条件下类的条件概率。
决策树学习的算法是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。
该决策树可能对训练数据有很好的分类能力,但对位置的测试数据未必有很好的分类能力,可能产生过拟合的现象。需要进行剪枝处理。
选取对训练数据具有分类能力的特征,可以提高决策树学习的效率。
随机变量 X 的熵定义为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MhDmeEif-1645697064854)(C:\Users\maluyao\Desktop\note\机器学习\image-20220127164431721.png)]
因为熵不依赖于X,可以用X的分布来表示:
可知熵随概率p变化的曲线为:
条件熵
X 给定条件下Y 的条件概率分布的熵对X 的数学期望。用来表示在已知随机变量X 的条件下随机变量Y 的不确定性:
信息增益
表示得知特征X 的信息而使得类Y 的信息不确定性减少的程度。
信息增益比
信息增益的大小是相对于训练数据集而言的。在分类问题困难时,即在训练集的经验熵大的时候,信息增益值会偏大,反之会偏小。
从根结点开始,对结点计算所有可能的特征的信息增益。
选择信息增益最大的特征作为结点的特征。
由该特征的不同取值建立子结点
再对子结点递归地调用以上方法,构建决策树
直到所有特征的信息增益均很小或没有特征可以选择为止,最后得到一个决策树
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vyYKjUz7-1645697064856)(C:\Users\maluyao\Desktop\note\机器学习\image-20220127172357286.png)]
ID3算法只有树的生成,所以该算法生成的树容易产生过拟合。
C4.5 算法是对ID3 算法的改进,用信息增益比来选择特征。
剪枝从已生成的树上裁掉一些子树或叶结点,并将其根结点或父结点作为新的叶结点,从而简化分类树模型。
通过极小化决策树整体损失函数或代价函数来实现:
对于损失函数的分析有:
|T|代表了叶结点的个数,即模型的复杂度,参数a控制两者之间的影响,较大的a促使选择较简单的模型,较小的a促使选择较复杂的模型,a = 0只考虑模型和训练数据的拟合程度,不考虑模型的复杂度。
CART由特征选择、树的生成级剪枝组成。其在给定输入随机变量X 条件下输出随机变量Y 的条件概率分布的学习方法。
递归地构建二叉决策树的过程。
进行特征选择,生成二叉树。
一个回归树对应着特征空间的一个划分以及在划分的单元上的输出值。
给定训练数据集D,假设已将输入控件划分为M 个单元R1、R2…Rm
上有一个固定的输出值Cm,则回归树模型可表示为:
采用启发式的方法,对输入空间进行划分。将第j 个变量x 作为切分变量,它的取值s作为切分点,并定义两个区域:
用下式固定输入变量j 确定最优切分点s:
用该点(j, s)将输入空间划分为两个区域。接着每个区域重复上述划分过程,直到满足停止条件为止。
最小二乘回归树生成算法:
用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
基尼指数
Gini(D) 表示集合D的不确定性
Gini(D,A) 表示经A = a 分割后集合D 的不确定性
基尼指数值越大,样本集合的不确定性也就越大。
从“完全生长”的决策树的底端剪去一些子树,使决策树变小(模型变简单),从而能够对未知数据有更准确的预测。
神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。
生物神经网络中,每个神经元与其他神经元相连,当它兴奋时,就会向相连的神经元发送化学物质,从而改变这些神经元内的点位。如果某神经元的电位超过了一个阈值,那么它就会被激活,即兴奋起来,向其他神经元发送化学物质。
M-P神经元模型:神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,通过“激活函数”处理以产生神经元的输出:
激活函数
阶跃函数:不连续不光滑
Sigmoid函数:把可能在较大范围内变化的输入值挤压到(0, 1)输出值范围内
感知机
由两层神经元组成,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元(阈值逻辑单元)。
对感知机进行权重调整
线性可分问题
当感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经,其学习能力非常有限。
若两类模式是线性可分的,即存在一个线性超平面能将它们分开:
非线性可分问题
解决非线性可分的问题,考虑使用多层功能神经元。
输出层与输入层之间的一层神经元,被称为隐层或隐含层,隐含层和输出层神经元都是拥有激活函数的功能神经元:
用两层感知机解决异或问题:
单隐层网络:输入层神经元接收外界输入,隐层与输出层神经元对信号进行加工,最终结果由输出层神经元输出。
感知机的定义
输入空间是x属于R,输出空间是+1 -1。因此,可定义从输入空间到输出空间的函数
对感知机的几何解释
对于特征空间R有一超平面S,该超平面将特征空间划分为两部分,其中两部分的点被分为正、负两类。超平面S被称为“分离超平面”:
在线性可分的条件下,感知机的学习目标是 求得一个能够将训练集正实例点和负实例点完全正确分开的分离超平面。
定义(经验)损失函数并将损失函数极小化从而确定一个学习策略,确定感知机的模型参数,从而找出该分离超平面。
当误分类点越少,误分类点离超平面越近,损失函数值就越小。
感知机学习的策略是 在假设空间中选取使损失函数最小的模型参数w,b,即感知机模型。
感知机学习算法是误分类驱动的。
任意选取一个超平面( 参数为w0,b0 ),每次随机选取一个误分类点使其梯度下降,不断地极小化目标函数。
目标函数:
假设误分类点集合M是固定的,那么损失函数L(w, b)的梯度就是目标函数对于w和b的偏导:
再随机选取一个误分类点,对w,b进行更新。从而极小化目标函数:
该定理表明,误分类的次数k是有上界的,经过有限次搜索可以找到将训练数据完全正确分开的分离超平面。当训练数据集线性可分时,感知机学习算法原始形式时收敛的。
而当约束条件不满足,即训练集线性不可分时,感知机算法不收敛,迭代结果会发生振荡。
将 w和 b表示为实例 xi和标记 yi的线性组合的形式,通过求解其系数而求得w和b。通过以下步骤逐步更新 w和 b:
得到学习到最后的w和b为:
可将此时的 w和 b作为系数代入目标函数,再通过不断更新a和b来处理误分类数据。
d个输入神经元,l个输出神经元,q个隐层神经元组成的多层前馈网络结构:
神经网络的输出可表示为:
神经网络的均方差可表示为:
任意参数 v :
给定学习率,可得隐层到输出层的连接权:
类似可得:
BP算法工作流程:
先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差,再将误差逆向传播至隐层神经元,最后根据隐层神经元的误差来对连接权和阈值进行调整。该迭代过程循环进行,直到达到某些停止条件为止:
跳出 局部最小,进一步接近全局最小的方法:
径向基网络:单隐层前馈神经网络,使用径向基函数作为隐层神经元激活函数,而输出层则是对隐层神经元输出的线性组合:
假定输入为d维向量x,输出为实值:
训练RBF网络:
自适应谐振理论网络是竞争型学习的重要代表,该网络由比较层、识别层、识别阈值和重置模块构成。
比较层:接收输入样本,并将其传递给识别层神经元
识别层:其中每个神经元对应一个模式类,神经元的数目可在训练过程中动态增长以增加新的模式类
竞争方式:
自组织映射网络:将高维输入数据映射到低维空间,同时保持输入数据在高维空间的拓扑结构,即将高维空间中相似的样本点映射到网络输出层中的邻近神经元
当新的隐层神经元加入时,其输入端连接权值是冻结固定的,通过最大化新神经元的输出与网络误差之间的相关性来训练相关参数:
将隐层神经元的输出反馈回来,与下一时刻输入层神经元提供的信号一起,作为隐层神经元在下一时刻的输入:
为网络状态定义一个”能量“,能量最小化时网络达到理想状态,而网络的训练就是在最小化这个能量函数。
能量定义:
状态向量s出现的概率:
无监督逐层训练:
每次训练一层隐结点,训练时将上一层隐结点的输出作为输入,而本层隐结点的输出作为下一层隐结点的输入。在以上预训练全部完成后,再对整个网络进行微调训练
权共享:
复合多个卷积层和采样层对输入信号进行加工,然后再连接层实现与输出目标之间的映射。
每个卷积层包含多个特征映射,每个特征映射是一个由多个神经元构成的平面。通过一种卷积滤波器提取输入的一种特征:
以上的多隐层堆叠,每层对上一层的输出进行处理的机制。可看作是在对输入信号进行逐层加工,从而把初始的、与输出目标之间练习不太密切的输入表示,转化成与输出目标练习更密切的表示。使得原来仅基于最后一层输出映射难以完成的任务成为可能。
Perceptron.py
from turtle import color
import matplotlib
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 数据为线性可分,二分类数据
class Model:
def sign(self, x, w, b):
y = np.dot(x, w) + b # 进行二分类的线性分类模型
return y
def __init__(self):
self.w = np.ones(len(data[0]) - 1, dtype=np.float32)
self.b = 0
self.l_rate = 0.1 # 学习率
def fit(self, xTrain, yTrain): # 梯度下降法
isWrong = False
while not isWrong: # 误分类值为0跳出循环
errorCount = 0
for d in range(len(xTrain)):
x = xTrain[d]
y = yTrain[d]
if y*self.sign(x, self.w, self.b) <= 0: # 误分类点
# 迭代更新w和b
self.w = self.w + self.l_rate*np.dot(y, x)
self.b = self.b + self.l_rate*y
errorCount += 1
if errorCount == 0:
isWrong = True
if __name__ == '__main__':
# 加载数据
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['label'] = iris.target
df.columns = [ 'sepal length', 'sepal width', 'petal length', 'petal width', ' label']
data = np.array(df.iloc[:100, [0, 1, -1]])
x, y = data[:,:-1], data[:,-1]
y = np.array([1 if i == 1 else -1 for i in y])
perceptron = Model()
perceptron.fit(x, y)
xPoints = np.linspace(4, 7, 10)
yPoints = -(perceptron.w[0]*xPoints + perceptron.b) / perceptron.w[1] # 损失函数
# 绘制图像
plt.plot(xPoints, yPoints)
# plt.scatter(df[:50]['sepal length'], df[:50]['sepal width'], label='0')
# plt.scatter(df[50:100]['sepal length'], df[50:100]['sepal width'], label='1')
plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')
plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yLAS7Bjp-1645697064872)(C:\Users\maluyao\Desktop\note\机器学习\image-20220221214744954.png)]
scikitLearn-Perceptron.py
import sklearn
from sklearn.linear_model import Perceptron
from turtle import color
import matplotlib
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
if __name__ == '__main__':
# 加载数据
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['label'] = iris.target
df.columns = [
'sepal length', 'sepal width', 'petal length', 'petal width', ' label'
]
data = np.array(df.iloc[:100, [0, 1, -1]])
x, y = data[:, :-1], data[:, -1]
y = np.array([1 if i == 1 else -1 for i in y])
clf = Perceptron(fit_intercept=True, max_iter=1000, tol=None,
shuffle=True) # 调用感知机模型
clf.fit(x, y)
print(clf.coef_) # 特征变量权值
print(clf.intercept_) # 截距
# 绘制数据
plt.figure(figsize=(10, 10)) # 画布大小
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.title('鸢尾花线性数据示例')
plt.scatter(data[:50, 0], data[:50, 1], c='b', label='Iris-setosa')
plt.scatter(data[50:100, 0],
data[50:100, 1],
c='orange',
label='Iris-versicolor')
xPoints = np.arange(4, 8)
yPoints = -(clf.coef_[0][0] * xPoints + clf.intercept_) / clf.coef_[0][1]
plt.plot(xPoints, yPoints)
plt.grid(False)
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QyBMjx4a-1645697064872)(C:\Users\maluyao\Desktop\note\机器学习\image-20220221215548695.png)]
支持向量机(Support Vector Machines )是一种二分类模型。
基本模型:定义在特征空间上的间隔最大的线性分类器
间隔最大使它有别于感知机
非线性分类器:支持向量机包含核技巧
学习策略:间隔最大化
核方法:当输入空间为欧氏空间或离散集合,特征空间为希尔伯特空间时。核函数表示将输入从输入空间映射到特征空间得到的特征向量之间的内积。
通过使用核函数可以学
习非线性支持向量机,等价于隐式地在高维的特征空间中学习线性支持向量机。
分类学习 最基本的想法是基于训练集D在样本空间中找到一个划分超平面,将不同类别的样本分开。
划分平面的方程表述:
样本空间中的任意点x到超平面(w, b)的距离:
由此可知,超平面的两个异类支持向量到超平面的距离之和:
寻找具有”最大间隔“的划分超平面:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D2gUZ2s1-1645697064873)(C:\Users\maluyao\Desktop\note\机器学习\image-20220123180215214.png)]
假设:
线性支持向量机假设两个空间的元素一一对应,并将输入控件中的输入映射为特征空间中的特征向量。
所以支持向量机的学习在特征空间中进行。因此给定特征空间中的训练数据集:
学习目标:在特征空间中找到一个分离超平面,能将实例分到不同的类。分离超平面对应于方程 w·x + b = 0。分离超平面将特征空间划分为两部分,法向量指向的一侧为正类,另一侧为负类。
一般来说,一个点距离分类超平面的远近可以表示分类预测的确信程度。而 w· x + b的符号与类标记y 的符号是否一致能够表示分类是否正确。
所以,可用 y(w· x + b)表示分类的正确性和确信度。即为函数间隔。
如果成比例地改变w 和b 。超平面并没有改变,但函数间隔却成为原来的2倍。因此,我们需要对分离超平面的法向量w 加某些约束,如规范化,||w||=1,使得间隔是确定的。这时函数间隔成为几何间隔。
函数间隔和几何间隔的关系
支持向量机学习的基本想法:求解能够正确划分训练数据集并且几何间隔最大的分离超平面。
间隔最大化的直观解释:**对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类。**不仅需要将正负实例点分开,而且对最难分的实例点( 离超平面最近的点)也有足够大的确信度将他们分开。
最大间隔分离超平面
可转化为以下约束最优化问题:
用函数间隔表示为:
注意到1/|w|的最大化和1|w|^2/2的最小化是等价的,可表示为:
求解以上式为凸二次规划问题,即约束最优化问题:
仿射函数:
求出最优化问题的解w *和b *,可得最大间隔分离平面 w x + b * = 0及分类决策函数 f(x) = sign(w x + b *)
最大间隔法——对于线性可分支持向量机的学习算法
最大间隔超平面的存在唯一性
线性可分训练数据集的最大间隔超平面是存在且唯一的。
若训练数据集T 线性可分,则可将训练数据集中的样本点完全正确区分开的最大间隔分离超平面存在且唯一。
支持向量和间隔边界
支持向量:在线性可分情况下,训练数据集的样本点中与分离超平面距离最近的样本点的实例称为支持向量。
支持向量是使**约束条件式(7.14)**等号成立的点:
间隔边界:H1和H2之间形成的长带宽度
为6.6 的约束条件添加拉格朗日乘子,得拉格朗日函数(高数上好像有 ?):
解出拉格朗日乘子,得到模型
满足KKT条件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2AoCaY3z-1645697064877)(C:\Users\maluyao\Desktop\note\机器学习\image-20220123193206908.png)]
求解(6. 11)的方法:SMO:
在约束最优化问题中,常常利用拉格朗日对偶性将原始问题转换为对偶问题,通过解对偶问题而得到原始问题的解。
原始问题:
引入广义拉格朗日函数,同时考虑该函数在x 为自变量情况下的最大值:
而对于该原始问题来说,给定了约束条件后,该拉格朗日函数在x的取值范围内是收敛的。
因此,若x违背所给原始问题的约束条件即使得 c i(w) > 0 或 h j(w) !=0,则该拉格朗日函数在定义域内所取得的最大值必定为 ∞ :
由此,可得以下式:
而在满足原始问题约束条件的解x 中,可求得x 的最小值。从而转化为极小化问题:
对偶问题
之所以被称为“对偶”,是因为与原始问题求解顺序相反。对于原始问题求解,是先考虑拉格朗日的最大解,再转化为极小值问题。
而对偶问题则是先考虑拉格朗日函数的最小解,再将其转化为极大值问题:
再将广义拉格朗日函数的极大极小问题表示为约束最优化问题,从而求解对偶问题的最优值:
原始问题和对偶问题的关系
假设函数 f(x) 和 ci(x) 是凸函数,hj(x) 是仿射函数。并且假设不等式约束 ci(x) 是严格可行的,且对于所有的x,该约束函数是<0 的。则存在对偶解等于原始解:
假设函数 f(x) 和 ci(x) 是凸函数,hj(x) 是仿射函数。并且假设不等式约束 ci(x) 是严格可行的,且对于所有的x,该约束函数是<0 的。
则 x* 和 a *,b *分别是原始问题和对偶问题的解的充分条件如下(KKT):
为求解线性可分支持向量机的最优化问题,将它作为原始最优化问题,应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。
可得以下对偶算法的步骤:
构建拉格朗日函数:
求解对偶问题
求解最优化问题的步骤:
因此,对于给定的线性可分训练数据集,可以首先求对偶问题的解a*,再求得原始问题的解 w *和b *。从而得到分离超平面及分类决策函数:
支持向量:
考虑原始最优化问题及对偶最优化问题,将训练数据集中对应于ai*>0的样本点(xi, yi)的实例 xi 称为支持向量。
在现实任务中,原始样本空间内也许并不存在一个能正确划分两类样本的超平面。
可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。
现在可知一样本空间对应的对偶 问题为:
可以设想一个函数,即核函数:
重写对偶问题:
非线性分类问题
由图所示,可用一条椭圆曲线 ( 非线性模型 ) 将正负实例正确分开:
采取的方法:进行一个非线性变换,将非线性问题变换为线性问题,通过解变换后的线性问题来求解原来的非线性问题。
核函数的定义
核技巧在支持向量机中的应用
对于对偶问题的目标函数:
其中的内积 xi · xj 可以用核函数 K(xi, xj) 来代替。由此可将对偶问题的目标函数化为:
同样,分类决策函数中的内积也可以用核函数代替:
在核函数 K(x ,z) 给定的条件下,可以利用解线性分类问题的方法求解非线性分类问题的支持向量机。
学习是隐式地在特征空间进行的,不需要显式地定义特征空间和映射函数。
在现实任务中往往很难确定合适的核函数使得训练样本在特征空间中线性可分。即便恰好找到了某个核函数使训练集在特征空间中线性可分,也很难断定这个貌似线性可分的结果不是由于过拟合所造成的。
软间隔:允许支持向量机在一些样本上出错:
允许较少的某些样本不满足约束:
此时,优化目标可写为:
其中,损失函数可用其他函数来进行代替:
引入松弛变量重写(6.29)
该式的对偶问题:、
对软间隔支持向量机,KKT条件要求:
我们还可以将0/1损失函数换成别的替代损失函数以得到其他学习模型。 这些模型的性质与所用的替代函数直接相关,它们具有一个共性:优化目标中的第一项用来描述划分超平面的”间隔“大小,另一项用来表述训练集上的误差:
线性可分问题所用的支持向量机学习方法,对于线性不可分训练数据是不适用的。需要修改硬间隔最大化,使其成为软间隔最大化。
线性不可分意味着某些样本点(xi , yi)不能满足函数间隔大于等于1的约束条件,即:
不能满足。所以通常对每个样本点(xi, yi) 引进一个松弛变量ei>=0,使函数间隔加上松弛变量可以大于等于1。因此可得加入松弛变量后的约束条件为:
因此可得有软间隔最大化问题的线性不可分的线性支持向量机学习问题为以下凸二次规划问题:
与线性可分的支持向量机的对偶算法类似:
得到原始最优化问题的拉格朗日函数:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d2xB77mV-1645697064897)(C:\Users\maluyao\Desktop\note\机器学习\image-20220204230553481.png)]
移项,求偏导,得拉格朗日函数的最小值:
求a的极大,即对偶问题:
软间隔的支持向量xi 可能在间隔边界上,或者在间隔边界与分离超平面之间,或者在分离超平面的一侧:
对于线性支持向量机,可以看作对以下目标函数的最小化:
对于第一项,定义合页损失函数:
对于损失值z,有:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yuei1R0H-1645697064901)(C:\Users\maluyao\Desktop\note\机器学习\image-20220204233316637.png)]
可得合页损失函数的图像:
为了学得一个如下的回归模型,需使得f(x) 与y尽可能接近,w和b是待确定模型参数。
支持向量回归(SVR)假设容忍f(x) 与y 之间有e 的偏差,这样就相当于以f(x)为中心,构建了一个宽度为2e的间隔带,若训练样本落入此间隔带,则认为是被预测正确的:
给定训练样本 {(x1, y1) ,(x2, y2), … (xm, ym) },若不考虑偏移项b,则无论SVM (线性支持向量机 ) 还是SVR (线性支持向量回归 ),学得的模型总能表示成核函数 K( x, xi)的线性组合:
KLDA —— 核线性判别分析:
通过核化将线性学习器拓展为非线性学习器:
学习目标:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V0sqDADV-1645697064903)(C:\Users\maluyao\Desktop\note\机器学习\image-20220206011059515.png)]
Sb 类间散度矩阵,Sw 类内散度矩阵
假设某种映射,可将样本映射到特征空间F:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uUqijsoJ-1645697064903)(C:\Users\maluyao\Desktop\note\机器学习\image-20220206011353936.png)]
i 类样本在该特征空间F中的均值为:
用改写定理表示w:
等价表示 (6.60):
序列最小最优化算法(SMO )——当训练样本容量很大时,高效地实现支持向量机学习。
求解目标:对偶问题:
基本思路:如果所有变量的解都满足此最优化问题的KKT条件。
过程:
SMO算法在每个子问题中选择两个变量优化,其中至少一个变量是违反KKT条件的:
第1个变量的选择:
利用外层循环,在训练样本中选取违反KKT条件最严重的样本点,并将其对应的变量作为第1个变量。
第2个变量的选择:
利用内层循环寻找a2,选择标准是希望能使a2有足够大的变化。
利用|E1 - E2|选择,如果E1为正,选择最小的E1作为E2。如果E1为负,选择最大的E1作为E2。
遍历在间隔边界上的支持向量点,依次将其对应的变量作为a2试用,直到目标函数有足够的下降。
若找不到合适的a2,那么遍历训练数据集
若仍找不到合适的a2,则放弃第1个a1,再通过外层循环寻求另外的a1
计算阈值b 和差值Ei :
有KKT条件可知:
推出b:
由Ei 定义式有:
从而表示b 的表达式:
如果a1和a2同时满足条件0 如果a1、a2是0或者是C,那么b1和b2之间的数的都是符合KKT条件的阈值,此时选择他们的中点作为bnew。 最后,再次用bnew更新Ei:
贝叶斯决策论是概率框架下实施决策的基本方法。
对于分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。
考虑分类任务,基于后验概率得到样本上的“条件风险”,寻找判定准则h从而最小化总体的条件风险。
对于以上过程,首先需要获得后验概率 P(c | x),可由以下两种方式获得:
先假定其具有某种确定的概率分布形式,再基于训练样本对概率分布的参数进行估计。
对于参数估计过程:
极大似然估计:
假设样本独立分布,其参数对于数据集D的似然可以表示为:
可知进行极大似然估计的操作目的是寻求其最大化似然的参数值thetac
而该连乘操作易造成下溢,故通常使用对数似然来代替:
此时的参数的极大似然估计可表示为:
基于贝叶斯公式来估计后验概率的困难主要在于:
类条件概率 P(x |c) 是所有属性上的联合概率,难以从有限的训练样本直接估计而得。
而朴素贝叶斯分类器采用“属性条件独立性假设”:
对已知类别,假设所有属性相互独立。即每个属性独立地对分类结果发生影响
对于上式的后验概率,可由属性条件独立性假设重写为概率连乘的形式:
再基于贝叶斯判定准则对其改写:
上式即为朴素贝叶斯分类器的表达式
对于朴素贝叶斯分类器的训练,则是基于训练集D来估计先验概率 P©,并为每个属性估计条件概率 P(xi | c):
拉普拉斯修正:
为避免其他属性携带的信息被训练集中未出现的属性值“抹去”:令N表示训练集D中可能的类别数,Ni表示第 i个属性可能的取值数,从而对先验概率和条件概率式进行修正:
朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。
朴素贝叶斯法对条件概率分布作了条件独立性的假设。其条件独立性假设为:
由贝叶斯定理计算后验概率:
可得朴素贝叶斯分类器:
朴素贝叶斯法中的后验概率最大化等价于期望风险最小化:
考虑0-1损失函数:
期望风险函数:
该期望是对联合分布P(X, Y)取,所以应取条件期望,对X = x逐个极小化:
最后由期望风险最小化准则得到后验概率最大化准则:
从上文可知,朴素贝叶斯法的参数由极大似然估计结合属性条件独立性可得,其计算步骤为先验概率和连乘的条件概率相乘的最大值:
这里的内容就是上文中的拉普拉斯平滑的具体形式:
为了降低对估计**后验概率 P(c |x)**的困难,朴素贝叶斯分类器采用了属性条件独立性假设,但在现实任务中这个假设往往很难成立。
于是人们尝试对属性条件独立性假设进行一定程度的放松。即“半朴素贝叶斯分类器”方法:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
import math
class NavieBayes:
def __init__(self):
self.model = None
# 数学期望
def mean(self, x):
return sum(x) / float(len(x))
# 方差
def stdev(self, X):
avg = self.mean(X)
return math.sqrt(sum([pow(x - avg, 2) for x in X]) / float(len(X)))
# 概率密度函数
def gaussianProbability(self, x, mean, stdev):
exponent = math.exp(-(math.pow(x - mean, 2) /
(2 * math.pow(stdev, 2))))
return (1 / (math.sqrt(2 * math.pi) * stdev)) * exponent
# 处理训练集
def summarize(self, trainData):
summaries = [(self.mean(i), self.stdev(i)) for i in zip(*trainData)] # zip将元素打包成元组,然后返回列表
return summaries
def fit(self, x, y):
labels = list(set(y))
data = {label: [] for label in labels}
for f, label in zip(x, y):
data[label].append(f)
self.model = {
label: self.summarize(value)
for label, value in data.items()
}
# 计算概率
def calculateProbabilities(self, inputData):
probabilities = {}
for label, value in self.model.items():
probabilities[label] = 1
for i in range(len(value)):
mean, stdev = value[i]
probabilities[label] *= self.gaussianProbability(
inputData[i], mean, stdev)
return probabilities
def score(self, xTest, yTest):
right = 0
for x, y in zip(xTest, yTest):
label = self.predict(x)
if label == y:
right += 1
return right / float(len(xTest))
def predict(self, xTest):
label = sorted(self.calculateProbabilities(xTest).items(),
key=lambda x: x[-1])[-1][0]
return label
# 读取数据
def createData():
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['label'] = iris.target
df.columns = [
'sepal length', 'sepal width', 'petal length', 'petal width', 'label'
]
data = np.array(df.iloc[:100, :])
return data[:, :-1], data[:, -1]
if __name__ == '__main__':
x, y = createData()
xTrain, xTest, yTrain, yTest = train_test_split(x, y, test_size=0.3)
# model = NavieBayes()
# model.fit(xTrain, yTrain)
# print(model.predict([4.4, 3.2, 1.3, 0.2]))
# print(model.score(xTest, yTest))
clf = GaussianNB()
clf.fit(xTrain, yTrain)
print(clf.score(xTest, yTest))
print(clf.predict([[4.4, 3.2, 1.3, 0.2]]))
逻辑斯谛回归 (logisitic distribution)是统计学习中的经典分类方法,最大熵是概率模型学习的一个准则。
逻辑斯谛分布的密度函数和分布函数图形:
二项逻辑斯谛回归模型是一种分类模型。由**条件概率分布 P(Y |X)**表示,形式为参数化的逻辑斯谛分布。
以随机变量X取值为实数,Y取值为1/0。通过监督学习的方式来估计模型参数:
对给定的输入x,代入以上二式,通过逻辑斯谛回归比较两个条件概率值的大小,将实例x分到概率值较大的那一类。
将权值向量与输入向量扩充后可表示为:
从另一个角度看上式,可以看作将线性函数 w·x 转换为概率:
一个事件的几率:该事件发生的概率与该事件不发生的概率的比值。
若另该事件发生的概率为p,那么该事件的几率可以表示为 p/1-p,该事件的**对数几率 (logit函数)**是:
而对于逻辑斯谛回归而言,该对数几率可以表示为:
用极大似然法估计逻辑斯谛回归的参数w:
若得w的极大似然值,可以学到的逻辑斯谛回归模型为:
可将上式二项分类模型推广为多项逻辑斯谛回归模型:
假设离散型随机变量Y的取值集合为{1,2, … ,K},可得多项逻辑斯谛回归模型:
同理,二项逻辑斯谛回归的参数估计法也可以推广到多项逻辑斯谛回归。
最大熵模型由最大熵原理推导实现。
最大熵原理是概率模型学习的一个准则。
最大熵原理认为:学习概率模型时,在所有可能的概率模型中,熵最大的模型是最好的模型。通常用约束条件来确定概率模型的集合,所以,最大熵原理也可以表述为在满足约束条件的模型集合中选取熵最大的模型。
假设随机变量的X的概率分布是P(X),由前文可知熵为:
它满足以下不等式:
最大熵原理认为要选择的概率模型必须满足已有的事实,即等可能的约束条件。
最大熵原理也可以通过熵的最大化来表示等可能性。而其中“等可能”不易操作,相反,熵却是一个可以优化的数值指标。
最大熵模型的几何解释
设概率模型集合P 可由欧氏空间中的单纯形表示,其中的一个点代表一个模型,整个单纯形代表模型集合:
一条直线对应于一个约束条件,直线的交集对应于满足所有约束条件的模型集合:
这样的模型可以有无数个,而最大熵原理则给出其中最优模型选择的一个准则。
最大熵原理是统计学习的一般原理,将它应用到分类得到最大熵模型。
先给定训练集 T,考虑联合分布 P(X, Y)的经验分布和边缘分布 P(X)的经验分布:
用一个特征函数表示 x于y满足某一事实:
可得特征函数关于联合分布的经验分布的期望值:
可得特征函数关于边缘分布的经验分布的期望值:
如果模型能够获取训练数据中的信息,那么假设这两个期望值相等:
于是,规定以上两式作为约束条件,条件概率分布 P(Y|X)上的条件熵最大的模型成为最大熵模型:
最大熵模型的学习过程就是求解最大熵模型的过程。
最大熵模型的学习可以形式化为约束最优化问题。
由上文,求最大值问题可以等价为求最小值问题:
引入拉格朗日乘子w0 和 wi,定义广义的拉格朗日函数:
将约束最优化的原始问题转换为无约束最优化的对偶问题:
求解对偶函数,对其求偏导:
得极小值:
求解对偶问题外的极大化问题:
对偶问题的极大化等价于最大熵模型的极大似然估计:
得条件概率分布 P(Y |X)的对数似然函数:
将条件概率转化为规范因子和特征函数代入:
代入广义拉格朗日函数,后求极小值的对偶函数求解:
比较对数似然函数Lp 和对偶函数ψ(w) 相同,可以看到由两种方法 (对数似然函数代入对偶函数解求得的 和 由拉格朗日函数求得的对偶函数)是相等的。
于是,最大熵模型的学习问题就可以转化为具体求解对数似然函数极大化或对偶函数极大化的问题。
可将最大熵模型写成一般形式:
最大熵模型与逻辑斯谛回归模型有类似的形式,都被称为对数线性模型。
模型学习就是在给定的训练数据条件下对模型进行极大似然估计或正则化的极大似然估计。
对于为光滑凸函数的目标函数,可以才采用多种方法寻找全局最优解:
考虑一个在定义域内有极小值的可微函数,若想求得该函数的极小值可以进行以下操作:
由上步骤可以看到,该点的负梯度方向就是函数值下降最快的方向,而正梯度的方向则是函数值上升最快的方向。因此,梯度下降法的思路为:
选取适当的初值x,不断迭代,更新x的值,进行目标函数的最小化,直到收敛。
在迭代的每一步,以负梯度的方向更新x的值,从而达到减少函数值的目的。
对于在第k次迭代值 x(k),在寻找下一次 k+1 次迭代值时可考虑以下步长公式:
由上式可知,更新位置所需两个参数:
搜索方向 pk 由 x(k) 处的梯度决定,取该点的负梯度作为更新的方向:
对 x(k) 处的函数值进行泰勒展开,其一次项的系数即可以看作为该点的梯度:
步长 λ,在求出该点的负梯度 pk 后,步长可以自由选择。通常选择在负梯度固定的条件下,下一个位置函数值最小时所对应的步长。由此来达到快速梯度下降的目的:
梯度下降法算法:
改进的迭代尺度法是一种最大熵模型学习的最优化算法。
已知最大熵模型:
其对数似然函数:
该最优化算法的目的是通过极大似然估计学习参数,求对数似然函数的最大值w^。
迭代尺度算法 (IIS)的想法是:假设最大熵模型当前的参数向量是w = (w1,w2,w3…),我们希望得到一个新的参数向量w + δ,使得模型的对数似然函数值增大。如果可以找到一种参数更新的方法:w --> w + δ,那么就可以重复使用这一方法,直至找到对数似然函数的最大值。
类似于梯度下降的方法,关键在于找到更新w 的步长 δ,这个步长越长,我们复用的方法就越好,就容易找到这个对数似然函数的最大值。
那么我们考虑以下的方法,先对该对数似然函数进行作差,得到模型参数从 w到 w+δ的对数似然函数改变量:
利用对数不等式得到该改变量的下界:
(这里需要注意,化简时 Zw(x)是用6.28代入,而Zw+δ(x)则是用6.29代入推出)
现在记该下界为 A(δ|w),若想使对数似然函数的值可以提高,那么可以看作使对数似然函数的下界提高:
但可知 A(δ|w) 中δ是一个向量,含有多个变量,所以IIS试图一次只优化其中一个变量δi,而固定其他变量δj:
为此映入一个量f#,表示所有特征在(x, y)出现的次数:
再次改写函数:
根据 f#(x, y)函数的定义和詹森不等式:
可以推得以下不等关系:
于是再将A的函数范围缩小,并令最后得到的对数似然函数该变量下界为 B(δ|w):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0y719QQb-1645697064930)(C:\Users\maluyao\Desktop\note\机器学习\image-20220211220405773.png)]
最后对该下界求偏导,依次求出使得对数似然函数改变量最大的 w步长δ:
在最后求解δ的过程中,会出现以下两种情况:δ
若 f# 为常数,则规定 f#(x, y) = M,可直接显式表示:
若f# 不为常数,则必须通过数值计算求得,利用 g(δ) = Ep,通过迭代法求得,由于δ的方程由单根,所以牛顿法收敛,而且收敛速度很快:
考虑无约束最优化问题:
假设该问题的 f(x) 为二阶连续偏导函数。设第 k 次迭代值为xk,将 xk 对应的函数值进行推广的二次泰勒展开:
在上式中,一次项系数 gk 是 f(x) 在 xk 处的梯度值,而H(xk) 则是f(x) 的海森矩阵:
牛顿法求极小值的必要条件是其极小值的梯度为0:
我们假设迭代从 xk 开始,而 xk+1 满足该必要条件:
对B.2的二次泰勒展开式两端进行求导:
替换B.5 :
得到更新迭代公式:
在牛顿法的基础上,又提出了阻尼牛顿法:
每次迭代的方向仍采用dk,但每次迭代需沿此方向作一维搜索,寻求最优的步长因子λk:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GtAH67J5-1645697064935)(C:\Users\maluyao\Desktop\note\机器学习\image-20220212005543717.png)]
牛顿法虽然收敛速度快,但计算过程中需要计算目标函数的二阶偏导数,计算复杂量大,而且有时目标函数的海森矩阵无法保持正定,从而使得牛顿法失效。
依然是对B.2式两边求导,在用 x = xk代入得:
引入 Sk = Xk+1 - Xk,yk = gk+1 - gk:
上式则为拟牛顿条件。
它对海森矩阵 Hk+1 作约束,由此,对海森矩阵做近似可以作以下指导:
设通过迭代的方法对海森矩阵的逆进行近似,即以2.21为指导进行。
则该矩阵的迭代为:
接下来考虑Dk矩阵如何构造:
首先将其待定表达为uuT和vvT对称矩阵构造:
再代入指导条件2.21:
将其中系数进行赋值:
再代回2.25得:
后直接取值 u = sk,v = Dkyk
结合Dk的对称性代入2.27:
由此解出海森矩阵的近似:
DFP算法是逼近海森矩阵的逆,运用的是2.21作为指导。
而BFGS是直接逼近海森矩阵,运用的是2.20作为指导。
BFGS算法:
记 DFP 算法所作近似结果 Gk 和 BFGS 所作近似结果 Bk 互为逆矩阵
则对BFGS迭代公式:
两次应用Sherman - Morrison公式:
可得BFGS算法关于DFP算法的近似结果Gk的迭代公式:
则把由BFGS算法得出的 Gk 记作 G(BFGS),把由DFP算法得出的 Gk+1 记作 G(DFP),从而得出两参数线性组合的表达式:
给定目标函数:
梯度:
由牛顿法的B.10决定迭代方向
由阻尼牛顿法的1.13决定迭代步长
由拟牛顿法的BFGS迭代公式决定更新公式
可得最大熵模型的拟牛顿BFGS算法:
集成学习:通过构建并结合多个学习器来完成学习任务。
集成学习的一般结构:先产生一组个体学习器,再用某种策略将它们结合起来。
集成学习分类:
同质集成:个体学习器由一个现有的学习算法从训练数据产生。同质集成中的个体学习器也称为“基学习器”,其对应的学习算法也称为“基学习算法”。
异质集成:个体学习器由不同的学习算法生成,相应的个体学习器被称为“组件学习器”。
弱学习器:指泛化性能略优于随机猜测的学习器。
而集成学习通过将多个学习器进行结合,常可以获得比单一学习器显著优越的泛化性能,明显提高弱学习器的泛化性能。
集成学习的结果由投票产生,即“少数服从多数”。**因此个体学习器要有一定的“准确性”,并且具有”多样性“。**即学习器不能太差,且相互之间应有差异。
根据个体学习器的生成方式,集成学习方法大致可分为两类:
在分类问题中,提升方法通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。
AdaBoost基本思想:
AdaBoost算法:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KyM7WgWL-1645697064942)(C:\Users\maluyao\Desktop\note\机器学习\image-20220213123147827.png)]
弱分类器采用平行于坐标轴的直线对上述训练集进行分类:
给定三个以垂直的直线分类的弱分类器:
初始化权值,假设训练数据集具有均匀的权值分布,即每个训练样本在基本分类器的学习中作用相同:
因此,给定第一次迭代权值w1 = 1/N:
选取第一个分类器(X1 < 2.5),可得其误差率为0.3,然后计算出最终分类函数中G1(X)的系数 α1:
接下来考虑权值的更新,给出推导后的公式:
可知第一次迭代第5、7、8分类错误,所以它们选用(1)式进行更新:
最后更新分类函数为:
f1(x) = 0.4236 H1(x)
考虑第二次迭代,选用(X > 6.5)的弱分类器,并再次更新系数和权值:
迭代结果:
可知误分类率依然为0.3,但可以将最终的分类函数更新为:
f2(x) = 0.4236 H1(x) + 0.6496 H2(x)
第三次迭代选用(X > 6.5) 的弱分类器,并更新系数和权值:
迭代结果:
这是可以看到,该权值分布的误分类率已经为 0 了
更新并取最后的分类函数:
f3(x) = 0.4236 H1(x) + 0.6496 H2(x) + 0.9229 H3(x)
最终整合的强分类器为:
AdaBoost的基本性质:
能在学习过程中不断减少训练误差,即减少训练数据集上的分类误差率。
AdaBoost的训练误差界
该定理说明,可以在每一轮选取适当的Gm使得Zm最小,从而使训练误差下降最快
而规范化因子Zm的表达式为:
将它在二分类问题的条件下转化为关于误差率的表达式:
将e^x和sqrt(1-x)分别在x = 0处泰勒展开得到不等式:
将 8.9 不等号右式替换,可得推论:
与一些早期的提升方法不同,AdaBoost具有适应性,它能适应弱分类器各自的训练误差率——(Adapt Boost)。
AdaBoost算法的另一种解释认为:
AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分布算法时的二类分类学习方法。
接下来介绍何为前向分布算法:
很显然,在前文的叙述中也可以看到求解这样的最优化问题往往很复杂( 是的,我觉得狠复杂!)。
而前向分布算法的思想是:
从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式(8.14)。
则每一步所需优化的损失函数为:
这里再给出对前向分布算法的直观表达:
对于一般的加法模型损失函数极小化问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x8sB4fKG-1645697064948)(C:\Users\maluyao\Desktop\note\机器学习\image-20220214004146406.png)]
该问题需要最小化每一步生成的基函数的损失函数之和
前向分布算法对以上方法进行了改进,使得只需在每一次学习基分类器时都针对该分类器进行最小化损失函数,再加到之前已优化的结果上,具体可以表现为:
这里再次给出对损失函数最小化的理解:
机器学习中的目标是在函数集H内找到一个函数h,这个函数h能够很好地拟合当前训练集D和一些未知的测试数据。
而为了找到该函数h,且需要利用一个函数来衡量该函数h是否令人满意,则需要定义损失函数。
损失函数通常用方差来表示,即:
而实际上的损失函数通常在方差前 /2来消除由梯度下降法极小化损失函数值求导后的系数2:
由常理可知,方差越小的数据稳定性越好,同样它的拟合性也相对越好。因此,我们期盼的是损失函数越小越好。在实际问题中,会使用多种方法来极小化损失函数,从而求得最优化问题的解。最常用的方法又梯度下降法。
AdaBoost算法是前向分布加法算法的特例。这时,模型是基本分类器组成的加法模型,损失函数是指数函数。
提升树是以分类树或回归树为基本分类器的提升方法。
提升树:以决策树为基函数的提升方法。
其中,对于分类问题的决策树为二叉分类树,对于回归问题的决策树为二叉回归树。
上一节AdaBoost中提到的单次迭代所用的分类器,可以看作由一个根节点直接连接两个叶结点的简单决策树,即决策树桩。提升树模型则可以表示为决策树的假发模型:
由上一节所说的前向分布算法,提升树算法首先确定初始提升树 f0(x) = 0,在求出下一棵决策树的参数,最后加到上一步的模型中,完成最后的加法模型:
二分类问题提升树
将AdaBoost算法8.1中的基本分类器限制为二类分类树
回归问题提升树
回归提升树的例子
给定训练数据集:
求数据切分点
给定损失函数:
当取 s = 1.5 时:
c1 = 5.56
c2 = 1/9(5.70 + 5.91 + 6.40 + 6.80 + 7.05 + 8.90 + 8.70 + 9.00 + 9.05) = 7.50
可求得 m(s = 1.5) = 15.72
取完 9 个 后可得下表:
求回归树
由上表可知当s = 6.5 时m(s)取值最小,因此该回归树 T1(x) 为:
求当前加法模型 f1(x):
f1(x) = T1(x)
求当前加法模型的残差:
得到该训练数据用f1(x)拟合的平方误差损失为:
如果该平方损失误差不是最小的,那么继续进行迭代
以上述残差表作为训练数据继续重复上述步骤,得到的加法模型 f2(x):
接下来给出机器学习中回归问题的解释和求解:
回归问题 (Regression):
回归问题的功能是建模和分析变量之间的关系。
回归问题多用来预测一个具体的数值,如预测房价、未来的天气情况等。
它的求解有以下过程:
当损失函数是平方损失和指数损失函数时,其残差计算的优化相对比较简单。
但对于一般损失函数而言,往往每一步的优化不那么容易。于是可以利用梯度提升算法来代替回归问题提升树中的残差近似值:
欲得到泛化性能强的集成,集成中的个体学习器应尽可能相互独立。
虽然独立在现实任务中无法做到,但可以设法使基学习器尽可能具有较大的差异。
给定一个数据集,一个可能的做法是:对训练样本进行采样,产生出若干个不同的子集,再从每个数据子集中训练出一个基学习器。
这样,因为训练数据的不同,获得的基学习器也会产生较大的差异。如果采样出的每个子集都完全不同,则每个基学习器只用到了一小部分的训练数据,甚至不足以进行有效学习。
所以,我们考虑使用相互有交集的采样子集。
自主采样法:
给定包含 m 个样本的数据集,先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中。
这样经过 m 次随机采样操作,将得到包含 m 个样品的采样集,初始训练集中有的样本在采样集里多次出现,有的却从未出现。
Bagging作为并行式集成学习方法,先采样出T 个含 m 个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合。
Bagging 通过分别训练几个不同的模型,然后让所有模型表决测试样例的输出,从而通过结合几个模型来降低泛化误差。
Begging的集合策略:
随机森林(Random Forest) 是Bagging的一个变体。在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。
传统决策树在选择划分属性时是在当前结点的属性集合中选择一个最优属性。
在RF中,对基决策的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。
推荐划分的k值: k = log2 d
学习器结合所带来的好处:
对分类任务来说,学习器hi 将从类别标记集合{c1, c2, …, cN}中预测出一个标记,最常见的结合策略是使用投票法。
将hi在样本x上的预测输出表示为一个N维向量(hi^1(x); hi2(x)…),其中hij(x)是hi在类别标记cj上的输出:
当训练数据很多时,可以采用的结合策略是使用“学习法”,即通过另一个学习器来进行结合。
把个体学习器称为初级学习器,把用于结合的学习器称为次级学习器或元学习器:
Stacking算法:
由上文可知,欲购建泛化能力强的集成,个体学习器应“好而不同”。
假定用个体学习器 h1、h2…hT通过加权平均法结合产生的集成来完成回归学习任务f:
定义学习器hi 的分歧为:
集成的分歧为;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3kkHeeK9-1645697064956)(C:\Users\maluyao\Desktop\note\机器学习\image-20220214222935286.png)]
这里的分歧反应的是个体学习器在样本x上的不一致性,也相当于它的多样性
个体学习器hi 和集成 H 的平方误差为:
个体学习器误差的加权均值:
可以推出以下关系:
同样在全样本上有:
推广到全样本上的泛化误差和分歧项,最后可以得出:
其表达了个体学习器准确性越高、多样性越大,则集成越好。
多样性度量用于度量集成中个体分类器的多样性,即估算个体学习器的多样化程度。
数据样本扰动
给定初始数据集,可从中产生出不同的数据子集,再利用不同的数据子集训练出不同的个体学习器。
输入属性扰动
训练样本通常由一组属性描述,不同的“子空间”提供了观察数据的不同视角。
随机子空间算法就依赖于输入属性扰动,从初始属性集中抽取出若干个属性子集,再基于每个属性子集训练一个基学习器。
输出表示扰动
对输出表示进行操纵以增强多样性
算法参数扰动
基学习算法一般都有参数需进行设置,通过随机设置不同的参数,往往可产生差别较大的个体学习器。
为了根据一些已观察到的证据(如训练样本) 来对感兴趣的未知变量( 例如类别标记)进行估计和推测,概率模型提供一种描述框架,将学习任务归结于计算变量的概率分布。
在概率模型中,利用已知变量推测未知变量的分布称为推断,其核心是如何基于可观测变量推测出未知变量的条件分布。
例如给定所关心的变量集合为Y,可观测变量的集合为O,其他变量的集合为R。
生成式模型考虑联合分布 P(Y, R, O),判别式模型考虑条件分布 P(Y, R|O)。给定一组观测变量值,推断即要由 P(Y, R, O)或 P(Y, R|O)得到条件概率分布 P(Y| O)。
利用概率模型的学习基于训练样本来估计变量分布的参数往往相当困难,因此需要一套能简洁紧凑地表达变量间关系的工具。
概率图模型是一类用图来表达变量相关关系的概率模型。它以图为表示工具,最常见的是用一个结点表示一个或一组随机变量,结点之间的边表示变量间的概率相关关系。
隐马尔可夫模型是结构最简单的动态贝叶斯网。其中变量可分为两组:
在任一时刻,观测变量的取值仅依赖于状态变量,与其他状态变量及观测变量的取值无关:
**马尔科夫链:**系统下一时刻的状态仅由当前状态决定,不依赖于以往的任何状态。
基于以上这种依赖关系,所有变量的联合概率分布为:
确定一个隐马尔可夫模型还需以下三组参数:
通过指定状态空间Y、观测空间 X 和上述三组参数,就能确定一个隐马尔可夫模型。
通常用参数 λ = [A, B, π]来指代该参数,按如下过程产生观测序列:
通常解决的问题:
隐式马尔科夫模型的通俗解释:
假设有三个骰子,其中D6每个面出现的概率为 1/6、D4每个面出现的概率为 1/4、D8每个面出现的概率为 1/8。
假设每次挑其中的一个骰子,每个骰子被挑中的概率为1/3。那么根据被挑中的骰子种类可以得到以下序列:
D6 D8 D8 D6 D4 D8 D6 D6 D4 D8
该序列就是隐马尔可夫模型中的隐含状态链。
而记录每一次挑中骰子后掷出的数,又可以得到以下序列:
1 6 3 5 2 7 3 5 2 4
该序列就是隐马尔可夫模型中的可见状态链。
上述的隐含状态链之间可以存在转换概率,虽然已经假设每次挑中该骰子的概率为1/3,但也可以通过加以限制条件对挑中特定骰子的概率做以限制,即可以得到新的隐马尔可夫模型。
尽管可见状态之间没有转换概率,但是隐含状态和可见状态之间有一个概率叫做**输出概率。**虽然我们已经假设 D6 掷出每个面的概率都为1/6,但也可以更换成另一个 D6 骰子,使得掷出每个面的概率不尽相同。
和隐马尔可夫模型有关的算法主要分为三类,分别解决三种问题:
知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率),根据掷骰子掷出的结果(可见状态链),我想知道每次掷出来的都是哪种骰子(隐含状态链)。
如果用三个骰子 D6、D4、D8来掷,已知掷了十次的结果(1 6 3 5 2 7 3 5 2 4),想求得最有可能的掷骰子序列:
可以通过穷举所有可能的骰子序列,然后连乘所有的一个隐含状态到另一个隐含状态的概率和一个隐含状态到它的可见状态的概率,最后选取最大概率的序列。
而另一种算法则是 Viterbi algorithm:
假设先扔一个骰子,结果为1:
可知对应的最大概率骰子序列为D4,因为其掷出1的概率最高。
然后扔第二个骰子,结果为6:
分别计算第二个骰子为 D4、D6、D8 时分别掷出6的概率且第一次为 D4 掷出1的概率,选取最大概率得:
接着扔第三个骰子,结果为3:
计算它的最大概率:
接着重复以上过程,找到最后的序列。
还是知道骰子有几种(隐含状态数量),每种骰子是什么(转换概率),根据掷骰子掷出的结果(可见状态链),我想知道掷出这个结果的概率。
如果D6 被更换为一个各面出现概率不相同的六面骰子,假设掷出1的概率为1/2,掷出2,3,4,5,6的概率为1/10。该如何判断?
假设掷三次的结果分别为:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fevGC4WY-1645697064962)(C:\Users\maluyao\Desktop\note\机器学习\82093763ebb5f0b84784206bca544063_r.jpg)]
解决该问题可以使用前向算法。
首先掷出一个骰子,结果为1:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iqhcbSIe-1645697064962)(C:\Users\maluyao\Desktop\note\机器学习\cd4ede10233a8b9c33cd3921ac64bfeb_r.jpg)]
产生该结果的概率可由以下方式计算出:
掷出第二个骰子,结果为6:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M3vNvHi1-1645697064963)(C:\Users\maluyao\Desktop\note\机器学习\6790ea73a601549e1f2a8dae1abcde44_r.jpg)]
产生该结果的概率可由以下方式计算出:
掷出第三个骰子,结果为3:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zXap57jy-1645697064964)(C:\Users\maluyao\Desktop\note\机器学习\82093763ebb5f0b84784206bca544063_r.jpg)]
产生该结果的概率可由以下方式计算出:
重复以上过程,计算整个马尔可夫链的概率。然后再利用相同的方法,计算不正常的骰子和另外两个正常骰子掷出这段序列的概率,比较可得是否被替换。
知道骰子有几种(隐含状态数量),不知道每种骰子是什么(转换概率),观测到很多次掷骰子的结果(可见状态链),我想反推出每种骰子是什么(转换概率)。
该问题将会遇到EM算法,下面穿插一个EM算法的介绍:
EM算法的每次迭代由两步组成:**E步,求期望;M步,求极大。**因此,EM算法被称为期望极大算法。
换一种方式来说,EM算法就是含有隐变量的概率模型参数的极大似然估计法。
假设三个硬币抛出正面的概率分别是 π,p,q。先掷A,根据其结果正面选B,反面选C,正面记作1,反面记作0,得到如下结果:
则观测变量 y 表示一次试验观测的结果是1或0的概率为:
将观测数据表示为 Y = (Y1, Y2, … , Yn),为观测数据表示为 Z = (Z1, Z2, … ,Zn)
则观测数据的似然函数为:
极大似然估计法的参数为:
接下来利用EM算法求解:
选取参数的初值:
然后进行迭代,直至该参数收敛为止
第 i + 1 次迭代为:
该EM算法的结果与初值的选择有关,选择不同的初值可能得到不同的参数估计值。
其中,9.9的函数Q是EM算法的核心,称为Q函数:
完全数据的对数似然函数 log P(Y, Z|θ) 关于在给定观测数据Y和当前参数 θi 下对未观测数据 Z 的条件概率分布 P(Z | Y, θi) 的期望。
关于EM算法:
参数的初值可以任意选择,但EM算法对初值是敏感的
E步求Q(θ, θi)。Q函数式中Z是未观测数据,Y是观测数据。**Q的第1个变元表示要极大化的参数,第2个变元表示参数的当前估计值。**每次迭代实际在求Q函数及其极大。
M步求Q(θ, θi)的极大化,得到θ(i+1),完成一次迭代从θi —> θ(i+1)
给出停止迭代的条件,一般是对叫较小的正数 ε1,ε2,满足下式停止迭代:
面对一个含有隐变量的概率模型,目标是**是极大化观测数据( 不完全数据 )Y关于参数θ的对数似然函数。**即极大化:
极大化上述公式的困难在于其中又为观测数据并包含和( 或积分 )的对数。
在前文中,介绍了改进的迭代尺度算法,其中对数似然函数极大化所使用的方法是不断增高它的下界,那么这里依然沿用该方法通过迭代逐步近似极大化L(θ)来求它的极大值。
考虑第 i 次迭代后 θ 的估计值是 θi。作出它们的差:
利用詹森不等式得到其下界:
另L(θ)的下界为B(θ, θi):
所以此时若增大B(θ, θi)中的θ,则同时可以使L(θ)增大。所以取B(θ, θi)的极大:
通过不断求解下界的极大化逼近求解对数似然函数极大化。
但EM算法不能保证找到全局最优值。
EM算法可以用于生成模型的非监督学习,生成模型由联合概率分布P(X, Y)表示,可以认为非监督学习训练数据是联合概率分布产生的数据。
P(Y|θi) 是单调递增的:
若 P(Y|θi) 有上界,则它的对数似然函数收敛到某一值L*
在函数 Q(θ ,θ‘) 与 L(θ) 满足一定条件下,参数估计序列的收敛值 θ’ 是L(θ) 的稳定点:
在许多情况下,EM算法是学习高斯混合模型的有效方法。
假设数据 y1, y2, … , yN 由高斯混合模型生成:
明确隐变量,写出完全数据的对数似然函数
则可以得到完全数据:
完全数据的似然函数
完全数据的对数似然函数
E步,确定Q函数:条件概率的联合概率,即对数似然函数的期望:
M步,求新一轮迭代的模型参数 θ 的最大值:
高斯混合模型参数估计的EM算法:
EM( 期望最大)算法是一种迭代算法。用于含有隐变量的概率参数模型的最大似然估计或极大后验概率估计。
思想:
举例:
两枚硬币A和B随机抛掷的结果和它们抛出正面的概率为:
保留上表每轮掷出的结果,将每轮所投掷的硬币种类设为隐变量:
我们需要知道该隐变量Z = {z1, z2, z3, z4, z5}( 每轮投掷的硬币种类),才能估计 θA 和 θB 的值。
但我们估计隐变量 Z 又需要知道 θA 和 θB 的值,然后通过极大似然估计法去估计Z。
于是,先随机初始化 θA 和 θB ,再用它们去估计Z,然后基于 Z 按照最大似然概率去估计新的 θA 和 θB。
随机初始化:
得出隐变量Z:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sF96AKJs-1645697064973)(C:\Users\maluyao\Desktop\note\机器学习\v2-b325de65a5bcac196fc0939f346410d7_r.jpg)]
考虑前向分布算法,利用期望更新上表:
再次更新 θA 和 θB:
迭代10次得到最后的 θA 和 θB
随机场是由若干个位置组成的整体,当给每一个位置中按照某种分布随机赋予一个值之后,其全体就叫做随机场。
马尔科夫随机场是随机场的特例,它假设随机场中某一个位置的赋值仅仅与和它相邻的位置的赋值有关,和与其不相邻的位置的赋值无关。
马尔可夫随机场是典型的马尔可夫网。
这是一种著名的无向图模型,图中每个结点表示一个或一组变量,结点之间的边表示两个变量之间的依赖关系。
马尔可夫随机场有一组势函数,也称为因子,这是定义在变量子集上的非负实函数,注意用于定义概率分布函数。
对于图中结点的一个子集:
若其中任意两结点间都有边的连接,则称该结点子集为一个团。({x1, x2}, {x1, x3}, … , {x2, x5, x6})
若在一个团中加入另外人任何一个结点都不再形成团。(除了{x2, x5}, {x2, x6}, {x5, x6})
在马尔可夫随机场中,多个变量之间的联合概率分布能基于团分解为多个因子的乘积,每个因子仅与一个团相关。
对于n 个变量 x = {x1, x2, … ,xn},所有团构成的集合为C,对应于团Q的变量集合记为xQ, ψQ为于团Q对应的是函数,Z为规范化因子,确保P(x) 是被正确定义的概率:
借助“分离”来得到“条件独立性”:
若从结点集A中的结点到B中的结点必须经过结点集C中的结点,则称结点集A和B被结点集C分离,则C称为”分离集“。
全局马尔可夫性:给定两个变量子集的分离集,则这两个变量子集条件独立:
简化模型:
可推得条件独立:
局部马尔可夫性:给定某变量的邻接变量,则该变量条件独立于其他变量。
成对马尔可夫性:给定所有其他变量,两个非邻接变量条件独立
势函数:
假定图14.4的变量均为二值变量,则势函数可表示为:
可知,该模型中 xA 与 xC 正相关,xB 与 xC 负相关,为了满足非负性,定义势函数为指数函数:
其中H(Q)为:
马尔可夫随机场经常用于图像方面,虽然也表示两个变量之间的相互关系,但是不用于有向图模型,两个点之间并没有明显的因果关系,所以可以对很多的平等关系的事物进行建模。
图像为典型的马尔可夫随机场,在图像中每个点可能会和周围的点又关系有牵连,但是和远处的点或者初始点是没有关系的,离这个点越近对这个点的影响越大。
例如一阶领域系统:
以及二阶领域系统:
对应的因子团:
因子团:概率无向图可以进行因子分解,即通过其特性将每个结点的概率之间相乘得到最大似然概率。
图像中的像素点分布可以看作是一个马尔可夫随机场,因为图像某一领域的像素点之间有相互的关系。
图片中每个像素点都是无向图中的一个结点,每个结点之间都有着练习,图像的分割本质上可以说是图像聚类,将图像中相似的像素点进行聚合,只需要求得每个像素点的分类标签,就可以对图像进行分割。
假设图像是隐含的概率转移链S( 隐含变量 ),分类结果是观测值W:
条件随机场是一种判别式无向图模型,即对条件分布进行建模的模型。
条件随机场是马尔科夫随机场的特例,它假设马尔科夫随机场中只有X和Y两种变量,X一般是给定的,而Y一般是在给定X的条件下的输出。这样马尔科夫随机场就特化成了条件随机场。
条件随机场试图对多个变量在给定观测值后的条件概率进行建模。
若令 x = {x1, x2, x3, … ,xm}为观测数列,y = {y1, y2, … , yn}为与之对应的标记序列。则条件随机场的目标是构建条件概率模型 P( y |x )。
令 G =
则 (y, x) 构成一个条件随机场。
对于最常见的链式条件随机场来说:
它主要包含两种标记变量的团,即单个标记变量 {yi},以及相邻的标记变量 {yi-1, yi}。通过选择合适的势函数,即可得到相应条件概率定义:
条件随机场和马尔可夫随机场均使用团上的势函数定义概率,两者在形式上没有显著区别。但条件随机场处理的是条件概率,而马尔科夫随机场处理的是联合概率。
设 P(Y |X) 为线性链条件随机场,其中给定输入序列x、输出序列y、定义在边上的转移特征函数tk、定义在结点上的状态特征函数sl、参数权值 λk、μl,线性链条件随机场的参数化形式可表示为:
条件随机场式中同一特征在各个位置都有定义,可以对同一个特征在各个位置求和,将局部特征函数转化为一个全局特征函数:
设有K1个转移特征,K2个状态特征,K = K1 + K2。则特征向量可以表示为:
对各个位置的特征向量求和:
用wk表示权值向量:
则条件随机场可以表示为:
若以w表示权值向量,F(y, x)表示全局特征向量,则可以将条件随机场表示为向量的内积形式:
对每个标记序列y 的条件概率。对每个标记序列引进特殊的起点和中点状态标记 y0 = start 和 yn+1 = stop,这是标注序列的概率Pw(y | x)可以通过矩阵形式来表示:
因此,其条件概率Pw(y | x)可以通过连乘矩阵适当元素再进行规范化得出:
计算观测序列概率 P( O| λ) 的前向与后向算法:
前向概率:
给定隐马尔可夫模型 λ ,定义到时刻 t 部分观测序列为 o1,o2, …, ot且状态为 qi 的概率为前向概率:
观测序列概率的前向算法:
前向算法举例: