Classification:Logistic Regression(逻辑回归)

一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性。

逻辑回归与线性回归都是一种广义线性模型。逻辑回归假设因变量 逻辑回归分类算法要求特征值是 逻辑回归分为_线性回归 服从伯努利分布,而线性回归假设因变量 逻辑回归分类算法要求特征值是 逻辑回归分为_线性回归 服从高斯分布。 因此与线性回归有很多相同之处,去除Sigmoid映射函数的话,逻辑回归算法就是一个线性回归。可以说,逻辑回归是以线性回归为理论支持的,但是逻辑回归通过 Sigmoid 函数引入了非线性因素,因此可以轻松处理二分类问题。
我们拿垃圾邮件二分类(C1(正常),C2(垃圾))举例,需要找到一个概率 逻辑回归分类算法要求特征值是 逻辑回归分为_二分类_03,当逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_04 时候是分类C1,当 逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_05的时候的分类是C2。

逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_06


逻辑回归中主要是引入了Sigmoid映射函数,从上图可以看到sigmoid函数是一个s形的曲线,它的取值在[0, 1]之间,在远离0的地方函数的值会很快接近0或者1。它的这个特性对于解决二分类问题十分重要。

函数模型如下

逻辑回归分类算法要求特征值是 逻辑回归分为_线性回归_07


Python代码实现:

import numpy as np
def sigmoid(z):
	return 1/(1+np.exp(-z))

这样,通过 逻辑回归分类算法要求特征值是 逻辑回归分为_映射函数_08 函数的转换和帮助,你可以用逻辑回归来得到一个概率输出了。一般我们将 Logistic 的计算结果用小写字母 逻辑回归分类算法要求特征值是 逻辑回归分为_线性回归_09

函数模型的优化

比如说有一个训练集

逻辑回归分类算法要求特征值是 逻辑回归分为_映射函数_10


容易得到产生这组训练集数据的概率为

逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_11当这个概率 逻辑回归分类算法要求特征值是 逻辑回归分为_二分类_12 最大的时候,这个时候的 逻辑回归分类算法要求特征值是 逻辑回归分为_线性回归_13逻辑回归分类算法要求特征值是 逻辑回归分为_二分类_14 就是最优解。

逻辑回归分类算法要求特征值是 逻辑回归分为_二分类_15

然后又可以得到

逻辑回归分类算法要求特征值是 逻辑回归分为_线性回归_16


这就是两个伯努利分布之间的交叉熵,我们用交叉熵的概念来描述两组不同概率数据分布的相似程度,越小越相似。(这个概念在机器学习中非常重要)假设真实分布是 逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_17 ,预测分布是 逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_18

逻辑回归分类算法要求特征值是 逻辑回归分为_二分类_19


根据交叉熵的定义得到 逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_17逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_18

逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_22

容易得出,如果他们的分布一样,那么交叉熵为0。

我们可以定义损失函数为交叉熵的和:
逻辑回归分类算法要求特征值是 逻辑回归分为_映射函数_23
其中,
逻辑回归分类算法要求特征值是 逻辑回归分为_线性回归_24

寻找最优的函数模型

逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_25 做微分可以得到

逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_26

上式表明,目前的数值与目标差距越大,更新的值也会越大,

与线性回归比较一下:

逻辑回归分类算法要求特征值是 逻辑回归分为_映射函数_27


那么,这里有一个困惑,为什么不用 Square Error (方差)?

假设我们使用方差定义损失函数

逻辑回归分类算法要求特征值是 逻辑回归分为_线性回归_28

那么会导致下面的问题

逻辑回归分类算法要求特征值是 逻辑回归分为_二分类_29


这样会不太容易得到好的结果,但是用交叉熵的方法,会顺利很多。

逻辑回归分类算法要求特征值是 逻辑回归分为_线性回归_30

Discriminative(Logstic) v.s. Generative(Gaussion)

将之前的两类分类算法进行比较

逻辑回归分类算法要求特征值是 逻辑回归分为_线性回归_31


在之前的一个例子中,两类分类算法的表现如下

逻辑回归分类算法要求特征值是 逻辑回归分为_二分类_32


Discriminative 的表现往往比 Generative 好。

但是有些时候 Generative 也会突出它的优势,比如:

  • 训练数据很少
  • 训练数据比较乱
  • 可以通过不同的来源进行概率上的预测

多分类问题

原理与二分类一样

假设有三个类别 逻辑回归分类算法要求特征值是 逻辑回归分为_线性回归_33

逻辑回归分类算法要求特征值是 逻辑回归分为_线性回归_34


softmax做的事情就是它们进行exponential(指数化),将exponential 的结果相加,再分别用 exponential 的结果除以相加的结果。我们同样可以利用交叉熵来比较得到的概率分布与真实的概率分布之间的差异程度

逻辑回归分类算法要求特征值是 逻辑回归分为_映射函数_35

Logistic 回归的局限性

假设这样一种情况

逻辑回归分类算法要求特征值是 逻辑回归分为_二分类_36


我们没有办法用一条直线把它们分开。

那么我们可以用一个特征转换的办法:(虽然不是很容易找到一个合适的特征转换)

逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_37逻辑回归分类算法要求特征值是 逻辑回归分为_二分类_38

逻辑回归分类算法要求特征值是 逻辑回归分为_二分类_39

cascading logistic regression models(级联逻辑回归模型)

Cascading logistic regression models就是一种转换的普遍适用的方法。

可以将很多的逻辑回归接到一起,就可以进行特征转换。

逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_40


上图中,利用逻辑回归 逻辑回归分类算法要求特征值是 逻辑回归分为_映射函数_41逻辑回归分类算法要求特征值是 逻辑回归分为_二分类_42 进行特征转换,然后对 逻辑回归分类算法要求特征值是 逻辑回归分为_映射函数_43逻辑回归分类算法要求特征值是 逻辑回归分为_映射函数_44 再用一个逻辑回归 逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_45上面的例子经过这样的转换后,可以得到分类的结果

逻辑回归分类算法要求特征值是 逻辑回归分为_映射函数_46


一个逻辑回归的输入可以来源于其他逻辑回归的输出,这个逻辑回归的输出也可以是其他逻辑回归的输入。把每个逻辑回归称为一个 neuron(神经元),把这些神经元连接起来的网络,就叫做 neural network(神经网络)。

逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_47


我们可以利用神经元来组合成更为复杂的神经网络以实现更复杂的运算。例如我们要实

现 XNOR 功能(输入的两个值必须一样,均为 1 或均为 0),即:

逻辑回归分类算法要求特征值是 逻辑回归分为_逻辑回归分类算法要求特征值是_48

首先构造一个能表达 逻辑回归分类算法要求特征值是 逻辑回归分为_二分类_49 部分的神经元。

然后将表示 AND 的神经元和表示 逻辑回归分类算法要求特征值是 逻辑回归分为_二分类_49 的神经元以及表示 OR 的神经元进行组合:

我们就得到了一个能实现 XNOR 运算符功能的神经网络。

逻辑回归分类算法要求特征值是 逻辑回归分为_二分类_51


按这种方法我们可以逐渐构造出越来越复杂的函数,也能得到更加厉害的特征值。

这就是神经网络的厉害之处。