版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WUUUSHAO/article/details/88313897
开始的话:
从基础做起,不断学习,坚持不懈,加油。
一位爱生活爱技术来自火星的程序汪
对于
Logistic
Regression,这里想详细说明下,
loss
function是怎么来的?毕竟了解一个模型最好的方式就是通过损失函数了。
我们知道线性回归的公式为:
Y=wTx+b
线性回归是做 回归 的,也就是结果输出是连续的。那怎么做类似于
[0,1]这样的分类任务呢?
机智的人们发现给线性回归加一个
activation
function,然后我们就可以做分类任务了(想吐槽分类为啥叫回归呢?可能是是从回归而来的吧!)
这个函数
sigmoid:
σ(z)=1+e−z1
sigmoid函数的图像为:
import numpy as np
import math
import matplotlib.pyplot as plt
X = np.linspace(-10,10,100)
y = [1 / (1 + math.e**(-x)) for x in X]
plt.plot(X,y)
plt.show()
输出是
(0,1)之间的值。
我们把线性回归中的
Y作为
z的话,
z=Y=wTx+b。
那我们就可以了做分类任务了(大于
0.5作为类别
1,小于
0.5作为类别
0)。
假设
sigmoid函数
σ(z),表示属于正类
1的概率,那么负类
0,我们就可以这样定义:
p(y=1∣x;w)=σ(wTx+b)=σ(z)
p(y=0∣x;w)=1−σ(z)
这个是不是很熟悉?是的就是伯努利分布(
Bernoulli
distribution).
所以我们可以合并两个式子,可得到:
扫描二维码关注公众号,回复:
5515029 查看本文章
p(y∣x)=σ(z)y(1−σ(z))1−y
上式将分类为
0和分类和
1的概率计算公式合二为一。假设分类器分类足够准确,此时对于一个样本,如果它是属于
1类,分类器求出的属于
1类的概率应该尽可能大,即
p(y=1∣x)尽可能接近
1;如果它是
0类,分类器求出的属于
0类的概率应该尽可能大,即
p(y=0∣x)尽可能接近1。
为了计算方便,我们两边取对数
logp(y∣x)=ylogσ(z)+(1−y)log(1−σ(z))
我们的目的是求出
z=wTx+b中的
w和
b,使得我们的
p(y∣x)对
0和
1类别的可能性最大,而我们的损失函数,是希望取得最大可能性的情况下损失最小,是一个求最小值的过程,所以我们在上式中加一个
− 号,来解决,所以我们的
loss
function就得到了。用极大似然估计(
Maximum
Likelihood
Estimate)的方法去极大化似然函数也就是最小化损失函数了。
令:
y
=σ(z)=σ(wTx+b)
L(y
,y)=−logp(y∣x)=−ylogy
−(1−y)log(1−y
)
自然的我们的
cost
function也就出来了(损失函数是针对一个样本的,成本函数是对所有的样本的)。
J(w,b)=m1∑i=1mL(y
,y)
Gradient
最后就是用梯度下降法去求解逻辑回归了的参数
w和
b了。
对于上式中的
log我们换成
ln也是没有任何问题的。
ok,开始我们的推导吧!
第一:先简化下我们的损失函数。
L(y
,y)=−logp(y∣x)=−ylogy
−(1−y)log(1−y
) (1)
y
=σ(z)=σ(wTx+b)
对于偏置
b我们可以看做
wb∗xb其中
xb=1,
so
y
=σ(z)=σ(wTx)
这个没问题的对吧!
σ(z)=1+e−z1
y
=σ(z)=σ(wTx)=1+e−wTx1=1+ewTxewTx (2)
上面这个也没问题对吧!
经过
(2)式的转变,我们可以将
(1)式变为:
L(θ)=−ylogy
−(1−y)log(1−y
)
L(θ)=−(ylogy
+(1−y)log(1−y
))
代入
(2)式
L(θ)=−(ylog1+ewTxewTx+(1−y)log(1−1+ewTxewTx))
然后把对数
log展开(也可写为
ln,后面展开方便)
L(θ)=−([ylogewTx−log(1+ewTx)]+(1−y)(−log(1+ewTx))
L(θ)=−(ylogewTx−log(1+ewTx)
log->
ln
L(θ)=−(ywTx−ln(1+ewTx)
ok!到目前为止简化完了。
开始求偏导:
ywTx 对
w求偏导则为
yx
ln(1+ewTx)求偏导,就要掌握复合函数的求偏导了。
ln(g(x))偏导为
gx1 乘以
g(x)的偏导。
所以就能得到:
x1+ewTxewTx
所以最终为:
δwδL(θ)=−(yx−x1+ewTxewTx)
(3)
其中
1+ewTxewTx=y
所以
(3)可以简写为:
δwδL(θ)=−x(y−y
)
单个的偏导是这样,那么总的成本函数
cost
function为:
δwδL(θ)=−N1∑i=1N[x(y−y
)]
ok, 应该没什么问题吧!,作为非科班的表示压力很大,哈哈。
对于参数
w的求导就是:
δwδL(θ)=−N1∑i=1N[x(y−y
)]
而对于参数
b呢,其实也是一样的,只不过
x此时为
1:
δwδL(θ)=−N1∑i=1N(y−y
)
最后更新
w和
b:
w=w−αδwδL(w,b)
b=b−αδbδL(w,b)
代入各自的偏导公式:
w=w+αN1∑i=1N(y−y
)x
b=b+αN1∑i=1N(y−y
)
α就是我们熟悉的 学习率 了。
谢谢
更多代码请移步我的个人
github,会不定期更新。
欢迎关注