Je souhaite obtenir des informations sur une formation complète concernant le thème DIVI dispensé
par un organisme de formation certifié par l’état.
Que la formation soit finançable par mon CPF (idéalement) ou autre


4. Pipeline Model Builder

Au bout du première partie de cette sérieNous avions un pipeline de prétraitement prêt à charger des données et à concentrer les fonctionnalités sélectionnées pour l’entraînement sur une fonctionnalité spécifique appelée Fonctionnalités, et une fonctionnalité cible appelée Étiquette, qui sert de catégorie dans laquelle les fonctionnalités sélectionnées sont classées. Si nous n’avons pas de colonne comme « Label » dans notre ensemble de données, nous devons annoter le champ cible suivant (pour un autre problème, nous pouvons avoir une fonction objective différente que nous devons annoter):

[ColumnName("Label")]
public string Source { get; set; }

VOIR ÉGALEMENT: Introduction au logiciel Fuzzing – Partie de l’IA et du ML dans DevOps

Réduction dimensionnelle

Notre intuition nous dit, du point de vue de la prédiction du modèle d’apprentissage automatique, que nous avons besoin d’autant de fonctions que possible. Cependant, du point de vue des performances, nous avons besoin du moins possible pour résoudre notre problème. En effet, un modèle d’apprentissage automatique plus rapide est parfois préférable à un modèle plus puissant. La matrice de corrélation n’est qu’un moyen de décider des caractéristiques à conserver pour les modèles de classification et de régression. Un autre moyen est le PFI (Permutation Feature Importance).

Contexte ML

Avant de passer à la création du pipeline de formation, permettez-moi de vous présenter le conteneur de catalogue MLContext. Dans cet objet, nous trouvons tous les formateurs, chargeurs de données, transformateurs de données et prédicteurs qui sont utilisés pour une variété de tâches, par ex. B. Régression, classification, etc. Beaucoup d’entre eux font partie de packages NuGet supplémentaires pour faciliter la conservation des bibliothèques principales. Le paramètre Seed est utile (par exemple pour les tests unitaires) lorsque vous voulez un comportement déterministe car il est utilisé par les séparateurs et certains formateurs.

Qu’est-ce qu’un formateur ML?

Il existe plusieurs algorithmes de formation disponibles en tant que formateurs pour chaque type de tâche ML.NET, qui peuvent être trouvés dans les catalogues de formateurs correspondants. Par exemple, la double ascension coordonnée stochastique utilisée dans cet article est disponible en tant que Sdca (pour la régression), SdcaNonCalibrated et SdcaLogisticRegression (pour la classification binaire) et SdcaNonCalibrated et SdcaMaximumEntropy (pour la classification multiple).

Revenons au pipeline de prétraitement qui a été créé dans le première partie de cet article::

var featureColumns = new string[] { "Temperature", "Luminosity", "Infrared", "Distance" };
var preprocessingPipeline = mlContext.Transforms.Conversion.MapValueToKey("Label")
  .Append(mlContext.Transforms.Concatenate("Features", featureColumns));

Nous pouvons maintenant passer à autre chose en élargissant le pipeline et en choisissant un formateur.

var trainingPipeline = preprocessingPipeline.Append(mlContext.MulticlassClassification.Trainers.SdcaNonCalibrated("Label", "Features"));

Nous n’avons pas terminé tant que nous n’avons pas effectué le post-traitement, qui dans notre cas assigne simplement la clé à la valeur pour rendre la prédiction lisible pour les humains (voir ci-dessus, l’affectation de la valeur à la clé dans le pipeline de prétraitement).

var postprocessingPipeline = trainingPipeline.Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"));

Y a-t-il suffisamment de pipeline de formation pour construire le modèle? Bien sûr que non, nous devons entrer des données pour entraîner le modèle. Veuillez garder cela à l’esprit jusqu’à ce que nous vous appelions Ajuster Avec notre méthode de pipeline, nous n’obtenons aucune donnée du chargeur autre que le schéma. C’est parce que le DataView est lent à charger (vous pouvez le considérer comme Linq IEnumerable).

var model = postprocessingPipeline.Fit(trainingData);

Poids et préjugés

À la base, un formateur est un algorithme générique qui est capable d’adapter ses poids et ses préjugés aux données grâce à la formation. Plus il y a de données, meilleure est la coordination.

VBuffer[] weights = default;
model.Model.GetWeights(ref weights, out int numClasses);
var biases = model.Model.GetBiases();

5. Model Builder et ML automatisé

