《统计学习方法》第六章

1.1 logistics回归与最大熵模型

        两者都是分类模型,并且两个都是对数线性模型

1.1.1 logistics回归

        其实逻辑回归是由线性回归演变过来,我们在寻找一条曲线y=wx+b,这条直线可以将样本中的两个类尽可能地区分开来,而这条线也就是理解为输入一个样本,然后通过这条线输出一个值。重点来了,我们这个是分类模型,也就是输出一个标签(0/1),但是我们怎么把这个值映射到0/1标签上呢?于是我们引入了跃阶函数来表达:

        但是发现在x=0处是不可导的,于是变换成引入sigmod的分布函数:

         也就是那条线输出的值会通过这个sigmod函数去进行一个值的映射,最后结果要么是0,要是1,我们可以发现,那条线输出的值越靠近0,就约接近sigmod变换点(0,0.5),也就是分类分得不怎么理想。上面这一整套流程就是logistic回归,下面了解它的一些特性:

        logistics的分布函数:F(x)=P(X\leq x)=\frac{1}{1+e^{-z}}

        形状参数\gamma的值越小,曲线在中心附近增长得越快

1.1.2 二项logistics回归

        二项logistics回归由条件概率分布P(Y|X)表示,随机变量X取值为实数,随机变量Y取值为1或者0.

        我们是将那条线的输出值通过sigmod函数的映射来获得分类效果,于是那条线的输出值等于sigmod的输入值,也就是有z=wx+b

        于是,我们可以定义出X\leq x也就是Y=0的条件概率:

P(Y=0|x)=\frac{1}{1+exp(wx+b)}

        与之相对应的Y=1的概率则是1-P(Y=1|x):

P(Y=1|x)=\frac{exp(wx+b)}{1+exp(wx+b)}

        现在,我们定义“几率”,是指该时间发生的概率与该事件不发生的概率的比值,再此,我们对几率进行取对数操作,可以发现,对数几率其实就是输入x的线性函数

1.1.3 模型参数估计

        似然和概率的区别:概率是在已知的一些参数的情况下,预测接下来观测所得到的结果的可能性;而似然则是刚好相反,在已知的某些观测所得的结果下,对这些观测的事物的参数进行估计。说白了似然就是根据训练集的情况去估计模型的参数,使得模型可以更好地拟合出训练集的情况。

        我们先定义:a(x)=\frac{exp(wx)}{1+exp(wx+b)}

        为了将这个似然函数表示出来,上面我们说到,“是根据训练集的情况去估计”,于是我们就先将训练集给表示出来,训练集是一个给定数据以及对应标签

        于是对应的似然函数为:\prod ^{N}_{i=1}\left [ a\left ( x_{i} \right )^{y_{i}} \right ] \left [ 1-a\left ( x_{i} \right )^{1-y_{i}} \right ]

        这里因为是Y的取值要么是0要么是1,所以两项里面,只有一个指数是1,另外一个指数肯定呢是0,所以就是乘1而已

        然后就是为什么连乘,因为我们现在是要把训练集给表现出来,也就是每个训练样品的数据我们都认为是独立的,那每个训练样品都要发生,他们且独立,那是不是要连乘才能表达出都发生的意思呢

        然后对似然函数取对数(方便计算):

        在已知试验结果(即是样品)的情况下,用来估计满足这些样本分布的参数,把可能性最大的那个参数作为真实的参数估计。

        所以我们要求这个似然函数的最大值,这样,整个学习问题就变成了对数似然函数的最优化问题,然后解决方法就是找最优化方法,有的是梯度下降,有的是拟牛顿法,我们最终会学到w,也就是“尽可能匹配到训练集的参数w”

1.1.4 多项逻辑回归

        我们可以将二项分类的形式推广到多项分类,也就是多项逻辑回归模型,这个坑以后填!

2.1 最大熵模型

        最大熵原理认为,学习概率模型的时候,在满足约束条件的情况下,在所有可能的概率模型中,熵最大(最混乱)的模型是最好的模型。这样就可以保持每个类别都雨露均沾了。

        首先,回忆起什么是熵:离散随机变量X的概率分布是P(X),其熵是:

H(P)=-\sum _{x}P(x)logP(x)

        注意哈,这里是概率分布的熵,也就是P的熵,不是随机变量的熵,当且仅当X的分布是均匀分布时,熵才是最大的。

        换一种说法就是:认为要选择的概率模型首先得满足必要且已有的事实,也就是约束条件,在此情况下,那些不确定的部分都是“等可能的”。也就是不确定的部分等可能,所以才引入了熵这个概念去度量每个部分都是“等可能的”,所以我们就是从约束条件和熵这两部分着手去修正模型

