Quelle est la différence entre le classificateur SGD et le régresseur SGD dans python sklearn? Pouvons-nous également définir la taille des lots pour des performances plus rapides?
3 Réponses :
Eh bien, c'est dans le nom. SGD Classifier est un modèle optimisé (entraîné) à l'aide de SGD (prenant le gradient de la perte de chaque échantillon à la fois et le modèle est mis à jour en cours de route) dans les problèmes de classification. Il peut représenter une variété de modèles de classification (SVM, régression logistique ...) qui est définie avec le paramètre loss
. Par défaut, il représente SVM linéaire. SGD Regressor est un modèle optimisé (entraîné) à l'aide de SGD pour les tâches de régression. Il s'agit essentiellement d'un modèle linéaire qui est mis à jour en cours de route avec un taux d'apprentissage décroissant.
SGD {Stochastic Gradient Descent} est une méthode d'optimisation utilisée par des algorithmes ou des modèles d'apprentissage automatique pour optimiser la fonction de perte.
Dans la bibliothèque scikit-learn, ces modèles SGDClassifier
et SGDRegressor
, ce qui pourrait vous amener à penser que SGD est un classificateur et un régresseur.
Mais ce n'est pas le cas.
SGDClassifier code > - il s'agit d'un classificateur optimisé par SGD
SGDRegressor
- il s'agit d'un régresseur optimisé par SGD.
La descente de gradient stochastique {SGD} ne prend pas en charge le lot, il prend un seul exemple d'entraînement à la fois contrairement à {batch} Descente de gradient Exemple d'utilisation de l'ajustement partiel de sklearn from sklearn.linear_model import SGDClassifier
import random
clf2 = SGDClassifier(loss='log') # shuffle=True is useless here
shuffledRange = range(len(X))
n_iter = 5
for n in range(n_iter):
random.shuffle(shuffledRange)
shuffledX = [X[i] for i in shuffledRange]
shuffledY = [Y[i] for i in shuffledRange]
for batch in batches(range(len(shuffledX)), 10000):
clf2.partial_fit(shuffledX[batch[0]:batch[-1]+1], shuffledY[batch[0]:batch[-1]+1], classes=numpy.unique(Y))
Merci, cela efface mon doute :) mais y a-t-il un module dans Sklearn pour implémenter la descente de gradient Minibatch? Puisque SGD prend du temps
Le fait que SGD ne prend pas en charge les lots n'est généralement pas vrai, bien que cela soit vrai pour l'implémentation scikit-learn; en pratique et pour la plupart des frameworks, SGD signifie implicitement minibatch SGD ...
si vous avez un ensemble de données volumineux, qui ne peut pas tenir dans la mémoire, vous devez utiliser le partial_fit , il y a un concept dans sk-learn. J'ai mis à jour ma réponse avec l'exemple de code.
Le classificateur prédit à quelle classe appartiennent certaines données.
this picture with 99% of probability is a cat
Le régresseur prédit généralement la probabilité à quelle classe il appartient
this picture is a cat (not a dog)