本文内容主要参考了斯坦福大学吴恩达老师的Coursera课程:Deep Learning
Logistic Regression
Logistic Regression是机器学习中很经典的分类器,特别是在二分类问题中,它能够输出0、1事件发生的概率从而达到分类的效果,主要在流行病学中应用较多,比较常用的情形是探索某疾病的危险因素,根据危险因素预测某疾病发生的概率,等等。例如,想探讨胃癌发生的危险因素,可以选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群肯定有不同的体征和生活方式等。这里的因变量就是–是否胃癌,即“是”或“否”,为两分类变量,自变量就可以包括很多了,例如年龄、性别、饮食习惯、幽门螺杆菌感染等。自变量既可以是连续的,也可以是离散的。通过logistic回归分析,就可以大致了解到底哪些因素是胃癌的危险因素。国内多数的统计学教材通常称之为逻辑回归,也有的将其翻译为对数几率回归在给出模型的形式之前,我们首先考虑二分类问题,其输出值为y∈{0,1},线性回归模型产生的预测值z=wTx+b是实值,于是,我们需要将实值z转换为0/1值.一种办法就是"单阶跃函数"(unit-step function)
y=⎩⎪⎨⎪⎧0,0.5,1,z<0z=0z>0
即若预测值z大于零就判为正例,小于零则判为反例,预测值为零则可任意判别,如下图所示

不难看出,单位跃阶函数不连续,所以我们希望找到能在一定程度上近似单位跃阶函数的代替函数.于是有"Sigmoid"函数:
y=1+e−z1
它将z值转化为一个接近0或1的y值,并且其输出值在z=0附近变化很陡峭,将wTx+b代入上式,得到:
y=1+e−(wTx+b)1
损失函数
一般来讲,我们通常使用误差平方和损失函数:
J(w)=i=1∑n21(y^(zi)−yi)2
其中zi=wxi+b,但当代入sigmoid函数时,上述损失函数时是非凸函数,无法使用梯度下降方。因此考虑如下损失函数:
L(w)=−i=1∑n(yilogy^+(1−y)log(1−y^))
为什么要使用这种形式的损失函数呢?首先考虑LR的表达式:
P(y=1∣x;w)=1+e−wTx+b1P(y=0∣x;w)=1−1+e−wTx+b1
上述表达式可以改写为:
P(y∣x;w)=σ(z)y∗(1−σ(z))1−y
假定样本独立同分布,则有极大似然估计:
L(w)=i=1∏mP(yi∣xi;w)=i=1∏mσ(z)yi∗(1−σ(z))1−yi
对数似然为:
l(w)=logL(w)=i=1∑m(yi∗logσ(zi)+(1−yi)∗log(1−σ(zi)))
如果令σ(zi)=y^i就得到了之前的损失函数。且它的解是迭代式:
wj:=wj−α∗∂w∂l(w)=wj−αi=1∑m[(σ(zi)−yi)∗xi],j=0,1,…,n
同时补充一个sigmoid函数的求导:
f(x)f′(x)=1+e−x1=(1+e−x)−1=−(1+e−x)−2e−x∗−1=(1+e−x)−2e−x=(1+e−x)2e−x=(1+e−x)21+e−x−1=(1+e−x)21+e−x−(1+e−x)21=1+e−x1−(1+e−x)21=a(1−a)其中a=1+e−x1.
对损失函数的求导有:
f(x)f′(x)=−(ylog(a)+(1−y)log(1−a))=−ay+1−a1−y.