2.1.1 满足的约束条件

        在给定训练集里面,我们把已知联合分布P(X,Y)的经验分布,以及边缘分布P(X)的经验分布给求出来:

P(X=x,Y=y)=\frac{v(X=x,Y=y)}{N}

\tilde{P}(X=x)=\frac{v(X=x)}{N}

        两个v就是表示出现的频数,N就是训练集样本总量

        然后我们的主角就登场了,我们要开始引入特征函数,来去创造约束条件了

        特征函数通常就是一个二值函数f(x,y),当x和y满足某一事实,就输出1,否则输出0

        于是特征函数关于联合分布的期望值:E_{\tilde{p}}(f)=\sum_{x,y}\tilde{P}(x,y)f(x,y)

        特征函数关于模型P(Y|X)和边缘分布的期望值:E_p(f)=\sum_{x,y}\tilde{P}(x)P(y|x)f(x,y)

        关于联合分布的期望值是关于训练集的,下面用边缘分布的是关于模型的,然后两者要相等

        也就是我们在写了特征函数的时候,会对训练集产生一定的影响,这个影响就用期望值来体现,然后因为们也要使得模型有这样的约束,所以我们就让两个期望值相等来使得模型也会把约束条件给添加进去

        E_P(f)=E_{\tilde{P}}(f)

        这里引入知乎上的一个回答,解释得太到位了

        从上面的例子我们可以看到,特征函数就是模型也要跟着做的,其余的被抛弃了,我们就不考虑了,后面采用最大熵模型去处理,也就是等概率来处理

        假设我们有好多个约束条件:

        C\equiv \left \{ E_{P}(f_{i})= E_{\tilde{P}}f(i),i=1,2,3,......,N\right \}

        定义在(训练集)条件概率分布P(Y|X)上的条件熵为:

H(P)=-\sum_{x,y} \tilde{P}(x)P(y|x)logP(y|x)

        好了,下一步就是找出条件熵最大的那个模型出来就可以了

2.1.2 最大熵模型的学习

        这一节怎么找最大熵的模型

        在给定训练集和特征函数下,最大熵模型的问题可以转化成约束条件下的最优化问题:

maxH(P)=-\sum_{x,y} \tilde{P}(x)P(y|x)logP(y|x)

s.t. E_P(f_{i})=E_{\tilde{P}}(f_{i}), i=1,2,3,......,N

\sum_{y}P(y|x)=1

        然后我们将以上的约束条件的求最大值问题转换成等价的约束条件下的最小值问题:

min -H(P)=-\sum_{x,y} \tilde{P}(x)P(y|x)logP(y|x)

s.t. E_P(f_{i})-E_{\tilde{P}}(f_{i})=0, i=1,2,3,......,N

\sum_{y}P(y|x)=1

        然后我们将有条件约束的最小值问题,转化为无约束条件的最小值的对偶问题,我们首先引入拉格朗日乘子w_0,w_1,w_2,......,w_n,以及定义拉格朗日函数L(P,w)

        然后开造!

        首先看等号后面的式子,我们首先要先将这个拉格朗日函数与原来的函数相对应,先看w0这个,因为约束条件哈,一个是1-1=0,一个是自己减自己,所以我们求对拉格朗日函数求最大值就等同于原始问题了。

        接着,因为我们要对原始问题求最小值,所以我们在拉格朗日的函数最大值的基础上,去求最小值,就等同于原始问题求最小值了

        这就相当于我们用拉格朗日函数消掉约束条件,然后求max,获得对应原始函数,再求min,对原始函数求min。

        紧接着,拉格朗日函数的套路了,就是通过求对偶问题的解来获取原始问题的解

        原始问题:minmaxL(P,w)

        对偶问题:maxminL(P,w)

        通常情况下,优化问题都是凸函数,于是我们对P(Y|X)求偏导,至于为什么是对这个求偏导,好像没有找到很好的解释,后面填坑

        先求min,用求导等于0的方式求,我们记a(w)就是求最小值的解:

        然后我们令导数等于零:可得

 

        然后,因为\sum _{y}P(y|x)=1,于是我们对上式两边都加上求和的符号,我们再看右边,分子/分母等于1,也就是上下两个是相等的,于是就有下面这个等式了:

