一个经典的分类方法,并常用于二分类。
本质是:假设数据服从这个分布,然后使用极大似然估计做参数的估计这个事情发生的概率
1、背景知识
指数族分布指一类分布,其概率密度函数都可以写成如下形式:
其中:
为自然参数。对于线性回归和logistic回归,
是一个实数,且假设
; 对于softmax回归,
是一个向量,且假设
是充分统计量,对于线性回归和logistic回归,有T(y)=y;对于k个类的softmax回归,
是一个对数配分函数,
在式子中起到归一化的作用,保证概率密度函数在随机变量y上的积分为1, 一旦T、a、b确定,就可以确定一种分布,
为参数。
大多数概率分布都可以由指数族分布给出,包括正态分布、多项式分布、泊松分布、伽马分布,Beta分布,伯努利分布等。
它就像概率分布的一个万能公式。
而我们现实世界中有很多现象是服从这些分布的,比如穷人富人分类问题其实就是一个典型的伯努利分布问题。
所以,在构造模型的时候就可以考虑这个指数族分布函数。
有了指数分布族这一利器,让我们重新审视穷富人的分类问题。
根据财富x,进行分类,非富即穷,只有两种选择。是个二分类问题,服从伯努利分布。
既然指数分布族函数涵盖了伯努利分布,我们就将伯努利分布作为描述问题的模型:
其中包含了模型参数和输入x两部分信息。设:
当通过训练确定后,输入财富量x就可以得到y=0或1的概率,进而确定x对应的类别。
但如何确定:b(y)、T(y)、a(η)呢?
因为问题服从伯努利分布。设y表示划分的类别,0-穷人,1-富人。Φ表示富人的概率,1-Φ表示穷人的概率,公式如下:
由伯努利分布和指数族分布之间的关系可知:
连同
一起带入指数族分布,得:
令y=1,也就是说类别为富人的概率:
所以就得到了最终的模型:
这就是最初我们选择这个公式作为模型的由来,这个模型又叫逻辑回归模型。
总结:
之所以会选择这个公式,是由我们选择描述问题的方式决定的。我们选择了伯努利分布来描述我们的问题,自然而然的也就推导出了这样一个公式。
如果选择其它的描述方式,可能就会出来另外一个公式了。
2、专业术语
3、基本思想
我们知道,线性回归的模型是求出输出特征向量Y和输入样本矩阵X之间的线性关系系数,满足
。此时我们的Y是连续的,所以是回归模型。
如果我们想要Y是离散的话,怎么办呢?一个可以想到的办法是,我们对于这个Y再做一次函数转换,变为。如果我们令
的值在某个实数区间的时候是类别A,在另一个实数区间的时候是类别B,以此类推,就得到了一个分类模型。如果结果的类别只有两种,那么就是一个二元分类模型了。逻辑回归的出发点就是从这来的。下面我们开始引入二元逻辑回归。
3.1、二元逻辑回归的模型
上一节我们提到对线性回归的结果做一个在函数g上的转换,可以变化为逻辑回归。这个函数g在逻辑回归中我们一般取为sigmoid函数,形式如下:
它有一个非常好的性质,即当z趋于正无穷时,趋于1,而当z趋于负无穷时,
趋于0,这非常适合于我们的分类概率模型。
另外,它还有一个很好的导数性质:
这个通过函数对求导很容易得到,后面我们会用到这个式子。
如果我们令中的z为:
,这样就得到了二元逻辑回归模型的一般形式:
其中x为样本输入,为模型输出,可以理解为某一分类的概率大小。而
为分类模型的要求出的模型参数。
对于模型输出,我们让它和我们的二元样本输出y(假设为0和1)有这样的对应关系,如果
,即
, 则y为1。如果
,即
, 则y为0。y=0.5是临界情况,此时
, 从逻辑回归模型本身无法确定分类。
h{\theta}(x)的值越小,而分类为0的的概率越高,反之,值越大的话分类为1的的概率越高。如果靠近临界点,则分类准确率会下降。
此处我们也可以将模型写成矩阵模式:

