2017-10-08 6 views
3

J'ai la formule suivante:En utilisant python et numpy pour calculer gradient de la fonction de perte régularisé

RLF

que je suis en train d'utiliser une fonction pour calculer le gradient de la fonction de perte régularisée. J'ai le dataSet, qui est un tableau de [(x(1), t(1)), ..., (x(n), t(n))], et avec les données d'entraînement n = 15.

Voici ce que j'ai à ce jour, sachant que la fonction de perte est le 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)) 

La question est, w est toujours égal à (M + 1) - alors que dans le dataSet, t est égal à 15. Cela entraîne une multiplication hors limite. Est-ce que je calcule mal la formule? De l'aide?

Répondre

1

Je crois que vous êtes en train de gâcher votre indexation sur la matrice de jeu de données. Assurez-vous également que votre tableau est effectivement défini comme un tableau et non comme une liste. Je crois que les listes indexent comme list [i] [j] et les tableaux index comme array [i, j].

Je courrais vos données objet à travers:

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

Remplacez ensuite votre boucle while avec cette boucle while:

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

Le problème avec ce que 'W' devient alors hors des limites , puisque 'w' est compris entre 1 et 15, alors que dataTrain est toujours 15. –

+0

Pour être clair, W est un vecteur de dimension (15,1) et dataSet est un vecteur de dimension (15,2)? –

+0

Et je ne suis pas sûr de ce que vous faites référence par dataTrain, ce n'est pas une variable définie dans le code que vous avez fourni. –