前言
我们知道,线性回归的公式是
hθ(x)=θTx
如果想实现分类功能,就需要把输出变成一个阶跃函数,比如
y={0;1;z⩽0z⩾0,z=hθ(x)
但是这样就太粗糙了,而且不连续不可微。我们希望有一个理想的阶跃函数,而且是单调可微的函数。于是找到了对数几率函数(Logistic Function)。因为曲线像S,又称Sigmoid。
定义
Sigmoid函数的定义是:
y=1+e−(θTx+b)1
接下来就是根据给定的训练集,求出参数w。首先要找到目标函数(代价函数/损失函数)。
目标函数、代价函数、损失函数,一般而言,这三个概念是一回事。
如果深究的话,有细微的差别。参考深入理解机器学习中的:目标函数,损失函数和代价函数
损失函数:计算的是一个样本的误差
代价函数:是整个训练集上所有样本误差的平均
目标函数:代价函数 + 正则化项
首先想到的就是模仿线性回归的思路,用最小二乘当损失函数。
J(θ)=i∑21(hθ(xi)− yi)2
但是,把Sigmoid带入后,会发现这是一个非凸函数,这就意味着代价函数有着许多的局部最小值,不利于求解。

后来人们想到,用极大似然函数作为损失函数,这样就是一个凸函数。

损失函数
如果将hθ(x)看做是正类的后验概率,则有
hθ(x;θ)=p(y=1∣x;θ)=ϕ(x)=1+e−(θTx+b)1
那么,有
p(y=0∣x;θ)=1−ϕ(x)
将上面两式写成一般形式(概率分布函数)
p(y∣x;θ)=hθ(x;θ)y(1−hθ(x;θ))1−y
接下来用对数极大似然估计(加上对数是为了方便求导)根据训练集估计出参数θ。
l(θ)=Log L(θ)=j=1∑M(yjln h(xj)+(1−yj)ln (1−h(xj)))
其中M是样本个数。对其求关于θ的偏导。
1)首先求hθ(x),即Sigmoid的偏导。
hθ′(X)=hθ(X)(1−hθ(X))
推导过程如下:

2)有了第一步得出的公式后,得到

3)利用梯度下降法求解参数。由于损失函数是凸函数,沿着梯度下降方向找到最小点。
之所以是梯度下降,因为偏导取了负值
① 批量梯度下降是:
Repeat until convergence{θ(t+1):=θt−ηt▽θl(θt,Z)}(1-2)
② 随机梯度下降(SGD):
Repeat until convergence{for j=1 to M,{θ(t+1):=θt−ηt▽θl(θt,Zj)}
两者的区别是:
前者每次更新θ都需要遍历一次整个样本集合;而后者在遍历样本集合的时候,每个样本都能改变θ ,有更快的收敛速度 。由于SGD针对观测到的随机一条数据进行权重的更新,很适合进行增量计算,实现梯度下降的online模式。
③ small batch梯度下降
结合了上述两点的优点,每次更新参数时仅使用一部分样本,减少了参数更新的次数,可以达到更加稳定的结果,一般在深度学习中采用这种方法。
参考:
Logistic Regression——逻辑回归算法推导
逻辑回归与最大似然估计推导