机器学习系列(12)——逻辑回归

本文介绍逻辑回归方法。

逻辑回归(logistic regression)也称“对数几率回归”或“逻辑斯谛回归”,是统计学习中的经典分类方法。最大熵是概率模型学习的一个准则,将其推广到分类问题得到最大熵模型(maximum entropy model)。逻辑回归模型与最大熵模型都属于对数线性模型。

 

0x01、逻辑回归模型

1、逻辑分布

【定义:逻辑分布(logistic distribution)】设X是连续随机变量,X服从逻辑分布是指X具有下列分布函数和密度函数:

        F(x)=P(X\leqslant x) = \frac{1}{1+e^{-(x-\mu)/\gamma}}   

        f(x)=F'(x) = \frac{e^{-(x-\mu)/\gamma}}{\gamma (1+e^{-(x-\mu)/\gamma})^2}   

式中,\mu 为位置参数,\gamma > 0 为形状参数。

对数几率分布的密度函数 f(x) 和分布函数 F(x) 的图形如下图。分布函数属于对数几率函数,其图形是一条S形曲线(sigmoid curve)。该曲线以点  (\mu, \frac{1}{2})  为中心对称,即满足:F(-x+\mu)- \frac{1}{2} = -F(x+\mu) + \frac{1}{2}  。曲线在中心附近增长速度较快,在两端增长速度较慢。形状参数 \gamma 的值越小,曲线在中心附近增长得越快。

        

2、二项逻辑回归模型

二项逻辑回归模型(binomial logistic regression model)是一种分类模型,由条件概率分布 P(Y|X) 表示。形式为参数化的对数几率分布。这里随机变量 X 取值为实数,随机变量 Y 取值为1或0。

【定义:逻辑回归模型】二项逻辑回归模型是如下的条件概率分布:

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

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

这里,x \in R^n 是输入,Y \in \left\{ 0,1 \right\} 是输出,w \in R^n 和 b \in R 是参数,w 称为权值向量,b 称为偏置,w \cdot x 为 w 和 x 的内积。

对于给定的输入实例 x,求得 P(Y=1|x) 和 P(y=0|x) 。逻辑回归比较两个条件概率值的大小,将实例x分到概率值较大的那一类。

有时为了方便,将权值向量和输入向量加以扩充,仍记作 w,x,即:

        w=(w^{(1)},w^{(2)},...,w^{(n)},b)^T ,x=(x^{(1)},x^{(2)},...,x^{(n)},1)^T ,

这时,逻辑回归模型如下:

        P(Y=1|x)= \frac{exp(w \cdot x)}{1+exp(w \cdot x)}   , P(Y=0|x)= \frac{1}{1+exp(w \cdot x)}

一个事件的几率(odd)是指该事件发生的概率与该事件不发生的概率的比值。如果事件发生的概率是p,那么该事件的几率是 \frac{p}{1-p} ,该事件的对数几率(log odds)或logit函数是:logit(p) = log \frac{p}{1-p} 。

对逻辑回归,有:log \frac{P(Y=1|x)}{1-P(Y=1|x)} = w \cdot x  ,这就是说,在逻辑回归模型中,输出 Y=1 的对数几率是输入 x 的线性函数。或者说输出 Y=1 的对数几率是由输入 x 的线性函数表示的模型,即逻辑回归模型。

换个角度,对输入 x 进行分类的线性函数 w \cdot x ,其值域为实数域。注意这里 x \in R^{n+1}, w \in R^{n+1}。通过逻辑回归模型定义,可将线性函数 w \cdot x 转换为概率:P(Y=1|x) = \frac{exp(w \cdot x)}{1+exp(w \cdot x)} ,这时线性函数的值越接近正无穷,概率值就越接近1;线性函数的值越接近负无穷,概率值就越接近0。这样的模型就是逻辑回归模型。

3、模型参数估计

逻辑回归模型学习时,对于给定的训练数据集 T=\left\{ (x_1,y_1),(x_2,y_2),...,(x_N,y_N) \right\},其中 x_i \in R^n , y_i \in \left\{ 0,1 \right\} ,可以应用极大似然法估计模型参数,从而得到逻辑回归模型。

设:P(Y=1|x)=\pi (x) ,P(Y=0|x) = 1-\pi(x) ,似然函数为:

        \prod _{i=1}^{N} [ \pi(x_i)]^{y_i} [1- \pi(x_i)]^{1-y_i}

