机器学习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(1fw ,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))))+(1y(i))(log(1fw ,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=0m1[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αwjJ(

机器学习:逻辑回归(损失函数)

# 由于逻辑回归解决的是分类问题,而且是二分类,因此定义损失函数时也要有两类

  # 1)如果 y = 1(p ≥ 0.5),p 越小,损失函数越大;

  # 2)如果 y = 0(p ≤ 0.5),p 越大,损失函数越大;

技术分享图片

# 模型变形:

技术分享图片

技术分享图片

 

# 最终的损失函数模型:

技术分享图片

  # 该模型不能优化成简单的数学表达式,只能使用梯度下降法求解;

 

以上是关于机器学习P6 逻辑回归的 损失函数 以及 梯度下降的主要内容,如果未能解决你的问题,请参考以下文章

机器学习100天(十七):017 逻辑回归梯度下降

机器学习:逻辑回归(损失函数)

机器学习线性回归优化损失函数

机器学习之回归算法

机器学习线性回归的损失和优化

机器学习:随机梯度下降法(线性回归中的应用)