logistic回归
logistic回归分析可用于估计某个事件发生的可能性,这是一个分类模型而不是一个回归模型!
它的基本思想是利用一条直线将平面上的点分为两个部分,即两个类别,要解决的问题就是如何拟合出这条直线,这个拟合的过程就称之为“回归”。
logistic模型
假设你有一个需要预测的内容,要通过三个输入,x1 、x2 和 x3的某种线性组合来预测某个问题,或者说知道某件事情发生的概率 z的话,那么用 logistic 回归来表达
写成一般式:
logistic回归是处理二分类问题的,所以输出的标记y={0,1},并且线性回归模型产生的预测值z=wx+b是一个实值,所以我们将实值z转化成0/1值便可,这样有一个可选函数便是“单位阶跃函数”:
这种如果预测值大于0便判断为正例,小于0则判断为反例。
但是单位阶跃函数是非连续的函数,我们需要一个连续的函数,“Sigmoid函数”便可以很好的取代单位阶跃函数:
这样我们在原来的线性回归模型外套上sigmoid函数便形成了logistic回归模型的预测函数,可以用于二分类问题:
对上式的预测函数做一个变换为:
若将y视为样本x作为正例的可能性,则1-y便是其反例的可能性。二者的比值便被称为“几率”,反映了x作为正例的相对可能性,这也是logistic回归又被称为对数几率回归的原因!
损失函数:
在逻辑回归中,需要预测的结果 ̂可以表示为y^=σ(wTx+b),我们约定y^=p(y|x),也就是说,算法输出的y^是给定训练样本x条件下y等于1的概率。
y=1时,在给定训练样本x条件下 = ̂
y=0时,在给定训练样本x条件下 =1− ̂
因此,如果y^代表y=1的概率,那么1−y^就代表y=0的概率。将上面两个公式合二为一: ( | )= ̂**y(1− ̂)**(1-y)
当y=1时, ( | )= ̂
当y=0时, ( | )=1− ̂
损失函数(取对数是为了连乘变成连加):
我们先来看一看这个看上去很复杂的 Loss Function 能否起到衡量输出准确的作用,为了使得输出尽可能准确,我们要做的就是使得损失函数尽可能小:
1.当正确输出 y=0
y=0 时,表达式变成了公式L(ŷ,y)=−log(1−ŷ),为了使得 L(yˆ,y)
尽可能小,log(1−yˆ)就要尽可能大,也就是 1−yˆ要尽可能大,最终结果是 yˆ要尽可能小,而 yˆ∈[0,1],因此 yˆ 需要尽可能接近于0,也就是正确输出 y。
2.当正确输出 y=1时,表达式变成了公式L(ŷ,y)=−log(ŷ),为了使得 L(yˆ,y)尽可能小,log(yˆ)就要尽可能大,最终结果是 yˆ要尽可能大,而 yˆ∈[0,1],因此 yˆ需要尽可能接近于1,也就是正确输出 y。
ps:为什么要用交叉熵损失函数,而不用均方损失函数?
这是因为如果使用均方损失函数 D(yˆ,y)那么对应的 Cost 函数 J(w,b)将是非凸的,这会产生许多的局部最小值,导致在梯度下降的过程当中难以找到全局最优解。而损失函数是凸的,这就有利于我们在后面进行梯度下降。
梯度下降法:
为了使得模型的效果更好,我们需要着眼的是怎样调节 w和 b,使得 Cost Function J(w,b)尽可能小。
为了方便起见,我们暂时忽略 b,只看 w对 J(w)的影响,你将下图看到它的形态。
现在假设我们的 w取在了最低点的右侧,那么你会发现它的斜率是大于零的,也就是
那么为了减小 w,你应该用将 w 减去一个常数去乘以这个导数:
这个常数被称作学习率(Learning rate),一般记作 α,用来控制每次更新的步幅。而如果我们的 w偏小了,即取在了最低点的左侧,你会发现它的斜率是小于零的,那么用公式来更新 w就会使得 w变大,因此无论 w偏小还是偏大,我们都可以只使用公式就能够不断地优化 w,使得 J(w) 越来越小。
Logistic 回归中的梯度下降法
Logistic 回归当中的梯度下降法:
首先我们计算一下 a对于损失函数 L(a,y)的偏导数: