簡體   English   中英

不同的線性回歸初始權重值收斂到不同的最小化代價值

[英]Different values of Initial weight of linear regression is converging to different minimized cost value

我已經在 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,5,9,7,11,15,19,23])

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

def cost_cal(y,w0,w1,x,m):
  diff = hypothesis(w0,w1,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,w1,alpha,x,m,y):
  cost, cost_sqr = cost_cal(y,w0,w1,x,m)
  temp0 = (alpha/m) * cost
  temp1 = (alpha/m) * np.sum(cost*x)
  w0 = w0 - temp0
  w1 = w1 - temp1
  return w0,w1

這些是我在 python 中實現的假設、成本和梯度下降函數。 當我使用初始權重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,w0,w1,x,m)
  #print(i, c[i], cs[i])
  w0, w1 = gradient_descent(w0,w1,alpha,x,m,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-pk-no-nu/local_vs.global_minima

根據給定鏈接中的圖像,如果您從位於左角的初始點開始,我們最終會到達全局最小值,如果我們從右端開始,我們最終會到達局部最小值。 成本可能會有很大差異,但在大多數情況下,在局部或全局最小值的情況下差異不是很大,因此如果成本差異很大,您需要交叉檢查一次。 隨機選擇初始權重是一種很好的做法,不應手動設置它們。

在gradient_descent函數中,temp0被分配了一個數組而不是值,該數組的總和必須在添加之前完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM