机器学习P6 逻辑回归的 损失函数 以及 梯度下降
Posted 脚踏实地的大梦想家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习P6 逻辑回归的 损失函数 以及 梯度下降相关的知识,希望对你有一定的参考价值。
逻辑回归的损失函数 以及 梯度下降
逻辑回归的损失函数
逻辑回归的 Loss
逻辑回归是一种用于二分类问题的监督学习算法,其损失函数采用交叉熵(Cross-Entropy)损失函数。
公式如下:
l
o
s
s
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
,
y
(
i
)
)
=
−
log
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
)
if
y
(
i
)
=
1
−
log
(
1
−
f
w
⃗
,
b
(
x
⃗
(
i
)
)
)
if
y
(
i
)
=
0
\\beginequation loss(f_\\mathbf\\vecw,b(\\vecx^(i)), y^(i)) = \\begincases - \\log\\left(f_\\vecw,b\\left( \\vecx^(i) \\right) \\right) & \\textif $y^(i)=1$\\\\ - \\log \\left( 1 - f_\\vecw,b\\left( \\vecx^(i) \\right) \\right) & \\textif $y^(i)=0$ \\endcases \\endequation
loss(fw,b(x(i)),y(i))=−log(fw,b(x(i)))−log(1−fw,b(x(i)))if y(i)=1if y(i)=0
简化为:
l
o
s
s
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
,
y
(
i
)
)
=
y
(
i
)
∗
(
−
l
o
g
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
)
)
+
(
1
−
y
(
i
)
)
∗
(
−
l
o
g
(
1
−
f
w
⃗
,
b
(
x
⃗
(
i
)
)
)
)
loss(f_\\vecw,b(\\vecx^(i)),y^(i))=y^(i)*(-log(f_\\vecw,b(\\vecx^(i))))+(1-y^(i))*(-log(1-f_\\vecw,b(\\vecx^(i))))
loss(fw,b(x(i)),y(i))=y(i)∗(−log(fw,b(x(i))))+(1−y(i))∗(−log(1−fw,b(x(i))))
函数图像如下:
Q:为什么逻辑回归函数不使用平方误差损失函数?
A: 由于平方误差损失函数会对预测值和真实值之间的误差进行平方,所以对于偏离目标值较大的预测值具有较大的惩罚,使用平方误差损失函数可能导致训练出来的模型过于敏感,对于偏离目标值较远的预测值可能会出现较大的误差,从而导致出现 “震荡”现象:
震荡现象: 平方误差损失函数的梯度在误差较小时非常小,而在误差较大时则非常大,这导致在误差较小时,模型参数的微小变化可能会导致损失函数的微小变化,而在误差较大时,模型参数的变化则会导致损失函数的大幅变化,从而产生了振荡现象。
震荡现象对于梯度下降来说是致命的,因为振荡现象意味着有着众多“局部最优”;而局部最优明显不是我们想要的解,因为我们希望能够最终抵达“全局最优”。
逻辑回归的 Cost
公式:
J
(
w
⃗
,
b
)
=
1
m
∑
i
=
0
m
−
1
[
l
o
s
s
(
f
w
⃗
,
b
(
x
(
i
)
)
,
y
(
i
)
)
]
J(\\vecw,b)=\\frac 1 m \\sum ^m-1 _i=0 [loss(f_\\vecw,b(x^(i)),y^(i))]
J(w,b)=m1i=0∑m−1[loss(fw,b(x(i)),y(i))]
代码:
def compute_cost_logistic(X, y, w, b):
m = X.shape[0]
cost = 0.0
for i in range(m):
z_i = np.dot(X[i],w) + b
f_wb_i = sigmoid(z_i)
cost += -y[i]*np.log(f_wb_i) - (1-y[i])*np.log(1-f_wb_i)
cost = cost / m
return cost
def sigmoid(z):
f_wb = 1/(1 + np.exp(-z))
return f_wb
逻辑回归的梯度下降
总公式
公式:
repeat until convergence:
w
j
=
w
j
−
α
∂
J
(
w
⃗
,
b
)
∂
w
j
for j := 0..n-1
b
=
b
−
α
∂
J
(
w
⃗
,
b
)
∂
b
\\beginalign* &\\textrepeat until convergence: \\; \\lbrace \\\\ & \\; \\; \\;w_j = w_j - \\alpha \\frac\\partial J(\\vecw,b)\\partial w_j \\; & \\textfor j := 0..n-1 \\\\ & \\; \\; \\; \\; \\;b = b - \\alpha \\frac\\partial J(\\vecw,b)\\partial b \\\\ &\\rbrace \\endalign*
repeat until convergence:wj=wj−α∂wj∂J(机器学习:逻辑回归(损失函数)
#
# 由于逻辑回归解决的是分类问题,而且是二分类,因此定义损失函数时也要有两类
# 1)如果 y = 1(p ≥ 0.5),p 越小,损失函数越大;
# 2)如果 y = 0(p ≤ 0.5),p 越大,损失函数越大;
# 模型变形:
# 最终的损失函数模型:
# 该模型不能优化成简单的数学表达式,只能使用梯度下降法求解;
以上是关于机器学习P6 逻辑回归的 损失函数 以及 梯度下降的主要内容,如果未能解决你的问题,请参考以下文章