La première préoccupation d’un développeur en matière d’apprentissage automatique est peut-être de choisir un bon formateur, mais cela ne devrait pas être une tâche purement scientifique. ML.NET comprend une excellente technologie appelée Automated ML (AutoML) qui se décline dans une variété de saveurs telles que:

  • Outil d’interface utilisateur de Visual Studio (Un assistant intégré appelé Model Builder pour générer du code prêt à l’emploi)
  • Outil CLI ML.NET (Vous pouvez l’installer en tant qu’outil global et, une fois installé, attribuer une tâche d’apprentissage automatique et un ensemble de données d’entraînement. Il génère un modèle ML.NET et le code C # à exécuter pour utiliser le modèle dans votre application.)

mlnet regression --dataset "sensors_data.csv" --train-time 600

  • code (Vous pouvez l’intégrer dans votre code)
var experimentResult = Context.Auto()
  .CreateMulticlassClassificationExperiment(ExperimentTime)
  .Execute(trainingDataView);
var bestRun = experimentResult.BestRun;
var model = bestRun.Model;

6. Mesure de la qualité du modèle

Vérifiez le modèle

J’ai déjà mentionné les performances du modèle à quelques reprises, mais comment mesurer cela? Une technique de validation bien connue est la validation croisée (Fig. 1 et 2), avec laquelle les hyperparamètres peuvent être définis. Un hyperparamètre est un paramètre avec lequel le processus d’apprentissage est contrôlé. Nous pouvons le trouver dans la signature de méthode d’un formateur et le modifier. Les paramètres du modèle sont internes au modèle et peuvent être appris directement à partir des données d’entraînement, mais les hyperparamètres ne le peuvent pas.

var crossValidationResults = mlContext.MulticlassClassification.CrossValidate(trainingData, postprocessingPipeline, numberOfFolds: 5, labelColumnName: "Label");
apprentissage automatique

Fig.1: Validation croisée

La cohérence du modèle est vérifiée lors de la validation croisée. C’est fondamentalement:

  1. Divise l’ensemble de données en k sous-ensembles de données (plis)
  2. Entraîne le modèle sur k – 1 plis et laisse un pli pour le test
  3. Évalue le modèle lors du test du pli
  4. Répétez les étapes précédentes pour un autre ensemble de plis k – 1 afin que le pli de test soit différent des plis de test précédemment utilisés
  5. Calcule les métriques moyennes, l’écart type et l’intervalle de confiance

Veuillez noter que la validation croisée prend beaucoup de temps car le modèle est entraîné k fois. Nous ne devrions pas trop nous en soucier car cela ne se fait pas en production. Plus important encore, c’est un bon choix lorsque les données disponibles sont limitées, car la validation croisée réutilise les données de l’ensemble de données d’entraînement.

apprentissage automatique

Fig.2: Validation croisée

PFI (signification de la caractéristique de permutation)

En mélangeant de manière aléatoire les données de l’ensemble de données une par une, nous mesurons l’importance d’une entité en calculant l’augmentation de l’erreur de prédiction du modèle après avoir permuté l’entité. Un changement majeur indique une caractéristique plus importante afin que nous puissions sélectionner les caractéristiques les plus importantes (en mettant l’accent sur l’utilisation d’un sous-ensemble de caractéristiques plus significatives) pour construire notre modèle. De cette façon, nous pouvons potentiellement réduire le bruit et le temps d’exercice.

apprentissage automatique

Fig.3: Signification de la fonction de permutation

L’ajout d’une fonctionnalité hautement corrélée est susceptible de diminuer l’importance de la fonctionnalité associée. dans le figure 3 Nous pouvons voir que les caractéristiques du jour et de l’heure, et peut-être même la distance, peuvent être supprimées sans affecter sensiblement les performances du modèle.

var transformedData = model.Transform(trainingData);
var linearPredictor = model.LastTransformer;
var permutationMetrics = mlContext.MulticlassClassification.PermutationFeatureImportance(linearPredictor, transformedData);

Évaluez le modèle

L’évaluation a des paramètres similaires à la validation, mais ils diffèrent considérablement en termes de portée. L’évaluation est effectuée sur la base de l’ensemble de données de test, qui a été mis de côté lorsque l’ensemble de données d’origine a été fractionné et n’a pas du tout participé au processus de formation (Lâche. 4e).

var predictions = model.Transform(testingData);
var metrics = mlContext.MulticlassClassification.Evaluate(predictions, "Label", "Score", "PredictedLabel");
apprentissage automatique

Fig.4: Évaluation

normalisation

La première impulsion est de prendre en compte que les effets (ou le poids si vous le souhaitez) de chacune des caractéristiques du modèle sont les mêmes. Quel que soit leur type (textes, catégories, simple, double) pour l’apprentissage automatique, ce sont tous des nombres et bien sûr 0,1 ou 100 ont des effets différents, ils doivent donc être normalisés. Si nous ratons la normalisation de nos fonctions, nous risquons de former un mauvais modèle.

Certains formateurs ne nécessitent pas de normalisation explicite (ils normalisent implicitement les fonctions), alors que d’autres le font. Heureusement, nous n’avons pas besoin de connaître l’algorithme pour décider cela car nous pouvons trouver la description d’un entraîneur dans la documentation officielle.

var preprocessingPipeline = mlContext.Transforms.Conversion.MapValueToKey("Label")
  .Append(mlContext.Transforms.CustomMapping<CustomInputRow, CustomOutputRow>
    (CustomMappings.IncomeMapping, nameof(CustomMappings.IncomeMapping)))
  .Append(mlContext.Transforms.Concatenate("Features", featureColumns))
  .Append(mlContext.Transforms.NormalizeMinMax("Features"));

Jetons un coup d’œil aux diagrammes de boîtes à moustaches avant et après la normalisation et comparons la distance avec la température (Lâche. 5). La distance a un impact plus important sur le modèle avant la normalisation.

apprentissage automatique

Fig.5: Diagrammes avant et après normalisation

Mesures d’évaluation

Micro-précision regroupe les contributions de toutes les classes pour calculer la métrique moyenne. Plus il est proche de 1,00, mieux c’est. Pour une tâche de classification multi-classes, la micro-précision est préférée à la macro-précision si vous pensez qu’il existe un déséquilibre de classe.

Précision macro est la précision moyenne au niveau de la classe. La précision pour chaque classe est calculée et la précision macro est la moyenne de ces précisions. Plus il est proche de 1,00, mieux c’est.

Perte de journal mesure la performance d’un modèle de classification où l’entrée prédictive est une valeur de probabilité comprise entre 0,00 et 1,00. Plus il est proche de 0,00, mieux c’est. L’objectif de nos modèles d’apprentissage automatique est de minimiser cette valeur.

Perte de journal La réduction peut être interprétée comme un avantage du classifieur par rapport à une prédiction aléatoire. Va de -inf à 1,00, 1,00 étant des prédictions parfaites et 0,00 étant des prédictions moyennes. Par exemple, si la valeur est égale à 0,20, cela peut être interprété comme «la probabilité d’une prédiction correcte est de 20% supérieure à une estimation par hasard».

Matrice de confusion

Avec la micro-précision, la macro-précision et la perte logarithmique, nous pouvons mesurer la matrice de confusion. L’ensemble de données de test nous permet de faire des prédictions et de comparer les résultats prévus avec les résultats réels et de les organiser dans une matrice de confusion (Lâche. 6e).

var metrics = mlContext.MulticlassClassification.Evaluate(predictions, Label, Score, PredictedLabel);
Console.WriteLine(metrics.ConfusionMatrix.GetFormattedConfusionTable());
apprentissage automatique

Fig.6: matrice de confusion

Dans le diagramme précédent, nous pouvons voir que la classe FlashLight a été prédite correctement (en tant que source FlashLight) 66 fois, de manière incorrecte en tant que balise unique, et une fois plus légère, ce qui donne un taux de précision de 0,9706.

VOIR ÉGALEMENT: Comment créer un chatbot – tout ce que vous devez savoir

7. Enregistrez le modèle

Après avoir expérimenté différentes fonctions, formateurs et paramètres pour créer un modèle d’apprentissage automatique, choisissons celui qui répond le mieux à nos besoins. Très probablement, nous aurons besoin du modèle dans un scénario de production, nous devons donc avoir le modèle dans un fichier physique au format natif (ML.NET) ou au format ONNX (un format portable développé par Microsoft et Facebook et adopté par d’autres grandes entreprises. ) joueur retenu aussi). Sans surprise, lorsque vous regardez le fichier (pour le format natif), vous remarquez qu’il s’agit d’un fichier zip avec des fichiers texte contenant des nombres.

Pour enregistrer le modèle au format natif:

mlContext.Model.Save(model, trainingData.Schema, MODEL_PATH);

Pour enregistrer le modèle au format ONNX:

using (var stream = System.IO.File.Create(ONNX_MODEL_PATH))
mlContext.Model.ConvertToOnnx(model, trainingData, stream);

Chargez le modèle natif:

var trainedModel = mlContext.Model.Load("model.zip", var out modelSchema);



Source link

Recent Posts