2017-10-08 47 views
3

的梯度,我有以下公式:使用Python和numpy的计算规则化损失函数

RLF

,我试图在函数中使用计算正则损失函数的梯度。我有dataSet,这是一个[(x(1), t(1)), ..., (x(n), t(n))]的数组,并与训练数据n = 15

这里是我到目前为止,明知损失函数是vector here.

def gradDescent(alpha, t, w, Z): 
    returned = 2 * alpha * w 
    y = [] 
    i = 0 
    while i < len(dataSet): 
     y.append(dataSet[i][0] * w[i]) 
     i+= 1 
    return(returned - (2 * np.sum(np.subtract(t, y)) * Z)) 

的问题是,w总是等于(M + 1) - 而在dataSett等于15。这导致了无限乘法。我计算公式是否错误?任何帮助?

回答

1

我相信你搞乱了数据集数组的索引。还要确保你的数组实际上被定义为一个数组而不是一个列表。我相信列表索引像list [i] [j]和数组索引像array [i,j]。

因此,我将运行数据对象通过:

import numpy as np 
dataSet=np.asarray(dataSet) 

然后用这个while循环替换while循环:

while i < len(dataSet): 
     y.append(dataSet[i,0] * w[i]) 
     i+= 1 
+0

有这个问题是'w'就变成出界,因为'w'在1-15之间,而dataTrain总是15. –

+0

要清楚W是维(15,1)的向量,dataSet是维(15,2)的向量? –

+0

我不确定你通过dataTrain引用了什么,这不是你提供的代码中定义的变量。 –