对数似然函数为:

        L(w) = \sum_{i=1}^{N} [ y_i \log \pi(x_i) + (1-y_i) \log (1-\pi(x_i)) ] \\ ~~~~~~~~~~~~= \sum_{i=1}^{N} \left\[ y_i \log (\pi(x_i)/(1-\pi(x_i)))+ \log(1-\pi(x_i)) \right\] \\ ~~~~~~~~~~~~= \sum_{i=1}^{N} [y_i(w \cdot x_i) - \log (1+ \exp(w \cdot x_i))]

对 L(w) 求极大值,得到 w 的估计值。

这样,问题就变成了以对数似然函数为目标函数的最优化问题。逻辑回归学习中通常采用的方法是梯度下降法及牛顿法。

假设 w 的极大似然估计值是 \hat{w} ,那么学到的逻辑回归模型为:

        P(Y=1|x) = \frac{\exp(\hat{w} \cdot x)}{1+\exp(\hat{w} \cdot x)}  , P(Y=0|x) = \frac{1}{1+\exp(\hat{w} \cdot x)}  。

4、多项逻辑回归

多项逻辑回归模型(multi-nominal logistic regression model)可用于多类分类。假设离散型随机变量Y的取值集合是 \left\{ 1,2,...,K \right\},那么多项逻辑回归模型是:

        P(Y=k|x)= \frac{\exp(w_k \cdot x)}{1 + \sum_{k=1}^{K-1} \exp(w_k \cdot x)}, ~k=1,2,...,K-1  

        P(Y=K|x) = \frac{1}{1 + \sum_{k=1}^{K-1} \exp(w_k \cdot x)}  

这里,x \in R^{n+1}, w_k \in R^{n+1}

 

0x02、最大熵模型

最大熵模型(maximum entropy model)由最大熵原理推导实现。

1、最大熵原理

最大熵原理是概率模型学习的一个准则。最大熵原理认为,学习概率模型时,在所有可能的概率模型(分布)中,熵最大的模型是最好的模型。通常用约束条件来确定概率模型的集合,所以最大熵原理也可以表述为满足约束条件的模型集合中选取熵最大的模型。

假设离散随机变量X的概率分布是 P(X),则其熵是:H(P)= - \sum_{x} P(x)\log P(x) ,

熵满足下列不等式:0\leqslant H(P) \leqslant \log|X| ,式中,|X| 是 X 的取值个数,当且仅当 X 的分布是均匀分布时右边的等号成立。这就是说,当 X 服从均匀分布时,熵最大。

直观地,最大熵原理认为要选择的概率模型首先必须满足已有的事实,即约束条件。在没有更多信息的情况下,那些不确定的部分都是“等可能的”。最大熵原理通过熵的最大化来表示等可能性。“等可能”不容易操作,而熵则是一个可优化的数值指标。

2、最大熵模型的定义

最大熵原理是统计学习的一般原理,将它应用到分类得到最大熵模型。

假设分类模型是一个条件概率分布 P(Y|X)X \in \chi \subseteq R^n 表示输入,Y \in \gamma 表示输出,\chi 和 \gamma 分别是输入和输出的集合。这个模型表示的是对于给定的输入 X,以条件概率 P(Y|X) 输出 Y

给定一个训练数据集 T= \left\{ (x_1,y_1),(x_2,y_2),...,(x_N,y_N) \right\} ,学习的目标是用最大熵原理选择最好的分类模型。

首先考虑模型应该满足的条件。给定训练数据集,可以确定联合分布 P(X,Y) 的经验分布和边缘分布 P(X) 的经验分布,分别以 \hat{P}(X,Y) 和 \hat{P}(X) 表示,这里:

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

        \hat{P}(X=x)= \frac{\nu (X=x)}{N}  

其中,\mu (X=x,Y=y) 表示训练数据中样本 (x,y) 出现的频率,\mu (X=x) 表示训练数据中输入 x 出现的频数,N 表示训练样本容量。

用特征函数(feature function) 描述输入x和输出y之间的某一个事实。其定义是:

        

它是一个二值函数,当x和y满足这个事实时取值为1,否则取值为0。

特征函数 f(x,y) 关于经验分布 \hat{P}(X,Y) 的期望值,用 E_{\hat{P}}(f) 表示:E_{\hat{P}}(f) = \sum_{x,y} \hat{P}(x,y)f(x,y)  。

