Technique de validation croisée K-Fold et ses éléments essentiels

Technique de validation croisée K-Fold et ses éléments essentiels

Introduction

Gars! Avant de commencer, jetez un œil à la visualisation ci-dessous et dites-moi quelles sont vos observations. Oui, ici nous surveillons les performances du modèle avant de passer en production. Pourquoi est-ce nécessaire pour l’espace ML ? Bien sûr, c’est une étape très importante lors de la validation de la précision du modèle, quoi que vous puissiez dire. Dans cet article, je choisis l’une des techniques intéressantes et je l’aborde en détail.

Validation croisée en K

Qu’est-ce que la performance du modèle et sa nécessité ?

L’évaluation des performances du modèle d’apprentissage automatique, c’est comme évaluer les scores, comment nous avions l’habitude d’évaluer nos plaies dans les lycées et les collèges pour répondre aux critères d’éligibilité pour obtenir les meilleurs cours ou être sélectionnés dans les entretiens sur le campus pour les entreprises pour le travail et la compensation. hors scores pour de nombreux autres examens de compétition pour être sélectionné. Donc apparemment, le score BON reconnaît le fait que le candidat est toujours bon. La même chose est attendue dans le modèle d’apprentissage automatique, et cela devrait permettre d’obtenir les résultats escomptés dans les énoncés de problèmes de prédiction/prévision/calcification. Même dans le monde ML, le modèle a été formé dans le contexte des données, du modèle et du code.

Quelle est la précision du modèle et des performances ?

La précision est le nombre juste, pour mieux comprendre un problème basé sur la prédiction qui corrige les prédictions faites par le modèle construit par l’équipe avec le nombre d’enregistrements disponibles. Nous devons donc entraîner le modèle sur différentes combinaisons de données.

Accord entre les ingénieurs ML et l’équipe commerciale

Comme nous sommes conscients qu’il existe plusieurs façons d’évaluer les performances du modèle. Comme une équipe a toujours la responsabilité de construire un modèle généralisé et qu’une certaine performance est attendue dans la production, nous devons en même temps convaincre le client et les parties prenantes de la même chose et ajouter les principaux avantages commerciaux basés sur le comité consultatif des PME. conseils pour atteindre les objectifs.

Comme nous sommes une équipe d’ingénierie ML, nous devons fournir les performances du modèle dans la plage numérique. Disons que la performance du modèle serait de 85 à 90 %. Parfois, les performances du modèle lors de la formation et des tests ne se comporteront pas de la même manière en production. Dans de nombreux cas, un surajustement ou un sous-ajustement se produira dans l’environnement de production.

Oui! Bien sûr, cela menace vraiment les scientifiques juniors des données et les ingénieurs ML, mais le défi en est un qui nécessite d’improviser vos capacités techniques, n’est-ce pas ? Ainsi, après de nombreuses itérations et une implication CI/CD (MLOps), seul le modèle atteindra la précision attendue et en mode généralisé. Un peu plus loin, nous devons toujours surveiller les performances et appliquer les modifications nécessaires à l’algorithme et au code du modèle.

Nous verrons comment nous pourrions surmonter cela dans un scénario en temps réel.

Comme je l’ai mentionné plus tôt le RANGE-Factor, nous avons différentes techniques à évaluer, dans lesquelles la validation croisée ou K – Fold Cross Validation est la meilleure et facile à comprendre. Ceci est de nature simple et implique une technique de rééchantillonnage typique, sans aucun remplacement dans les données. Et nous pouvions facilement comprendre et visualiser lors de la mise en œuvre.

Validation croisée en K

Pliage en K

Dans chaque ensemble (pli), la formation et le test seraient effectués précisément une fois pendant tout ce processus. Cela nous aide à éviter le surajustement. Comme nous le savons, lorsqu’un modèle est formé en utilisant toutes les données en un seul coup et donne la meilleure précision de performance. Résister à cette validation croisée k-fold nous aide à construire le modèle comme un modèle généralisé.

Pour réaliser cette validation croisée K-Fold, nous devons diviser l’ensemble de données en trois ensembles, formation, test et validation, avec le défi du volume des données.

Ici, l’ensemble de données Test and Train prendra en charge la construction d’évaluations de modèles et d’hyperparamètres.

Le modèle a été validé plusieurs fois sur la base de la valeur assignée en paramètre et qui s’appelle K et doit être un INTEGER.

Pour faire simple, sur la base de la valeur K, l’ensemble de données serait divisé et la formation/les tests seraient effectués de manière séquentielle égale au temps K.

Cycle de vie de la validation croisée K-Fold

Validation croisée en K

Image conçue par l’auteur

