逻辑回归

逻辑回归

1. 逻辑回归(Logistic Regression)

逻辑回归虽然叫逻辑回归,但是它是一个用来分类的模型

2. 二分类问题(Binary Classification)

在回归问题中,输出的是连续值,在二分类问题中,输出值\(y\)只有\(0,1\)两种取值,即\(y\in \{0,1\}\),其中\(0\)代表负类,\(1\)表示正类

一种简单的办法就是用线性回归的模型来做分类,但是效果不是很好,因为分类问题不符合线性关系

3. 假设函数

在线性回归任务中,用的假设函数是:

\[h_{\theta}(x) = \theta^T x \]

需要一个满足\(0 \le h_{\theta}(x) \le 1\) 的假设函数,即

\[0 \le h_{\theta}(x) = g(\theta^Tx) \le 1 \]

当然最简单的函数就是阶跃函数:

\[g(z) = \begin{cases} 1 & z > 0 \\ \frac12 & z=0 \\ 0 & z < 0 \end{cases} \]

\[其中z = \theta^T x \]

但是阶跃函数不可微,所以一般常用的是\(sigmoid\)函数,也可以叫\(logistic\)函数

\[g(z) = \frac1{1+e^{-z}} \]

\[\begin{cases} \lim_{z\rightarrow -\infty}g(z) = 0 \\ g(0) = 0.5 \\ \lim_{z\rightarrow +\infty}g(z) = 1 \end{cases} \]

函数图像是这样的

\(logistic\)函数可以把任意一个实数映射到\((0,1)\)区间内,而且还是一个可微函数,同时可以定义\(h_{\theta}(x)\)为输入特征分类到正类的概率,即:

\[h_{\theta}(x) = P(y = 1\mid x;\theta) \]

表示输入为\(x\)且参数为\(\theta\)的情况下分为正类的概率,且

\[P(y = 1\mid x;\theta) + P(y = 0\mid x ;\theta) = 1 \]

4. 决策边界(Decision Boundary)

根据\(logistic\)函数,可以根据概率得出分类,即

\[y = \begin{cases} 1 & h_{\theta}(x) \ge 0.5 \\ 0 & h_{\theta}(x) < 0.5 \end{cases} \]

又因为:

\[h_{\theta}(x) = g(\theta^{T} x) = \frac{1}{1 + e^{\theta^Tx}} \]

可以得出

\[y = \begin{cases} 1 & \theta^Tx \ge 0 \\ 0 & \theta^Tx < 0 \end{cases} \]

而决策边界就是一条线,把整个区域分为了两部分,对于两个特征的分类模型,这里的决策边界可以是\(\theta_0 + \theta_1 x_1 + \theta_2 x_2 = 0\),如果\(\theta_0 + \theta_1 x_1 + \theta_2 x_2\ge0\)就分为正类, 否则分为负类

决策边界和\(\theta^Tx\)有关,当\(\theta^Tx\)不是线性的时候,决策边界就不是一条直线了

5. 代价函数(Cost Function)

在线性回归中,使用的代价函数是平方损失函数,而在逻辑回归中不能用平方损失函数来作为代价函数,因为在分类任务中平方损失函数是非凸的,也就是有多个局部最小值。所以在逻辑回归中采取的代价函数是这样的:

\[J(\theta) = \frac1m \sum_{i=1}^m Cost(h_{\theta}(x^{(i)}),y^{(i)} ) ) \]

\[Cost(h_{\theta}(x^{(i)}),y^{(i)} ) = \begin{cases}-\log(h_{\theta}(x^{(i)})) & y^{(i)} = 1 \\ -\log(1-h_{\theta}(x^{(i)})) & y^{(i)} = 0 \end{cases} \]

且这个代价函数满足:

\[Cost(h_{\theta}(x^{(i)}),y^{(i)} ) = \begin{cases} 0 & h_{\theta}(x^{(i)}) = y^{(i)} \\ \infty & h_{\theta}(x^{(i)})=1 \And y^{(i)} = 0 \\ \infty & h_{\theta}(x^{(i)})=0 \And y^{(i)} = 1 \end{cases} \]

图像如下:

在这样定义的代价函数下损失函数 \(J(\theta)\) 是凸的,也就是只有一个局部最小值

为了方便表示,上面的代价函数等价于:

\[Cost(h_{\theta}(x^{(i)}),y^{(i)} ) = -y^{(i)}\log(h_{\theta}(x^{(i)})) -(1-y^{(i)})\log(1-h_{\theta}(x^{(i)})) \]

所以最终逻辑回归的损失函数定义如下:

\[J(\theta) = \frac1m\sum_{i=1}^m (-y^{(i)}\log(h_{\theta}(x^{(i)})) -(1-y^{(i)})\log(1-h_{\theta}(x^{(i)}))) \]

实际上这个就是对概率论中的最大似然估计函数取了负均值

6. 梯度下降(Gradient Decent)

梯度下降这方面的公式和线性回归是一样的

\[\frac{\partial}{\partial \theta_j}J(\theta) = \frac{1}{m} \sum_{i=1}^m (h_{\theta}(x^{(i)})) - y^{(i)})x^{(i)}_j \]

梯度下降迭代更新公式为:

\[\theta_j := \theta_j - \frac{\alpha}{m} \sum_{i=1}^m (h_{\theta}(x^{(i)})) - y^{(i)})x^{(i)}_j \]

向量化之后就是:

\[\theta := \theta - \frac{\alpha}{m}X^T(g(X\theta) - y) \]

7. 多分类任务(Multiclass Classification)

对于有多个标签类别的分类任务,采用One vs all的方法来做

假设类别\(y\in{0,1,\cdots,n}\),对于每一类别\(c\),把该类别的输入当作正类,把所有其他类别的输入当作负类,然后进行一次二分类模型的构建,最终得到\(n+1\)个模型,然后对于一个输入,其预测值就是各个分类器中分为正类概率最大的那一个

\[y\in {0,1,\cdots,n} \]

\[h_{\theta}^{(0)} = P(y = 0\mid x;\theta) \]

\[h_{\theta}^{(1)} = P(y = 0\mid x;\theta) \]

\[\cdots \]

\[h_{\theta}^{(n)} = P(y = 0\mid x;\theta) \]

\[prediction = \mathop{\arg\max}\limits_{i}(h_{\theta}^{(i)}) \]

posted @ 2021-04-20 16:26  _kiko  阅读(289)  评论(0编辑  收藏  举报