特征函数 f(x,y) 关于模型 P(Y|X) 与经验分布 \hat{P}(X) 的期望值,用 E_{P}(f) 表示:E_{P}(f)= \sum_{x,y} \hat{P}(x) P(y|x)f(x,y) 。

如果模型能够获取训练数据中的信息,那么就可以假设这两个期望值相等,即:E_{P}(f) = E_{\hat{P}}(f),或

        \sum_{x,y} \hat{P}(x)P(y|x)f(x,y) = \sum_{x,y} \hat{P}(x,y)f(x,y)    

将 上两式作为模型学习的约束条件,假如有n个特征函数 f_{i}(x,y), i=1,2,...,n ,那么就有n个约束条件。

【定义:最大熵模型】假设满足所有约束条件的模型集合为:

        C \equiv \left\{ P \in \mathbb{P}|E_{P}(f_i) = E_{\hat{P}}(f_i), ~i=1,2,...,n \right\}

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

        H(P)= - \sum_{x,y} \hat{P}(x) P(y|x) \log P(y|x)

则模型集合C中条件熵 H(P) 最大的模型称为最大熵模型。式中对数为自然对数。

3、最大熵模型的学习

最大熵模型的学习过程就是求解最大熵模型的过程。最大熵模型的学习可以形式化为约束最优化问题。

对于给定的训练数据集 T= \left\{ (x_1,y_1),(x_2,y_2),...,(x_N,y_N) \right\} 以及特征函数 f_{i}(x,y), i=1,2,...,n ,最大熵模型的学习等价于约束最优化问题:

        \max_{P \in C} ~ H(P) = - \sum_{x,y} \hat{P}(x)P(y|x) \log P(y|x) \\ ~~~~~~ s.t. ~~~ E_{P}(f_i) = E_{\hat{P}}(f_i), ~ i=1,2,...,n ,~ \sum_{y} P(y|x) = 1   

按照最优化问题的习惯,将求最大值问题改写为等价的求最小值问题:

        \min_{P \in C} ~ -H(P) = - \sum_{x,y} \hat{P}(x)P(y|x) \log P(y|x) \\ ~~~~~~ s.t. ~~~ E_{P}(f_i) - E_{\hat{P}}(f_i) = 0, ~ i=1,2,...,n ,~ \sum_{y} P(y|x) = 1   

求解约束最优化问题所得出的解,就是最大熵模型学习的解。下面是具体推导过程。

将约束最优化的原始问题转换为无约束最优化的对偶问题。通过求解对偶问题求解原始问题。

首先,引进拉格朗日乘子 w_0,w_1,w_2,...,w_n,定义拉格朗日函数 L(P,w)

         L(P,w) \equiv - H(P) + w_0 \left\(1- \sum_{y} P(y|x) \right\) + \sum_{i=1}^{n} w_i (E_{\hat{P}}(f_i) - E_{P}(f_i)) \\ ~~~~~~~~~~~~~~~~ = \sum_{x,y} \hat{P}(x)P(y|x) \log P(y|x) + w_0 \left\( 1- \sum_{y} P(y|x) \right\) \\ ~~~~~~~~~~~~~~~~~~~ + \sum_{i=1}^{n} w_i \left\( \sum_{x,y} \hat{P}(x,y)f_i(x,y) - \sum_{x,y} \hat{P}(x)P(y|x)f_i(x,y) \right\)    

最优化的原始问题是:\min_{P \in C} \max_{w} L(P,w) ,对偶问题是:\max_{w} \min_{P \in C} L(P,w) 。由于拉格朗日函数 L(P,w) 是P的凸函数,原始问题的解与对偶问题的解是等价的。这样,可以通过求解对偶问题来求解原始问题。

首先,求解对偶问题内部的极小化问题 \min_{P \in C} L(P,w) 。\min_{P \in C} L(P,w) 是w的函数,将其记作:

        \Psi (w) = \min_{P \in C} L(P,w) = L(P_w, w)

\Psi (w) 称为对偶函数,同时,将其解记作:P_w = \arg \min_{P \in C} L(P,w) = P_w (y|x) ,

具体地,求 L(P,w) 对 P(y|x) 的偏导数:

        \frac{\partial L(P,w)}{\partial P(y|x)} = \sum_{x,y} \hat{P}(x) ( \log P(y|x) + 1) - \sum_{y}w_0 - \sum_{x,y} \left ( \hat{P}(x) \sum_{i=1}^{n} w_i f_i(x,y) \right ) \\ ~~~~~~~~~~~~~~~~~~= \sum_{x,y} \hat{P}(x) \left ( \log P(y|x) + 1 -w_0 - \sum_{i=1}^{n} w_i f_i(x,y) \right )    

