1、为什么想到逻辑回归这种思想?
逻辑回归的前身为线性回归,线性回归可能输出很大范围的数,如从负无穷到正无穷。线性回归的拟合不好,比如无法抗噪声、无法消除冒尖变量的影响。所以在线性回归的基础上进行提升,将线性回归输出的数压缩到0-1之间,这样输出的值可被解释为“可能性”。实现这种功能只要在输出加一个logistic函数。(LR属于广义线性回归模型)
2、前提
需要知道sigmoid函数,将它与概率联系起来。
(知乎)https://www.zhihu.com/question/47744216?from=profile_question_card
用生物学角度考虑sigmoid函数。
假设sigmoid函数如下:
其中 z=w⋅xT,w=(w1,w2,...,wn),x=(x1,x2,...,xn)
3、具体推导
①假设有n个独立的训练样本
(x1,y1),(x2,y2),...,(xn,yn),y={0,1}
那么每一个观察到的样本
(xi,yi)
出现的概率是:
P(xi,yi)=P(yi=1|xi)yi(1−P(yi=1|xi))(1−yi)
②利用极大似然。
整个样本集,也就是n个独立的样本出现的似然函数为(因为每个样本都是独立的,所以n个样本出现的概率就是他们各自出现的概率相乘):
L(Θ)=∏P(yi|xi)yi(1−P(yi=1|xi))(1−yi)
③对数转换,然后对
Θ
求导
L(Θ)=∏P(yi|xi)yi(1−P(yi=1|xi))(1−yi)
=∑ni=1yilogp(yi=1|xi)+(1−yi)log(1−p(yi=1|xi))
=∑ni=1yilogp(yi=1|xi)1−p(yi=1)|xi+∑ni=1log(1−p(yi=1|xi))
=∑ni=1yi(θ0+θ1x1+...+θmxm)+∑nilog(1−p(yi=1|xi))
=∑ni=1yi(θTxi)−∑nilog(1+eθTxi)
这时候,用
L(θ)
对
θ
求导,得到:
④使得导数为0
发现没办法直接求得,所以引入梯度下降
4、梯度下降
①普通梯度下降
②随机梯度下降
对于随机梯度下降算法,做两处改动来避免普通梯度下降可能产生的波动问题
1)在每次迭代时,调整更新步长 α 值。对着迭代的进行, α 越来越小,这会缓解系数的高频波动。当然,为了避免 α 随着迭代不断缩小到接近0(这时候,系数几乎没有调整,那么迭代也没有意义了),约束 α 一定大于一个稍微大点的常数项。
2)每次迭代,改变样本的优化顺序。也就是随机选择样本来更新回归系数。这样做可以减少周期性的波动,因为样本顺序的改变,使得每次迭代不再形成周期性。