经典算法:逻辑回归(Logistic Regression)

2020-03-23  本文已影响0人  自由调优师_大废废

一、模型介绍

Logistic Regression(逻辑回归)是机器学习中一个非常非常常见的模型,是一种用于解决二分类(0 or 1)问题的机器学习方法。Logistic Regressio 与 Linear Regression 都是一种广义线性模型。逻辑回归假设因变量 y 服从伯努利分布,而线性回归假设因变量 y 服从高斯分布。 因此与线性回归有很多相同之处,去除 Sigmoid 映射函数的话,逻辑回归算法就是一个线性回归。

逻辑回归是以线性回归为理论支持的,但是逻辑回归通过 Sigmoid 函数引入了非线性因素,因此可以轻松处理 0/1 分类问题。本文主要介绍了 Logistic Regression(逻辑回归)模型的原理以及实践使用。

二、模型原理

1. 目标函数

线性回归公式:
h = \theta_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x_3 +…… +\theta_nx_n = \theta^Tx
对于 Logistic Regression 来说,其思想也是基于线性回归(Logistic Regression 属于广义线性回归模型),公式如下:
h_\theta(x) = \frac{1}{1+e^{-z}} = \frac{1}{1+e^{-\theta^Tx}}
其中 y = \frac{1}{1+e^{-x}} 称作 sigmoid 函数,从上式中可以看到 Logistic Regression 算法式将线性函数的结果映射到了 sigmoid 函数中。
sigmoid 函数图形如下:

image.png
可以看到,sigmoid 的函数输出是介于 (0,1) 之间的。所以上式中的 h_\theta(x) 的输出是数据属于某一类的概率。我们可以将 sigmoid 函数看成样本数据的概率密度函数。
我们接下来需要做的就是怎么样去估计参数\thetah_\theta(x)表示的是结果取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}
因为样本数据每个独立,所以它们的联合分布可以表示为各边际分布的乘积。
取似然函数为L(\theta) = \prod_{i=1}^{m}P(y^{(i)}|x^{(i)};\theta) L(\theta) = \prod_{i=1}^{m}(h_\theta(x^{(i)}))^{y^{(i)}} * (1- h_\theta(x^{(i)}))^{1-y^{(i)}}
取对数似然函数为l(\theta) = log(L(\theta)) = \sum_{i=1}^{m}log((h_\theta(x^{(i)}))^{y^{(i)}}) +log( (1- h_\theta(x^{(i)}))^{1-y^{(i)}})
l(\theta) = log(L(\theta)) = \sum_{i=1}^{m}y^{(i)}log(h_\theta(x^{(i)})) +1-y^{(i)}log(1- h_\theta(x^{(i)}))
至此,我们的目标函数已经确定为 l(\theta),最大似然估计就是要求使l(\theta)取最大值时的 \theta

2. 损失函数(代价函数)

令:J(\theta) = -\frac{1}{m}l(\theta) 这里的J(\theta)就是我们的损失函数。其实可以发现,在 Logistic Regression 中我们最大化似然函数和最小化损失函数实际上是等价的。关于 Logistic Regression 的损失函数求解,接下来介绍梯度下降和牛顿法两种方法。
优化的主要目标是找到一个方向,参数朝这个方向移动之后使得损失函数的值能够减小,这个方向往往由一阶偏导或者二阶偏导各种组合求得。
J(\theta) = -\frac{1}{m}(\sum_{i=1}^{m}y^{(i)}log(h_\theta(x^{(i)})) +1-y^{(i)}log(1- h_\theta(x^{(i)})))

三、模型细节

1. 为什么适合离散特征?

我们在使用 Logistic Regression 的时候很少会把数据直接丢给 LR 进行训练,我们一般都会对特征进行离散化处理,这种做的好处是:

总结,特征离散化以后起到了加快计算,简化模型和增加泛化能力的作用。

2. 为什么不用平方误差?

假设目标函数是 MSE,即:
L = \frac{(y-\hat{y})^2}{2} \frac{\partial L}{\partial\theta} = (y-\hat{y})sigmoid(\theta,x)(1-sigmoid(\theta,x))*x
根据 \theta 的初始化,导数值可能很小而导致收敛变慢,而训练过程中也可能因为该值过小而导致提前终止训练。
反过来看交叉熵的梯度: g_i = \frac{\partial J(\theta)}{\partial \theta_i} = (h(x_i) - y_i)*x_i
当模型输出概率偏离于真实概率时,梯度较大,会加快训练速度,当模型输出概率接近于真实概率时,梯度较小,训练速度会变慢,不会出现 MSE 的问题。

3. 为什么使用 sigmoid 激活函数?

详情可参考:https://blog.csdn.net/u011467621/article/details/48197943

四、模型优缺点

1. 适用场景

2. 优点

3. 缺点

五、模型使用

sklearn 中的 Logistic Regression:

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(max_iter=1000)

LR 在 sklearn 中的使用比较简单,参数较少,这里不再赘述。

上一篇 下一篇

猜你喜欢

热点阅读