Prenons une valeur K généralisée. Si K = 5, cela signifie que, dans l’ensemble de données donné, nous nous divisons en 5 fois et exécutons le Train and Test. Au cours de chaque exécution, un pli est pris en compte pour les tests et le reste sera pour la formation et la poursuite des itérations, la représentation illustrée ci-dessous vous donnerait une idée du flux de la taille définie par le pli.

Exemple KFCV

Image conçue par l’auteur

Quel point de données est utilisé, une fois dans l’ensemble retenu et K-1 dans la formation. Ainsi, pendant l’itération complète au moins une fois, un pli sera utilisé pour les tests et le reste pour la formation.

Dans l’ensemble ci-dessus, 5- Test 20 Formation. À chaque itération, nous obtiendrons un score de précision et devrons les additionner et trouver la moyenne. Ici, nous pouvons comprendre comment les données sont réparties de manière cohérente et tirer une conclusion sur l’opportunité de la production avec ce modèle (ou) PAS.

Exemple de pliage en K

Règles du pouce associées au pli en K

Maintenant, nous allons discuter de quelques règles du pouce tout en jouant avec K – fold

  • K doit toujours être >= 2 et = au nombre d’enregistrements, (LOOCV)
    • Si 2 alors seulement 2 itérations
    • Si K=Nombre d’enregistrements dans l’ensemble de données, alors 1 pour les tests et n- pour la formation
  • La valeur optimisée pour le K est 10 et utilisée avec les données de bonne taille. (Fréquemment utilisé)
  • Si la valeur K est trop grande, cela entraînera moins de variance dans l’ensemble d’apprentissage et limitera la différence de devise du modèle entre les itérations.
  • Le nombre de plis est indirectement proportionnel à la taille de l’ensemble de données, ce qui signifie que si la taille de l’ensemble de données est trop petite, le nombre de plis peut augmenter.
  • Des valeurs plus élevées de K augmentent éventuellement le temps d’exécution du processus de validation croisée.
Règle du pouce k-fold

N’oubliez pas la validation croisée K-Fold dans le but ci-dessous dans le flux ML.

  • Sélection du modèle
  • Réglage des paramètres
  • Sélection de fonctionnalité

Jusqu’à présent, nous avons discuté du K Fold et de son mode de mise en œuvre, faisons un peu de pratique maintenant.

Exemple de base

Je crée un tableau simple, définissant la taille K comme 5 et divisant mon tableau. Utilisation de la boucle simple et impression des parties Train et Test. Ici, nous avons pu voir clairement que les points de données dans les compartiments TT et les données de test sont uniques dans chaque cycle.

Vous pouvez voir le tableau Train and Test et comment le tableau a été divisé à chaque itération.

Faisons cela avec le jeu de données.

Sélection du modèle à l’aide du pliage en K

from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
import numpy as np
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
digits = load_digits()
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(digits.data,digits.target,test_size=0.3)

bibliothèques requises importées et chiffres chargés (chiffres manuscrits – open source), appliquons un algorithme différent.

Régression logistique

J’utilise liblinear. C’est le “Grande classification linéaire » Catégorie. Il utilise un algorithme de descente de coordonnées. Cela minimiserait une fonction multivariée en résolvant l’univariée et ses problèmes d’optimisation pendant la boucle.

lr = LogisticRegression(solver="liblinear",multi_class="ovr")
lr.fit(X_train, y_train)
lr.score(X_test, y_test)

Production

Note : 0,972222

SVC

Le simple fait d’utiliser gamma est un paramètre de perspective non linéaire pour les hyperplans. La valeur du gamma essaie de s’adapter à l’ensemble de données d’apprentissage et utilise 1/n_features.

svm = SVC(gamma="auto")
svm.fit(X_train, y_train)
svm.score(X_test, y_test)

Production

Note : 0,62037

Forêt aléatoire

Pour RFC, j’attribue des estimateurs à 40.

rf = RandomForestClassifier(n_estimators=40)
rf.fit(X_train, y_train)
rf.score(X_test, y_test)

Production

Note : 0,96666

Scores de la liste d’algorithmes ci-dessus Régression logistique et Forêt aléatoire font relativement mieux que SVM.

Nous allons maintenant utiliser la fonction cross_val_score et obtenir les scores, en passant différents algorithmes avec l’ensemble de données et cv.

from sklearn.model_selection import cross_val_score

Définir la régression logistique, CV = 3

score_lr=cross_val_score(LogisticRegression(solver="liblinear",multi_class="ovr"), digits.data, digits.target,cv=3)
print(score_lr)
print("Avg :",np.average(score_lr))

Sortie : pour 3 fois, nous avons 3 scores

[0.89482471 0.95325543 0.90984975]
Avg : 0.9193099610461881

Définir SVM et CV=3