令偏导数等于0,在 \hat{P}(x)>0 的情况下,解得:

        P(y|x) = \exp \left ( \sum_{i=1}^{n} w_i f_i(x,y) + w_0 -1 \right ) = \frac{\exp \left ( \sum_{i=1}^{n} w_i f_i (x,y) \right ) }{ \exp (1-w_0)}   

由于  \sum_{y} P(y|x) = 1 ,得:  P_w(y|x) = \frac{1}{Z_w(x)} \exp \left ( \sum_{i=1}^{n} w_i f_i (x,y) \right )   ,

其中,Z_w(x) = \sum_{y} \exp \left ( \sum_{i=1}^{n} w_i f_i (x,y) \right ) 。

Z_w(x) 称为规范化因子;f_i(x,y) 是特征函数;w_i 是特征的权值。由2上两式表示的模型 P_w = P_w(y|x) 就是最大熵模型,这里w是最大熵模型中的参数向量。

之后,求解对偶问题外部的极大化问题:\max_{w} \Psi(w) ,将其解记为 w^*,即:w^* = \arg \max_{w} \Psi (w) 。这就是说,可以应用最优化算法求解对偶函数 \Psi (w) 的极大化,得到 w^* , 用来表示 P^* \in C^*。这里 P^* = P_{w^*} = P_{w^*}(y|x) 是学习到的最优模型(最大熵模型)。也就是说,最大熵模型的学习归结为对偶函数 \Psi (w) 的极大化。

4、极大似然估计

已知训练数据的经验概率分布 \hat{P}(X,Y) ,条件概率分布 P(Y|X) 的对数似然函数表示为:

        L_{\hat{P}}(P_w) = \log \prod_{x,y} P(y|x) ^{\hat{P}(x,y)} = \sum_{x,y} \hat{P}(x,y) \log P(y|x)   

当条件概率分布 P(y|x) 是最大熵模型时,对数似然函数 L_{\hat{P}}(P_w) 为:

        L_{\hat{P}}(P_w) = \sum_{x,y} \hat{P}(x,y) \log P(y|x) \\ ~~~~~~~~~~~~~~~ = \sum_{x,y} \hat{P}(x,y) \sum_{i=1}^{n} w_i f_i(x,y) - \sum_{x,y} \hat{P} (x,y) \log Z_w(x) \\ ~~~~~~~~~~~~~~~ = \sum_{x,y} \hat{P}(x,y) \sum_{i=1}^{n} w_i f_i(x,y) - \sum_{x} \hat{P}(x) \log Z_w(x)   

对偶函数 \Psi (w)

        \Psi(w) = \sum_{w,y} \hat{P}(x) P_w(y|x) \log P_w(y|x) \\ ~~~~~~~~~~~~~~~~ + \sum_{i=1}^{n} w_i \left ( \sum_{x,y} \hat{P}(x,y)f_i(x,y) - \sum_{x,y}\hat{P}P_w(y|x)f_i(x,y) \right ) \\ ~~~~~~~~~~~~~~~~~= \sum_{x,y} \hat{P}(x,y) \sum_{i=1}^{n} w_i f_i(x,y) + \sum_{x,y} \hat{P}(x)P_w(y|x) \left ( \log P_w(y|x) - \sum_{i=1}^{n} w_i f_i(x,y) \right ) \\ ~~~~~~~~~~~~ = \sum_{x,y}\hat{P}(x,y) \sum_{i=1}^{n} w_i f_i(x,y) - \sum_{x,y} \hat{P}(x)P_w(y|x) \log Z_w (x) \\ ~~~~~~~~~~~~ = \sum_{x,y} \hat{P}(x,y) \sum_{i=1}^{n} w_i f_i(x,y) - \sum_{x} \hat{P}(x) \log Z_w(x)

最后一步用到  \sum_{y} P(y|x) = 1 。比较以上两式,可得:\Psi(w) = L_{\hat{P}}(P_w) 。既然对偶函数 \Psi(w) 等价于对数似然函数 L_{\hat{P}}(P_w),于是证明了最大熵模型学习中的对偶函数极大化等价于最大熵模型的极大似然估计这一事实。这样,最大熵模型的学习问题就转换为具体求解对数似然函数极大化或对偶函数极大化的问题。

可以将最大熵模型写成更一般的形式:

      P_{w} (y|x) = \frac{1}{Z_{w}(x)} \exp \left ( \sum_{i=1}^{n} w_i f_i (x,y) \right )   ,Z_w(x) = \sum_{y} \exp \left ( \sum_{i=1}^{n} w_i f_i(x,y) \right ) ,

这里,x \in R^n 为输入,y \in \left\{ 1,2,...,K \right\} 为输出,w \in R^n 为权值向量,f_i(x,y), i=1,2,...,n 为任意实值特征函数。

最大熵模型与逻辑回归模型有类似的形式,它们又称为对数线性模型(log linear model)。模型学习就是在给定的训练数据条件下对模型进行极大似然估计或正则化的极大似然估计。

 

0x03、模型学习的最优化算法

逻辑回归模型,最大熵模型学习归结为以似然函数为目标函数的最优化问题,通常通过迭代算法求解。从最优化的观点看,这时的目标函数具有很好的性质。它是光滑的凸函数,因此多种最优化的方法都适用,保证能找到全局最优解。常用的方法有改进的迭代尺度法、梯度下降法、牛顿法或拟牛顿法。牛顿法或拟牛顿法一般收敛速度更快。

1、改进的迭代尺度法

改进的迭代尺度法(improved iterative scaling, IIS)是一种最大熵模型学习的最优化算法。

已知最大熵模型为:P_w(y|x) = \frac{1}{Z_w(x)} \exp \left ( \sum_{i=1}^{n} w_i f_i(x,y) \right ),其中 Z_w(x) = \sum_y \exp \left ( \sum_{i=1}^{n} w_i f_i(x,y) \right ) 。

对数似然函数为:L(w) = \sum_{x,y} \hat{P}(x,y) \sum_{i=1}^{n} w_i f_i (x,y) - \sum_x \hat{P}(x) \log Z_w(x) ,目标是通过极大似然估计学习模型参考,即求对数似然函数的极大值 \hat{w}

IIS的想法是:假设最大熵模型当前的参数向量是 w = (w_1,w_2,...,w_n)^T ,我们希望找到一个新的参数向量 w + \delta = (w_1 + \delta_1, w_2 + \delta_2,..., w_n + \delta_n)^T,使得模型的对数似然函数值增大。如果能有这样一种参数向量更新的方法 \tau : w \rightarrow w + \delta ,那么就可以重复使用这一方法,直至找到对数似然函数的最大值。

对于给定的经验分布 \hat{P}(x,y),模型参数从 w(w+\delta),对数似然函数的改变量是:

        L(w + \delta) - L(w) = \sum_{x,y} \hat{P}(x,y) \log P_{w+\delta}(y|x) - \sum_{x,y} \hat{P}(x,y) \log P_w(y|x) \\ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ = \sum_{x,y} \hat{P}(x,y) \sum_{i=1}^{n} \delta_i f_i (x,y) - \sum_{x} \hat{P}(x) \log \left ( \frac{Z_{w+\delta}(x)}{Z_w(x)} \right )   

利用不等式  - \log \alpha \geqslant 1-\alpha, ~ \alpha > 0 ,建立对数似然函数该变量的下界:

        L(w + \delta) - L(w) \geqslant \sum_{x,y} \hat{P}(x,y) \sum_{i=1}^{n} \delta_i f_i (x,y) + 1 - \sum_{x} \hat{P}(x) \frac{Z_{w + \delta}(x)}{Z_w(x)} \\ ~~~~~~~~~~~~~~~~~~~~~~~~~ = \sum_{x,y} \hat{P} (x,y) \sum_{i=1}^{n} \delta_i f_i (x,y) + 1 - \sum_{x} \hat{P}(x) \sum_{y} P_w(y|x) \exp \left ( \sum_{i=1}^{n} \delta_i f_i (x,y) \right )  

将右端记为:

        A(\delta|w) = \sum_{x,y} \hat{P}(x,y) \sum_{i=1}^{n} \delta_i f_i(x,y) + 1 - \sum_{x} \hat{P}(x) \sum_{y} P_w(y|x) \exp \left ( \sum_{i=1}^{n} \delta_i f_i (x,y) \right )   

于是有:L(w + \delta) - L(w) \geqslant A(\delta |w) ,即 A(\delta | w) 是对数似然函数改变量的一个下界。

