微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

线性回归的初始权重的不同值正在收敛到不同的最小成本值

如何解决线性回归的初始权重的不同值正在收敛到不同的最小成本值

我已经在python中实现了单变量线性回归。代码如下:

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1,2,4,3,5,7,9,11])
y = np.array([3,11,15,19,23])

def hypothesis(w0,w1,x):
  return w0 + w1*x

def cost_cal(y,w0,x,m):
  diff = hypothesis(w0,x)-y
  diff_sqr = np.square(diff)
  total_cost = np.sum(diff)
  total_cost_sqr = (1/(2*m)) * np.sum(diff_sqr)
  return total_cost,total_cost_sqr

def gradient_descent(w0,alpha,m,y):
  cost,cost_sqr = cost_cal(y,m)
  temp0 = (alpha/m) * cost
  temp1 = (alpha/m) * np.sum(cost*x)
  w0 = w0 - temp0
  w1 = w1 - temp1
  return w0,w1

这些是我在python中实现的假设,成本和gradient_descent函数。当我使用初始权重w0 = 0w1 = 0时,我的最小成本为0.12589726000013188。但是,如果我初始化w0 = -1w1 = -2,则最小化成本为0.5035890400005265。使用不同的初始权重值而产生不同的最低成本的原因是什么?作为误差函数MSE,是凸函数,它不应该达到全局最小值吗?我在做错什么吗?

w0=0
w1=0
alpha =0.0001
m = 8
z = 5000
c = np.zeros(z)
cs = np.zeros(z)
w0_arr=np.zeros(z)
w1_arr=np.zeros(z)
index = np.zeros(z)
i = 0

while (i<z):
  index[i] = i
  c[i],cs[i] = cost_cal(y,m)
  #print(i,c[i],cs[i])
  w0,w1 = gradient_descent(w0,y)
  w0_arr[i],w1_arr[i] = w0,w1
  i=i+1

inc = np.argmin(cs)
print(inc)
print(cs[inc])

解决方法

答案可能因您在体重空间中选择的初始向量而异。除了成本函数是凸的事实之外,曲线还具有许多关键点,因此它完全取决于初始点或权重,无论是局部极小值还是全局极小值,我们最终得出的结果。

图片链接 https://1.bp.blogspot.com/-ltxplazySpc/XQG4aprY2iI/AAAAAAAABVo/xAqLIln9OWkig5rq4AU2sBFuPBuxW5CFQCLcBGAs/w1200-h630-p-k-no-nu/local_vs_global_minima.PNG

根据给定链接中的图像,如果u从左角的初始点开始,则最终以全局最小值着陆;如果从右端开始,则最终以局部最小值着陆。成本可能相差很大,但是在大多数情况下,对于局部或全局最小值而言,相差不是很大,因此,如果成本相差很大,则需要进行一次核对。随机选择初始权重是一个好习惯,不应手动设置。

在gradient_descent函数中,为temp0分配了一个数组而不是值,必须在添加之前完成该数组的总和。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。