引入逻辑回归
Logistic回归常用于分类问题,其实质就是在线性回归函数的基础上加上了sigmoid函数,将线性回归预测到的值压缩成为了一个概率,根据这个概率我们就可以得到分类结果。
在损失函数方面,Logistic回归没有使用欧式距离来衡量误差,而使用了交叉熵函数(crossentropy)。
算法流程
1.线性回归
先对数据进行线性回归,输入值为 x n x_{n} xn,输出值为 y n y_{n} yn
y n = ∑ i = 1 p r o p e r t y x i w i + b y_{n}=\sum ^{property}_{i=1}x_{i}w_{i}+b yn=∑i=1propertyxiwi+b
2.sigmoid函数压缩回归值
将回归结果送进sigmoid函数
f n = 1 1 + e − y n f^{n}=\dfrac{1}{1+e^{-y^{n}}} fn=1+e−yn1
3.损失函数
P为label,是一个概率分布,常用one_hot编码。例如针对3分类问题而言,若样本属于第一类,则P为(1,0,0),若属于第二类,则P为(0,1,0),若属于第三类,则为(0,0,1)。即所属的类概率值为1,其他类概率值为0。Q为模型得出的概率分布,可以是(0.1,0.8,0.1)等。
损失函数定义为: L o s s k = ∏ n = 1 k P n Q n Loss_{k}=\prod ^{k}_{n=1}P_{n}Q_{n} Lossk=∏n=1kPnQn
但是我们为了求导得方便,对其求对数。为了满足Loss越小越好的的习俗,对其求负。
最终的损失函数为: L o s s k = − ∑ n = 1 k P n l n Q n Loss_{k}=-\sum ^{k}_{n=1}P_{n}lnQ_{n} Lossk=−∑n=1kPnlnQn
对于二分类问题就损失函数比较简单了: ( y ^ n \widehat{y}_{n} y n为1或0,表示属不属于这个类)
L o s s k = − ∑ n = 1 k [ y ^ n ln f n + ( 1 − y ^ n ) ln ( 1 − f n ) ] Loss_{k}=-\sum^{k}_{n=1}\left[ \widehat{y}_{n}\ln f_{n}+\left( 1-\widehat{y}_{n}\right) \ln \left( 1-f_{n}\right) \right] Lossk=−∑n=1k[y nlnfn+(1−y n)ln(1−fn)]
4.梯度更新
接着就到重头戏了。众所周知,不管线性回归还是Logistic回归,其关键和核心就在于通过误差的反向传播来更新参数,进而使模型不断优化。
直接放下求导后的结果(LaTex太麻烦了~逃:(
∂ L o s s n ∂ w i = − ∑ n = 1 k x i ( y ^ n − f n ) \dfrac{\partial Loss_{n}}{\partial w_{i}}=-\sum ^{k}_{n=1}x_{i}\left( \widehat{y}_{n}-f_{n}\right) ∂wi∂Lossn=−∑n=1kxi(y n−fn)
∂ l o s s n ∂ b = − ∑ n = 1 k ( y ^ n − f n ) \dfrac{\partial loss_{n}}{\partial b}=-\sum ^{k}_{n=1}\left( \widehat{y}_{n}-f_{n}\right) ∂b∂lossn=−∑n=1k(y n−fn)