【发布时间】:2021-04-30 17:35:48
【问题描述】:
我正在尝试编写一个代码,该代码使用梯度下降返回岭回归的参数。岭回归定义为
其中,L 是损失(或成本)函数。 w 是损失函数的参数(同化 b)。 x 是数据点。 y 是每个向量 x 的标签。 lambda 是一个正则化常数。 b 是截距参数(被同化到 w 中)。所以,L(w,b) = 数字
我应该实现的梯度下降算法如下所示:
哪里∇ 是 L 相对于 w 的梯度。 η
是步长。 t 是时间或迭代计数器。
我的代码:
def ridge_regression_GD(x,y,C):
x=np.insert(x,0,1,axis=1) # adding a feature 1 to x at beggining nxd+1
w=np.zeros(len(x[0,:])) # d+1
t=0
eta=1
summ = np.zeros(1)
grad = np.zeros(1)
losses = np.array([0])
loss_stry = 0
while eta > 2**-30:
for i in range(0,len(y)): # here we calculate the summation for all rows for loss and gradient
summ=summ+((y[i,]-np.dot(w,x[i,]))*x[i,])
loss_stry=loss_stry+((y[i,]-np.dot(w,x[i,]))**2)
losses=np.insert(losses,len(losses),loss_stry+(C*np.dot(w,w)))
grad=((-2)*summ)+(np.dot((2*C),w))
eta=eta/2
w=w-(eta*grad)
t+=1
summ = np.zeros(1)
loss_stry = 0
b=w[0]
w=w[1:]
return w,b,losses
输出应该是截距参数b,向量w和每次迭代的损失,loss。
我的问题是,当我运行代码时,w 和损失的值都在增加,两者的顺序都是 10^13。
如果您能帮助我,将不胜感激。如果您需要更多信息或说明,请提出要求。
注意:此帖子已从交叉验证论坛中删除。如果有更好的论坛可以发布,请告诉我。
【问题讨论】:
标签: python numpy machine-learning gradient-descent