其中为模型输出,为
的维度。
为样本特征矩阵,为
的维度。
为分类的模型系数,为
的向量。
3.2、多元逻辑回归
对于多分类问题,算法将会训练出一个多元逻辑回归模型, 它包含K-1个二元回归模型。给定一个数据点,K-1个模型都会运行,概率最大的类别将会被选为预测类别。
常用方法为总是认为某种类型为正值,其余为0值,这种方法为最常用的 one-vs-rest,简称OvR.
另一种多元逻辑回归的方法是Many-vs-Many(MvM),它会选择一部分类别的样本和另一部分类别的样本来做逻辑回归二分类。最常用的是One-Vs-One(OvO)。OvO是MvM的特例。每次我们选择两类样本来做二元逻辑回归。
这里只介绍多元逻辑回归的softmax回归的一种特例推导:
首先回顾下二元逻辑回归。
其中y只能取到0和1。则有:
如果我们要推广到多元逻辑回归,则模型要稍微做下扩展。
我们假设是K元分类模型,即样本输出y的取值为1,2,。。。,K。
根据二元逻辑回归的经验,我们有:
ln\frac{P(y=1|x,\theta )}{P(y=K|x,\theta)} = x\theta1
ln\frac{P(y=2|x,\theta )}{P(y=K|x,\theta)} = x\theta_2
…
ln\frac{P(y=K-1|x,\theta )}{P(y=K|x,\theta)} = x\theta{K-1}
上面有K-1个方程。
加上概率之和为1的方程如下:
\sum\limits{i=1}^{K}P(y=i|x,\theta ) = 1
从而得到K个方程,里面有K个逻辑回归的概率分布。
解出这个K元一次方程组,得到K元逻辑回归的概率分布如下:
P(y=k|x,\theta ) = e^{x\theta_k} \bigg/ 1+\sum\limits{t=1}^{K-1}e^{x\thetat} k = 1,2,…K-1
P(y=K|x,\theta ) = 1 \bigg/ 1+\sum\limits{t=1}^{K-1}e^{x\theta_t}
4、优化参数
回顾下线性回归的损失函数,由于线性回归是连续的,所以可以使用模型误差的的平方和来定义损失函数。但是逻辑回归不是连续的,自然线性回归损失函数定义的经验就用不上了。不过我们可以用最大似然法来推导出我们的损失函数。
我们知道,按照第二节二元逻辑回归的定义,假设我们的样本输出是0或者1两类。那么我们有:
P(y=1|x,\theta ) = h{\theta}(x)
P(y=0|x,\theta ) = 1- h{\theta}(x)
把这两个式子写成一个式子,就是:
P(y|x,\theta ) = h{\theta}(x)^y(1-h{\theta}(x))^{1-y}
其中y的取值只能是0或者1。
用矩阵法表示,即为:
P(Y|X,\theta ) = h{\theta}(X)^Y(E-h{\theta}(X))^{1-Y},其中E为单位向量。
得到了y的概率分布函数表达式,我们就可以用似然函数最大化来求解我们需要的模型系数\theta。
为了方便求解,这里我们用对数似然函数最大化,对数似然函数取反即为我们的损失函数J(\theta)。其中:
似然函数的代数表达式为:
L(\theta) = \prod\limits{i=1}^{m}(h{\theta}(x^{(i)}))^{y^{(i)}}(1-h{\theta}(x^{(i)}))^{1-y^{(i)}}
其中m为样本的个数。
对似然函数对数化取反的表达式,即损失函数表达式为:
J(\theta) = -lnL(\theta) = -\sum\limits{i=1}^{m}(y^{(i)}log(h{\theta}(x^{(i)}))+ (1-y^{(i)})log(1-h{\theta}(x^{(i)})))
损失函数用矩阵法表达更加简洁:
J(\theta) = -Y\bullet logh{\theta}(X) - (E-Y)\bullet log(E-h{\theta}(X))
其中E为单位向量,\bullet为内积。
4. 二元逻辑回归的损失函数的优化方法
对于二元逻辑回归的损失函数极小化,有比较多的方法,最常见的有梯度下降法,坐标轴下降法,等牛顿法等。这里推导出梯度下降法中\theta每次迭代的公式。由于代数法推导比较的繁琐,我习惯于用矩阵法来做损失函数的优化过程,这里给出矩阵法推导二元逻辑回归梯度的过程。
对于J(\theta) = -Y\bullet logh{\theta}(X) - (E-Y)\bullet log(E-h{\theta}(X)),我们用J(\theta)对\theta向量求导可得:
\frac{\partial}{\partial\theta}J(\theta) = -Y \bullet X^T\frac{1}{h{\theta}(X)}h{\theta}(X)(1-h{\theta}(X)) + (E-Y)\bullet X^T\frac{1}{1-h{\theta}(X)}h{\theta}(X)(1-h{\theta}(X))
这一步我们用到了矩阵求导的链式法则,和下面三个矩阵求导公式:
\frac{\partial}{\partial X}logX = 1/X
\frac{\partial}{\partial z}g(z) = g(z)(1-g(z)) (g(z)为sigmoid函数)
\frac{\partial}{\partial\theta}X\theta = X^T
对于刚才的求导公式我们进行化简可得:
\frac{\partial}{\partial\theta}J(\theta) = X^T(h{\theta}(X) - Y )
从而在梯度下降法中每一步向量\theta的迭代公式如下:
\theta = \theta - \alpha X^T(h{\theta}(X) - Y )
其中,\alpha为梯度下降法的步长。
实践中,我们一般不用操心优化方法,大部分机器学习库都内置了各种逻辑回归的优化方法,不过了解至少一种优化方法还是有必要的。
5. 二元逻辑回归的正则化
逻辑回归也会面临过拟合问题,所以我们也要考虑正则化。常见的有L1正则化和L2正则化。
逻辑回归的L1正则化的损失函数表达式如下,相比普通的逻辑回归损失函数,增加了L1的范数做作为惩罚,超参数\alpha作为惩罚系数,调节惩罚项的大小。
二元逻辑回归的L1正则化损失函数表达式如下:
J(\theta) = -Y\bullet logh{\theta}(X) - (E-Y)\bullet log(1-h{\theta}(X)) + \alpha||\theta||1
其中||\theta||_1为\theta的L1范数。
逻辑回归的L1正则化损失函数的优化方法常用的有坐标轴下降法和最小角回归法。
二元逻辑回归的L2正则化损失函数表达式如下:
J(\theta) = -Y\bullet logh{\theta}(X) - (E-Y)\bullet log(1-h_{\theta}(X)) + \frac{1}{2}\alpha||\theta||_2^2
其中||\theta||_2为\theta的L2范数。
逻辑回归的L2正则化损失函数的优化方法和普通的逻辑回归类似。
5、算法全过程
6、小结
逻辑回归尤其是二元逻辑回归是非常常见的模型,训练速度很快,虽然使用起来没有支持向量机(SVM)那么占主流,但是解决普通的分类问题是足够了,训练速度也比起SVM要快不少。如果你要理解机器学习分类算法,那么第一个应该学习的分类算法个人觉得应该是逻辑回归。理解了逻辑回归,其他的分类算法再学习起来应该没有那么难了。
6.1、逻辑回归的优缺点
优点:
- 实现简单,广泛的应用于工业问题上;
- 分类时计算量非常小,速度很快,存储资源低;
- 便利的观测样本概率分数;
- 对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题;
- 计算代价不高,易于理解和实现;
缺点:
- 当特征空间很大时,逻辑回归的性能不是很好;
- 容易欠拟合,一般准确度不太高
- 不能很好地处理大量多类特征或变量;
- 只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;
- 对于非线性特征,需要进行转换
6.2、与线性回归的区别
- 线性回归只能用于回归问题,逻辑回归虽然名字叫回归,但是更多用于分类问题
- 线性回归要求因变量是连续性数值变量,而逻辑回归要求因变量是离散的变量
- 线性回归要求自变量和因变量呈线性关系,而逻辑回归不要求自变量和因变量呈线性关系
- 线性回归可以直观的表达自变量和因变量之间的关系,逻辑回归则无法表达变量之间的关系