Z_w(x)=\sum_{y}exp(\sum_{i=1}w_{i}f_{i}(x,y))

         也就是现在我们对偶函数内所有的P(Y|X)都可以用w来表示了,而w就是乘数因子,也就是可以求得min了。最后我们再对a(w)求max,便可解得最终的w了,也就是最大熵模型

        因为求max这个函数是一个连续且可到的,所以我们可以用很多优化的方法,梯度下降,牛顿法,拟牛顿法都可以。

2.1.3 改进的迭代尺度法

        改进的迭代尺度法(IIS)的核心理念就是,因为我们是获得了a(w)嘛,也就是求得了最小值,我们现在换一种方法去获得最后的最大值(求max),也就是先初始化w,然后用w=w+\zeta的方式对w进行更新,那么我们就可以重复使用这种方法,直到对偶函数找到最大值

        先埋着,后期填坑,这部分网上的资料和书里说得不是太明白,可能是我太愚钝了....

2.1.4 牛顿法 and 拟牛顿法

        首先了解什么是牛顿法,具体思想就是,在现有的极小值估计点的附近对f(x)做一个二阶的泰勒展开,从而求得出了下一个极小值的估计点。

        \psi (x)=f(x_{k})+f^{'}(x_{k})(x-x_{k})+\frac{1}{2}f^{''}(x_{k})(x-x_{k})^{2}

        然后我们是求极小值,所以我们令上式的一介导等于零,并且只保留小于等于二阶的项

        \psi ^{'}(x)=0

        也就是:f^{'}(x_{k})+f^{''}(x_k)(x-x_k)=0

        从而可得:x=x_k-\frac{f^{'}(x_{k})}{f^{''}(x_{k})}

        一直这么求下去,我们可以求得迭代格式:x_{k+1}=x_{k}-\frac{f^{'}(x_{k})}{f^{''}(x_{k})},k=0,1...

        从而可以求到极小值点

        于是我们将情况推展到多元函数上来:

        于是我们将每一个求导的系数都保存起来,形成一个矩阵,因为我们只保留二阶泰勒展开,于是我们用一个一维向量来存系数(称为\bigtriangledown f),另外的二阶系数我们用 Hessian 矩阵来存(称为\bigtriangledown^{2}f

        \bigtriangledown f=\begin{bmatrix} \frac{\alpha f}{\alpha x},\frac{\alpha f}{\alpha y} \end{bmatrix}

\bigtriangledown ^{2}f=\begin{bmatrix} \frac{\alpha ^{2}f}{\alpha x^{2}} & \frac{\alpha ^{2}f}{\alpha x\alpha y}\\ \frac{\alpha ^{2}f}{\alpha y \alpha x} & \frac{\alpha ^{2}f}{\alpha y^{2}} \end{bmatrix}

 

        所以最终的迭代条件是x_{k+1}=x_{k}-\frac{\bigtriangledown f}{\bigtriangledown^{2} f} 

        但是牛顿法的迭代公式里面是没有步长因子的,也就是当我这一步走得太远了,就跨越过了最小值,然后一直重复找,但是每次走得太长了,都刚好跨越了最小值,所以就一直卡在哪里了(换句话说就是不断出现f(x_{k+1})>f(x_{k})),于是我们引入了步长因子来解决这个问题\lambda_{k},称为阻尼牛顿法,具体迭代条件换成:x_{k+1}=x_{k}-\lambda_{k}\frac{\bigtriangledown f}{\bigtriangledown^{2} f}

       

        下面就是拟牛顿法了

        虽然牛顿法的下降速度非常快,但是需要计算Hessian矩阵,而且有时候目标函数的Hessian矩阵不适正定的,牛顿法也因此失效,于是,提出了了拟牛顿法:不用二阶偏导数去构造Hessian矩阵,而是用不同的方法去近似模拟出Hessian矩阵

        首先我们先证明为什么可以用模拟出的Hessian矩阵去替换,也就是替换的可行性:

        首先对\bigtriangledown f做一个泰勒展开:\bigtriangledown f(x)=\bigtriangledown f(x_{k}) + \bigtriangledown ^{2}f(x-x_{k})

        然后把x=xk+1带入得:\bigtriangledown f(x_{k+1})-\bigtriangledown f(x_{k})=H(x_{k+1}-x_{k})

        于是我们令y_{k}=\bigtriangledown f(x_{k+1}) - \bigtriangledown f(x),令a_{k}=x_{k+1}-x_{k}

        从而有y_{k}=H*a_{k}

        于是有H^{-1}*y_{k}=a_{k}

        

        下面就是用不同的方法进行构造近似Hessian矩阵了,有BFGS,L-BFGS,DFP,这些都有公式,这里就不赘述了

        

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值