score_svm =cross_val_score(SVC(gamma=’auto’), digits.data, digits.target,cv=3)

impression(score_svm)

print(“Moy :”,np.average(score_svm))

Output: Scores
[0.38063439 0.41068447 0.51252087]
Avg : 0.4346132442960489

Définir la forêt aléatoire et CV=3

score_rf=cross_val_score(RandomForestClassifier(n_estimators=40),digits.data, digits.target,cv=3)

impression(score_rf)

print(“Moy :”,np.average(score_rf))




Output: Scores

[0.92821369 0.95325543 0.92320534]
Avg : 0.9348914858096827
Avant K Fold appliquer Après l'application du pli K (moyenne)
Régression logistique 97% 91%
SVM 62% 43%
Forêt aléatoire 96% 93%

Sur la base du tableau ci-dessus, nous irons avec Forêt aléatoire pour cet ensemble de données pour la production. Mais nous devons surveiller les performances du modèle en fonction de la dérive des données et, à mesure que l'analyse de rentabilisation change, nous devons revoir le modèle et le redéployer.

Réglage des paramètres Utilisation du pliage en K

Considérons la RandomForestClassifier pour cette analyse, et n_estimators est notre paramètre pour ce cas et CV est 10 (couramment utilisé)

scores1 = cross_val_score(RandomForestClassifier(n_estimators=5),digits.data, digits.target, cv=10)

print(“Score moyen pour les estimateurs=5 et CV=10 :”,np.average(scores1))

Production

Avg Score for Estimators=5 and CV=10 : 0.87369

scores2 = cross_val_score(RandomForestClassifier(n_estimators=20),digits.data, digits.target, cv=10)

print(“Score moyen pour les estimateurs=20 et CV=10 :”,np.average(scores2))

Production

Score moyen pour les estimateurs=20 et CV=10 : 0,93377

scores3 = cross_val_score(RandomForestClassifier(n_estimators=30),digits.data, digits.target, cv=10)

print(“Score moyen pour les estimateurs=30 et CV=10 :”,np.average(scores3))

Production

Avg Score for Estimators=30 and CV=10 : 0.94879

scores4 = cross_val_score(RandomForestClassifier(n_estimators=40),digits.data, digits.target, cv=10)

print(“Score moyen pour les estimateurs=40 et CV=10 :”,np.average(scores4))

Production

Avg Score for Estimators=40 and CV=10 : 0.94824
scores1 87,36 %
scores2 93,33 %
scores3 94,87 %
scores4 94,82 %
Based on the above observation, we will go with Estimators=30.

Pliage en K sous forme visuelle

La représentation visuelle est toujours la meilleure preuve pour toutes les données situées sur les axes.

depuis sklearn.model_selection importer cross_val_score

knn = KNeighborsClassifier(n_neighbors=5)
scores = cross_val_score(knn, X, y, cv=10, scoring='accuracy')
print(scores.mean())

Production

0.9666666666666668
k_range = list(range(1, 25))
k_scores = []
for k in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)
    scores = cross_val_score(knn, X, y, cv=10, scoring='accuracy')
    k_scores.append(scores.mean())
print(k_scores)

Production

[0.96, 0.95333, 0.96666, 0.96666, 0.966668, 0.96666, 0.966666, 0.966666, 0.97333, 0.96666, 0.96666, 0.97333, 0.9800, 0.97333, 0.97333, 0.97333, 0.97333, 0.98000, 0.9733333, 0.980000, 0.966666, 0.96666, 0.973333, 0.96, 0.96666, 0.96, 0.96666, 0.953333, 0.95333, 0.95333]
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(k_range, k_scores)
plt.xlabel('Value of K for KNN')
plt.ylabel('Cross-Validated-Accuracy')

Sortie : Avec un tracé simple, X => valeur de K et Y => Précision pour le CV respectif

Formulaire visuel KFCV

La représentation visuelle ci-dessus nous aide à comprendre que la précision est d'environ 98 % pour K = 12, 18 et 19 pour KNN.

Conclusion

Gars! jusqu'à présent, nous avons discuté de divers aspects de la technique de validation croisée K-Fold et de son importance dans le modèle d'apprentissage automatique pour la production et la sélection des paramètres avec un exemple classique. J'espère que cet article vous aidera tous à mieux comprendre ce sujet. Si vous me demandez si nous avons des inconvénients à cela, ma réponse serait Oui ! Ce n'est rien d'autre que lent à exécuter qu'une formation et des tests simples. Malgré ce petit inconvénient, la validation croisée K Fold joue un rôle essentiel dans le monde de l'apprentissage automatique.

Merci pour votre temps. Sera en contact avec des sujets intéressants sous peu. Au revoir! – Shanthababu.

Leave a Comment