2017-10-08 148 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引用了什麼,這不是你提供的代碼中定義的變量。 –