逻辑回归是一种判别式模型,与线性回归拟合数值有一定区别。逻辑回归假设因变量服从伯努利分布,而线性回归假设因变量服从高斯分布。通过Sigmoid激活函数引入非线性因素。逻辑回归的目的是分类,多用于解决二分类问题,它与多重线性回归分析类似。

定义

逻辑回归定义为:

  • 假设函数

  • 决策函数

最佳拟合参数

以上定义就是逻辑回归的主要思想,那么该如何求最佳参数$ \omega $使得函数充分拟合数据呢?这里使用最优化算法中的梯度上升方法求解,更新参数的公式如下:

其中:$ \alpha $是步长,函数$ h $就为上面的带参数的假设函数。

更新的过程就是梯度变化的过程,梯度就是函数变化最快的方向。首先初始化参数$ \omega $为单列的1矩阵,在算法中设置一个最大迭代次数,在这个次数内每次计算梯度,并沿此方向更新参数,直到参数达到最优活着次数达到最大。

代码分析如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def gradAscent(data, label, alpha, maxEpoches, minError):
'''
Gradient Ascent
:param data: m*n
:param label: m*1
:param alpha: parameter
:param maxEpoches: the number of epoch
:param minError: the minimum of error
:return: optimized parameters
'''
m, n = np.shape(data)
weigh = np.ones((n,1))
for i in range(maxEpoches):
h = sigmoid(data * weigh)
error = label - h # size -> m*1
if error < minError: # smaller than minError
break
# w = w + a * x^T * error
weigh = weigh + alpha * data.transpose() * error
return weigh

均方误差

度量模型性能的一种方法是计算均方误差(MSE),公式表示为:

激活函数

Sigmoid函数定义为:

决策边界

决策边界因数据的不同分为线性和非线性,由$ \omega^T x = 0 $定义。

代价函数

代价函数$ J(\omega) $是一个标量,可以用来评价模型的性能,数值越小代表模型和参数越符合训练样本。所以,训练的目的就是最小化代价函数$ J(\omega) $,而训练的过程使用的方法就是梯度下降(Gradient Descent)。在逻辑回归中最常用的代价函数是交叉熵,定义如下:

其中,$ h_\omega (x) = \frac{1}{1+e^{(-\omega^T x)}} $

梯度下降

梯度是指代价函数$ J(\omega) $对每个参数的偏导数,而偏导数的正负决定了学习过程中参数的下降方向,学习率$ \alpha $决定了每次变化的步长。之后利用偏导数和学习率进行梯度下降操作,更新其参数。假设代价函数中的参数为$ \theta $,则更新参数的过程如下: