SdcaRegressionTrainer Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Pour IEstimator<TTransformer> entraîner un modèle de régression à l’aide de la méthode d’ascente de double coordonnée stochastique.
public sealed class SdcaRegressionTrainer : Microsoft.ML.Trainers.SdcaTrainerBase<Microsoft.ML.Trainers.SdcaRegressionTrainer.Options,Microsoft.ML.Data.RegressionPredictionTransformer<Microsoft.ML.Trainers.LinearRegressionModelParameters>,Microsoft.ML.Trainers.LinearRegressionModelParameters>
type SdcaRegressionTrainer = class
inherit SdcaTrainerBase<SdcaRegressionTrainer.Options, RegressionPredictionTransformer<LinearRegressionModelParameters>, LinearRegressionModelParameters>
Public NotInheritable Class SdcaRegressionTrainer
Inherits SdcaTrainerBase(Of SdcaRegressionTrainer.Options, RegressionPredictionTransformer(Of LinearRegressionModelParameters), LinearRegressionModelParameters)
- Héritage
Remarques
Pour créer ce formateur, utilisez Sdca ou Sdca(Options).
Colonnes d’entrée et de sortie
Les données de la colonne d’étiquettes d’entrée doivent être Single. Les données de colonne des caractéristiques d’entrée doivent être un vecteur de taille connue de Single.
Ce formateur génère les colonnes suivantes :
Nom de colonne de sortie | Type de colonne | Description |
---|---|---|
Score |
Single | Score non lié prédit par le modèle. |
Caractéristiques de l’entraîneur
Tâche d’apprentissage automatique | régression ; |
La normalisation est-elle requise ? | Oui |
La mise en cache est-elle requise ? | Non |
NuGet requis en plus de Microsoft.ML | Aucun |
Exportable vers ONNX | Oui |
Détails de l’algorithme d’apprentissage
Ce formateur est basé sur la méthode Stochastic Dual Coordinate Ascent (SDCA), une technique d’optimisation de l’état de l’art pour les fonctions objective convex. L’algorithme peut être mis à l’échelle, car il s’agit d’un algorithme d’entraînement en streaming, comme décrit dans un meilleur document KDDD.
La convergence est remplacée par l’application périodique de la synchronisation entre les variables primal et double dans un thread distinct. Plusieurs choix de fonctions de perte sont également fournis comme la perte de charnière et la perte logistique. Selon la perte utilisée, le modèle entraîné peut être, par exemple, prendre en charge la machine vectorielle ou la régression logistique. La méthode SDCA combine plusieurs des meilleures propriétés, telles que la possibilité d’effectuer un apprentissage en streaming (sans ajuster l’ensemble du jeu de données dans votre mémoire), d’atteindre un résultat raisonnable avec quelques analyses de l’ensemble du jeu de données (par exemple, voir des expériences dans ce document) et de dépenser aucun calcul sur zéro dans des jeux de données éparses.
Notez que SDCA est un algorithme d’optimisation stochastique et de streaming. Le résultat dépend de l’ordre des données d’entraînement, car la tolérance d’arrêt n’est pas suffisamment serrée. Dans l’optimisation fortement convex, la solution optimale est unique et donc tout le monde atteint finalement le même endroit. Même dans les cas non fortement convex, vous obtiendrez des solutions égales de l’exécution à l’exécution. Pour les résultats reproductibles, il est recommandé de définir « Shuffle » sur False et « NumThreads » sur 1.
Cette classe utilise la minimisation des risques empiriques (par exemple, ERM) pour formuler le problème d’optimisation basé sur les données collectées. Notez que le risque empirique est généralement mesuré en appliquant une fonction de perte sur les prédictions du modèle sur les points de données collectés. Si les données d’entraînement ne contiennent pas suffisamment de points de données (par exemple, pour entraîner un modèle linéaire dans $n$-dimensionnel, nous avons besoin d’au moins $n$ de points de données), le surfichage peut se produire afin que le modèle produit par ERM soit bon pour décrire les données d’entraînement, mais peut ne pas prédire les résultats corrects dans des événements invisibles. La normalisation est une technique courante pour atténuer ce phénomène en pénalisant l’ampleur (généralement mesurée par la fonction de norme) des paramètres de modèle. Ce formateur prend en charge la normalisation de net élastique, ce qui pénalise une combinaison linéaire de la norme L1 (LASSO), $|| \textbf{w}_c || _1$, et L2-norm (crête), $|| \textbf{w}_c || _2^2$ de normalisation pour $c=1,\dots,m$. Les normalisations L1 et L2 ont des effets différents et des utilisations complémentaires à certains égards.
Avec l’algorithme d’optimisation implémenté, la normalisation L1 peut augmenter la sparsité des poids du modèle, $\textbf{w}_1,\dots,\textbf{w}{w}_m$. Pour les jeux de données à haute dimension et éparses, si les utilisateurs sélectionnent soigneusement le coefficient de la norme L1, il est possible d’obtenir une bonne qualité de prédiction avec un modèle qui n’a que quelques poids non nuls (par exemple, 1 % des poids totaux du modèle) sans affecter sa puissance de prédiction. En revanche, la norme L2 ne peut pas augmenter la sparsité du modèle entraîné, mais peut toujours empêcher le surfichage en évitant les valeurs de paramètres volumineuses. Parfois, l’utilisation de la norme L2 conduit à une meilleure qualité de prédiction, afin que les utilisateurs puissent toujours essayer et affiner les coefficients de la norme L1 et de la norme L2. Notez que conceptuellement, l’utilisation de la norme L1 implique que la distribution de tous les paramètres de modèle est une distribution Laplace tandis que la norme L2 implique une distribution gaussienne pour elles.
Une normalisation agressive (autrement dit, l’attribution de coefficients volumineux aux termes de normalisation L1 ou L2-norme) peut nuire à la capacité prédictive en excluant les variables importantes du modèle. Par exemple, un coefficient de norme L1 très volumineux peut forcer tous les paramètres à être zéros et conduire à un modèle trivial. Par conséquent, le choix des coefficients de régularisation appropriés est important dans la pratique.
Pour plus d'informations, consultez les pages suivantes :
- Montée en puissance de l’ascente stochastique double coordonnée.
- Méthodes d’ascente de double coordonnée stochastique pour la réduction de la perte régulière.
Consultez la section Voir également pour obtenir des liens vers des exemples d’utilisation.
Champs
FeatureColumn |
Colonne de caractéristique attendue par l’entraîneur. (Hérité de TrainerEstimatorBase<TTransformer,TModel>) |
LabelColumn |
Colonne d’étiquette attendue par le formateur. Peut être |
WeightColumn |
Colonne de poids attendue par l’entraîneur. Peut être |
Propriétés
Info |
Pour IEstimator<TTransformer> entraîner un modèle de régression à l’aide de la méthode d’ascente de double coordonnée stochastique. (Hérité de StochasticTrainerBase<TTransformer,TModel>) |
Méthodes
Fit(IDataView) |
Entraîne et retourne un ITransformer. (Hérité de TrainerEstimatorBase<TTransformer,TModel>) |
GetOutputSchema(SchemaShape) |
Pour IEstimator<TTransformer> entraîner un modèle de régression à l’aide de la méthode d’ascente de double coordonnée stochastique. (Hérité de TrainerEstimatorBase<TTransformer,TModel>) |
Méthodes d’extension
AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment) |
Ajoutez un « point de contrôle de mise en cache » à la chaîne d’estimateur. Cela garantit que les estimateurs en aval seront entraînés par rapport aux données mises en cache. Il est utile d’avoir un point de contrôle de mise en cache avant les formateurs qui prennent plusieurs passes de données. |
WithOnFitDelegate<TTransformer>(IEstimator<TTransformer>, Action<TTransformer>) |
Étant donné un estimateur, retournez un objet de création de package de package qui appellera un délégué une fois Fit(IDataView) appelé. Il est souvent important pour un estimateur de retourner des informations sur ce qui a été adapté, c’est pourquoi la Fit(IDataView) méthode retourne un objet spécifiquement typé, plutôt que simplement un général ITransformer. Toutefois, en même temps, IEstimator<TTransformer> sont souvent formés en pipelines avec de nombreux objets. Nous pouvons donc avoir besoin de créer une chaîne d’estimateurs via EstimatorChain<TLastTransformer> laquelle l’estimateur pour lequel nous voulons obtenir le transformateur est enterré quelque part dans cette chaîne. Pour ce scénario, nous pouvons par le biais de cette méthode attacher un délégué qui sera appelé une fois l’ajustement appelé. |