如果能找到适当的 \delta 使下界 A(\delta |w) 提高,那么对数似然函数也会提高。然而,函数 A(\delta |w) 中的 \delta 是一个向量,含有多个变量,不易同时优化。IIS试图一次只优化其中一个变量 \delta_i,而固定其他变量 \delta_j, ~ i\neq j

为达到这一目的,IIS进一步降低下界 A(\delta |w) 。具体地,IIS引进一个量 f^{\#}(x,y) = \sum_{i} f_i (x,y)  ,因为 f_i 是二值函数,故 f^{\#}(x,y) 表示所有特征在 (x,y) 出现的次数。这样 A(\delta|w) 可以改写为:

        A(\delta|w) = \sum_{x,y} \hat{P}(x,y) \sum_{i=1}^{n} \delta_i f_i(x,y) + 1 - \sum_{x}\hat{P}(x) \sum_{y}P_w(y|x) \exp \left ( f^{\#}(x,y) \sum_{i=1}^{n} \frac{\delta_i f_i (x,y)}{f^{\#}(x,y)} \right )   

利用指数函数的凸性以及对任意 i,有 \frac{f_i (x,y)}{f^{\#}(x,y)} \geqslant 0 ,且  \sum_{i=1}^{n} \frac{f_i(x,y)}{f^{\#}(x,y)} = 1 这一事实,根据Jensen不等式,得到:

        \exp \left ( \sum_{i=1}^{n} \frac{f_i(x,y)}{f^{\#}(x,y)} \delta_i f^{\#}(x,y) \right ) \leqslant \sum_{i=1}^{n} \frac{f_i(x,y)}{ f^{\#}(x,y)} \exp (\delta_i f^{\#}(x,y))   

于是有:

        A(\delta|w) \geqslant \sum_{x,y} \hat{P}(x,y) \sum_{i=1}^{n} \delta_i f_i(x,y) + 1 - \sum_{x}\hat{P}(x) \sum_{y}P_w(y|x) \sum_{i=1}^{n} \left ( \frac{f_i(x,y)}{f^{\#}(x,y)} \right ) \exp (\delta_i f^{\#}(x,y))   

记:

        B(\delta|w) = \sum_{x,y} \hat{P}(x,y) \sum_{i=1}^{n} \delta_i f_i(x,y) + 1 - \sum_{x}\hat{P}(x) \sum_{y}P_w(y|x) \sum_{i=1}^{n} \left ( \frac{f_i(x,y)}{f^{\#}(x,y)} \right ) \exp (\delta_i f^{\#}(x,y))  

于是得到:L(w + \delta) - L(w) \geqslant B(\delta | w) 。这里 B(\delta |w) 是对数似然函数改变量的一个新的(相对不紧的)下界。

求 B(\delta |w) 对 \delta_i 的偏导数:

        \frac{\partial B(\delta|w)}{\partial \delta_i} = \sum_{x,y} \hat{P}(x,y) f_i(x,y) - \sum_{x} \hat{P} (x) \sum_{y} P_w (y|x) f_i(x,y) \exp (\delta_i f^{\#}(x,y))

上式中,除 \delta_i 外不含任何其他变量。令偏导数为0,得到:

        \sum_{x,y} \hat{P}(x)P_w(y|x) f_i(x,y) \exp (\delta_i f^{\#}(x,y)) = E_{\hat{P}}(f_i)

于是依次对 \delta_i 求解以上方程可以求出 \delta 。

【改进的迭代尺度算法IIS】

输入:特征函数 f_1,f_2,...,f_n;经验分布 \hat{P}(X,Y),模型 P_w(y|x) ;

输出:最优参数值 w_{i}^{*};最优模型 P_{w^*}

(1)对所有 i \in \left\{ 1,2,...,n \right\} ,取初值 w_i = 0

(2)对每一 i \in \left\{ 1,2,...,n \right\} :

        a. 令 \delta_i 是方程: \sum_{x,y} \hat{P}(x) P(y|x) f_i(x,y) \exp(\delta_i f^{\#}(x,y)) = E_{\hat{P}}(f_i)   的解,这里  f^{\#}(x,y) = \sum_{i=1}^{n} f_i(x,y) ;

        b. 更新 w_i 值:w_i \leftarrow w_i + \delta

(3)如果不是所有 w_i 都收敛,重复步骤(2)。

这一算法关键的一步是(a),即求解 \delta_i 。如果 f^{\#}(x,y) 是常数,即对任何x,y,有 f^{\#}(x,y) = M,那么 \delta_i 可以显式地表示成:

      \delta_i = \frac{1}{M} \log \frac{E_{\hat{P}}(f_i)}{E_P(f_i)}  

如果 f^{\#}(x,y) 不是常数,那么必须通过数值计算求 \delta_i 。简单有效的方法是牛顿法。牛顿法通过迭代求得 \delta_i^{*},使得 g(\delta_{i}^{*}) = 0 。迭代公式是:

        \delta_{i}^{(k+1)} = \delta_{i}^{(k)} - \frac{g(\delta_{i}^{(k)})}{g'(\delta_{i}^{(k)})}  

只要适当选取初始值 \delta_{i}^{(0)},由于 \delta_i 的方程有单根,因此牛顿法恒收敛,而且收敛速度很快。

2、拟牛顿法(BFGS)

对于最大熵模型而言,

        P_w(y|x) = \frac{ \exp \left ( \sum_{i=1}^{n} w_i f_i(x,y) \right ) }{ \sum_{y} \exp \left ( \sum_{i=1}^{n} w_i f_i(x,y) \right ) }

目标函数:

        \min_{w \in R^n} ~ f(w) = \sum_{x} \hat{P}(x) \log \sum_{y} \exp \left ( \sum_{i=1}^{n} w_i f_i (x,y) \right ) - \sum_{x,y} \hat{P}(x,y) \sum_{i=1}^{n} w_i f_i (x,y)  

梯度:

        g(w) = \left ( \frac{\partial f(w)}{\partial w_1} , \frac{\partial f(w)}{\partial w_2} ,..., \frac{\partial f(w)}{\partial w_n} \right )^T  

其中:

        \frac{\partial f(w)}{\partial w_i} = \sum_{x,y} \hat{P}(x) P_w(y|x) f_i(x,y) - E_{\hat{P}}(f_i), ~i=1,2,...,n  

【最大熵模型学习的BFGS算法】

输入:特征函数 f_1,f_2,...,f_n ;经验分布 \hat{P}(x,y),目标函数 f(w) ,梯度 g(w) = \triangledown f(w) ,精度要求 \varepsilon

输出:最优参数值w^{*} ;最优模型 P_{w^*}(y|x)

(1)选定初始点 w^{(0)},取 B_0 为正定对称矩阵,置 k=0

(2)计算 g_k = g(w^{(k)}) 。若 ||g_k|| < \varepsilon,则停止计算,得 w^* = w^{(k)} ;否则转(3);

(3)由 B_k p_k = - g_k 求出 p_k

(4)一维搜索:求 \lambda_k 使得:

         f(w^{(k)} + \lambda_k p_k) = \min_{ \lambda \geqslant 0} f(w^{(k)} + \lambda p_k)

(5)置 w^{(k+1)} = w^{(k)} + \lambda_k p_k

(6)计算 g_{k+1} = g(w^{(k+1)}) ,若 ||g_{k+1}|| < \varepsilon,则停止计算,得 w^* = w^{(k+1)} ;否则按下式求出 B_{k+1}

        B_{k+1} = B_k + \frac{y_k y_{k}^{T}}{y_{k}^{T} \delta _k} - \frac{B_k \delta_k \delta_{k}^{T} B_k}{ \delta_{k}^{T} B_{k} \delta_{k}}, ~ y_k = g_{k+1} - g_k, ~ \delta_k = w^{(k+1)} - w^{(k)} 

(7)置 k = k+1,转(3)。

 

0x04、逻辑回归在sklearn中的实现

sklearn.linear_model.LogisticRegression 参数如下:

参数参数类型和取值范围说明
penalty{'l1','l2',
'elasticnet','none'}
惩罚项,正则化选择参数,默认'l2'。
l1和l2分别对应L1正则化和L2正则化。penalty的选择会影响损失函数优化算法(solver)的选择:如果是L2正则化,可选{'newton-cg','lbfgs','sag'}算法;如果是L1正则化,只能选择'liblinear';如果是'elasticnet',只能选择'saga'算法;如果是'none'(不支持'liblinear')则不作正则化。
dual布尔型是否使用对偶算法,默认'False'不使用。
对偶算法仅适用于l2正则化和liblinear算法。如果样本数量大于特征数量推荐使用'False'。
tol浮点型允许提前停止。默认值是:1e-4。
C浮点型正则强度的倒数,必须为正的浮点数。默认值1.0。
与支持向量机中一样,较小的值指定了更强的正则化。
fit_intercept布尔型指定是否将常量(也称偏差或截距)添加到决策函数。默认是True。
intercept_scaling浮点型仅用于算法是'liblinear'且fit_intercept是True时。
class_weight字典或‘balanced'样本权重。
random_state整型,随机状态实例当solver参数取{'sag','sgag','liblinear'}时,用于随机抽取数据。
solver{'newton-cg','lbfgs',
'liblinear','sag','saga'}
优化算法选择参数,默认'lbfgs'。有4种算法可以选择:
(a) liblinear:使用开源的liblinear库,内部使用了坐标轴下降法来迭代优化损失函数。
(b) lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
(c) newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
(d) sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候,SAG是一种线性收敛算法,这个速度远比SGD快。
max_iter整型求解程序收敛所需的最大迭代次数。默认值100。
multi_class{'auto','ovr',
'multinomial'}
默认'auto'。
多类选项可以是'ovr'或'multinomial'。 如果选择的选项是'ovr',那么二元问题适合每个标签。 另外最小化损失是整个概率分布中的多项式损失拟合。 不适用于liblinear算法。
verbose整型,随机状态实例对于liblinear和lbfgs算法,将verbose设置为任何正数以表示详细程度。默认值为0。
warm_start布尔型热启动。默认值为False。
当为True时,重复使用之前的调用来初始化,否则擦除之前的结果。支持{'lbgfs','newton-cg','sag','saga'}。对liblinear没用。
n_jobs整型设置并行,默认值为None。
如果multi_class='ovr',指定对类进行并行化时使用的CPU内核数。当solver是'liblinear'时,无论multi_class是什么,该参数都会被忽略。-1表示使用所有处理器。None一般表示1,除非它在joblib.parallel_backend上下文中。
l1_ratio浮点型Elastic-Net混合参数,范围是[0,1]。默认是None。
只用于penalty='elasticnet'时。l1_ratio=0等效于penalty='l2';l1_ratio=1等效于penalty='l1'。0<l1_ratio<1则是L1与L2的组合。

 

 

参考:

[1]. 李航. 统计学习方法(第二版)

[2]. 周志华.机器学习

[3]. LogisticRegression回归算法Sklearn参数详解 - 博客园

[4]. sklearn逻辑回归参数说明 - CSDN

[5]. Sklearn-LogisticRegression逻辑回归 - CSDN

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
居民出行选择行为可以被视为一个分类问题,其中特征包括年龄、性别、收入、出行目的、出行时间、出行距离等。在这里,我们可以使用逻辑回归模型进行预测。 我们可以先收集一些相关数据,然后将其分为训练集和测试集。接着,我们可以使用 Python 中的 Scikit-learn 库来构建逻辑回归模型。具体步骤如下: 1. 首先,我们需要导入所需的库: ```python import pandas as pd from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score ``` 2. 然后,我们需要加载数据并进行预处理: ```python data = pd.read_csv('travel_behavior.csv') data = data.dropna() # 删除缺失值 data = pd.get_dummies(data, columns=['purpose', 'time']) # 将分类变量转换为哑变量 X = data.drop(['choice'], axis=1) y = data['choice'] ``` 这里,我们使用了 Pandas 库加载数据,并删除了任何包含缺失值的行。然后,我们使用 `get_dummies()` 函数将分类变量转换为哑变量。最后,我们将特征(`X`)和标签(`y`)分开。 3. 接着,我们将数据分为训练集和测试集: ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) ``` 这里,我们使用了 `train_test_split()` 函数来将数据分为训练集和测试集。我们选择了 20% 的数据作为测试集,而其余的数据则用于训练模型。 4. 然后,我们可以使用逻辑回归模型进行训练: ```python model = LogisticRegression() model.fit(X_train, y_train) ``` 这里,我们使用了 Scikit-learn 库中的 `LogisticRegression()` 类来构建逻辑回归模型,并使用 `fit()` 方法将模型拟合到训练数据上。 5. 最后,我们可以使用测试集来评估模型的准确性: ```python y_pred = model.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print('Accuracy:', accuracy) ``` 这里,我们使用 `predict()` 方法来预测测试集中的标签,并使用 `accuracy_score()` 函数来计算模型的准确性。 通过以上步骤,我们就可以构建一个简单的逻辑回归模型,用于预测居民出行选择行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值