0

J'essaie de mettre en œuvre une solution de régression de Ridge en Python en utilisant la descente de gradient stochastique comme solveur. Mon code SGD est comme suit:Régression de crête utilisant la descente de gradient stochastique en Python

def fit(self, X, Y): 
    # Convert to data frame in case X is numpy matrix 
    X = pd.DataFrame(X) 

    # Define a function to calculate the error given a weight vector beta and a training example xi, yi 

    # Prepend a column of 1s to the data for the intercept 
    X.insert(0, 'intercept', np.array([1.0]*X.shape[0])) 

    # Find dimensions of train 
    m, d = X.shape 

    # Initialize weights to random 
    beta = self.initializeRandomWeights(d) 
    beta_prev = None 

    epochs = 0 
    prev_error = None 
    while (beta_prev is None or epochs < self.nb_epochs): 
     print("## Epoch: " + str(epochs)) 
     indices = range(0, m) 
     shuffle(indices) 
     for i in indices: # Pick a training example from a randomly shuffled set 
      beta_prev = beta 
      xi = X.iloc[i] 
      errori = sum(beta*xi) - Y[i] # Error[i] = sum(beta*x) - y = error of ith training example 
      gradient_vector = xi*errori + self.l*beta_prev 
      beta = beta_prev - self.alpha*gradient_vector 
     epochs += 1 

Les données que je teste ce n'est pas normalisée et ma mise en œuvre se termine toujours avec tous les poids étant infini, même si j'initialiser le vecteur de poids à des valeurs faibles. Ce n'est que lorsque je mets le taux d'apprentissage alpha à une très petite valeur ~ 1e-8, l'algorithme se termine avec des valeurs valides du vecteur de poids. D'après ce que je comprends, normaliser/mettre à l'échelle les entités en entrée ne fait que réduire le temps de convergence. Mais l'algorithme ne devrait pas manquer de converger dans son ensemble si les fonctionnalités ne sont pas normalisées. Est-ce que ma compréhension est correcte?

Répondre

0

Votre hypothèse n'est pas correcte.

Il est difficile de répondre à cette question, car il y a tellement de méthodes/environnements différents, mais je vais essayer de mentionner quelques points.

Normalization

  • Quand une méthode est l'échelle invariante (je pense que chaque régression linéaire n'est pas) pas que vous devriez vraiment normaliser vos données
    • Je suppose que vous qu'ignorer cela parce que de débogage/analyse
  • Normaliser vos données est non seulement pertinent pour le temps de convergence, les résultats diffèrent aussi (pensez à l'effet dans la perte-f onction; les grandes valeurs pourraient affecter beaucoup plus de perte aux petites)!

Convergence

  • Il y a sans doute beaucoup à dire au sujet de la convergence de nombreuses méthodes sur des données normalisées/non normalisées, mais votre cas est spécial:
    • théorie de la convergence de SGD seules garanties convergence vers un minimum local (= global-minimum dans votre problème convex-opt) pour certains choix d'hyper-paramètres (taux d'apprentissage et d'apprentissage-décroissance)
    • Même l'optimisation de données normalisées peut échouer avec SGD lorsque ces paramètres sont mauvais!
      • Ceci est l'un des inconvénients les plus importants de SGD; dépendance des hyper-paramètres
    • Comme SGD est basé sur des gradients et des tailles d'échelon, les données non-normalisées peuvent avoir un effet énorme sur la réalisation de cette convergence!
1

Vous pouvez vérifier à partir scikit-learn's Stochastic Gradient documentation Descente que l'un des inconvénients de l'algorithme est qu'il est sensible à la mise à l'échelle fonction. En général, les algorithmes d'optimisation basés sur les dégradés convergent plus rapidement sur les données normalisées.

En outre, la normalisation est avantageuse pour les méthodes de régression.

Les mises à jour des coefficients pendant chaque étape dépendront des plages de chaque entité. En outre, le terme de régularisation sera fortement affecté par les grandes valeurs de caractéristiques.

SGD peut converger sans normalisation des données, mais cela est subjectif pour les données à portée de main. Par conséquent, votre hypothèse n'est pas correcte.