[PYTHON] [Français] scikit-learn 0.18 Tutorial Tutoriel d'apprentissage statistique pour le traitement des données scientifiques Sélection du modèle: sélection de l'estimateur et de ses paramètres

traduction google de http://scikit-learn.org/stable/tutorial/statistical_inference/model_selection.html Table des matières du didacticiel scikit-learn 0.18 Tableau du didacticiel d'apprentissage statistique pour le traitement des données scientifiques Page précédente du tutoriel

Sélection du modèle: sélection de l'estimateur et de ses paramètres

Score, score à validation croisée

Comme nous l'avons vu, tous les estimateurs exposent une méthode de «score» qui peut déterminer la qualité d'ajustement (ou de prédiction) des nouvelles données. Plus c'est grand, mieux c'est.

>>> from sklearn import datasets, svm
>>> digits = datasets.load_digits()
>>> X_digits = digits.data
>>> y_digits = digits.target
>>> svc = svm.SVC(C=1, kernel='linear')
>>> svc.fit(X_digits[:-100], y_digits[:-100]).score(X_digits[-100:], y_digits[-100:])
0.97999999999999998

Pour obtenir une meilleure mesure de la précision prédictive (qui peut être utilisée comme proxy pour l'ajustement du modèle), nous pouvons continuellement diviser les données dans les plis que nous utilisons pour la formation et les tests.

>>> import numpy as np
>>> X_folds = np.array_split(X_digits, 3)
>>> y_folds = np.array_split(y_digits, 3)
>>> scores = list()
>>> for k in range(3):
...     # We use 'list' to copy, in order to 'pop' later on
...     X_train = list(X_folds)
...     X_test  = X_train.pop(k)
...     X_train = np.concatenate(X_train)
...     y_train = list(y_folds)
...     y_test  = y_train.pop(k)
...     y_train = np.concatenate(y_train)
...     scores.append(svc.fit(X_train, y_train).score(X_test, y_test))
>>> print(scores)
[0.93489148580968284, 0.95659432387312182, 0.93989983305509184]

C'est ce qu'on appelle la validation croisée de KFold.

Générateur de validation croisée

scikit-learn a une collection de classes qui peuvent être utilisées pour générer une liste d'index de formation / test pour les stratégies de validation croisée courantes. Ils acceptent les ensembles de données d'entrée fractionnés et exposent une méthode «fractionnée» qui génère un index train / testset pour chaque itération de la stratégie de validation croisée sélectionnée. Cet exemple montre un exemple d'utilisation de la méthode split.

>>> from sklearn.model_selection import KFold, cross_val_score
>>> X = ["a", "a", "b", "c", "c", "c"]
>>> k_fold = KFold(n_splits=3)
>>> for train_indices, test_indices in k_fold.split(X):
...      print('Train: %s | test: %s' % (train_indices, test_indices))
Train: [2 3 4 5] | test: [0 1]
Train: [0 1 4 5] | test: [2 3]
Train: [0 1 2 3] | test: [4 5]

La validation croisée est facile à faire.

>>> kfold = KFold(n_splits=3)
>>> [svc.fit(X_digits[train], y_digits[train]).score(X_digits[test], y_digits[test])
...          for train, test in k_fold.split(X_digits)]
[0.93489148580968284, 0.95659432387312182, 0.93989983305509184]

Le score de validation croisée peut être calculé directement à l'aide de l'assistant cross_val_score. Étant donné un objet de validation croisée et une estimation pour l'ensemble de données d'entrée, cross_val_score divise de manière itérative les données en un ensemble d'apprentissage et un ensemble de test, entraîne l'estimation à l'aide de l'ensemble d'apprentissage et est basé sur l'ensemble de test pour chaque itération de l'agrégation de validation croisée. Pour calculer le score. Par défaut, la méthode «score» de l'estimateur est utilisée pour calculer les scores individuels. Pour plus d'informations sur les méthodes de notation disponibles, consultez Modules métriques (http://scikit-learn.org/stable/modules/metrics.html#metrics).

>>> cross_val_score(svc, X_digits, y_digits, cv=k_fold, n_jobs=-1)
array([ 0.93489149,  0.95659432,  0.93989983])

n_jobs = -1 signifie que les calculs sont distribués sur tous les processeurs de l'ordinateur. Vous pouvez également fournir l'argument scoring pour spécifier une méthode de notation différente.

>>> cross_val_score(svc, X_digits, y_digits, cv=k_fold,
...                 scoring='precision_macro')
array([ 0.93969761,  0.95911415,  0.94041254])

Générateur de vérification mutuelle

Exercice

Tracez le score de validation croisée de l'estimation SVC en utilisant le noyau linéaire en fonction du paramètre «C» dans l'ensemble de données numériques (en utilisant une grille logarithmique de points de 1 à 10).

import numpy as np
from sklearn.model_selection import cross_val_score
from sklearn import datasets, svm

digits = datasets.load_digits()
X = digits.data
y = digits.target

svc = svm.SVC(kernel='linear')
C_s = np.logspace(-10, 0, 10)

[Répondez ici: Validation croisée avec l'exercice Digits Dataset](http://scikit-learn.org/stable/auto_examples/exercises/plot_cv_digits.html#sphx-glr-auto-examples-exercises-plot-cv-digits- py)

Recherche de grille et estimateur à validation croisée

Recherche de grille

scikit-learn fournit un objet dans lequel les données données calculent le score lors de l'ajustement de l'estimateur sur la grille de paramètres et sélectionnent le paramètre qui maximise le score de validation croisée. Cet objet effectue des estimations lors de la construction et expose l'API de l'estimateur.

>>> from sklearn.model_selection import GridSearchCV, cross_val_score
>>> Cs = np.logspace(-6, -1, 10)
>>> clf = GridSearchCV(estimator=svc, param_grid=dict(C=Cs),
...                    n_jobs=-1)
>>> clf.fit(X_digits[:1000], y_digits[:1000])        
GridSearchCV(cv=None,...
>>> clf.best_score_                                  
0.925...
>>> clf.best_estimator_.C                            
0.0077...

>>> #Les performances de prédiction de l'ensemble de test ne sont pas aussi bonnes que celles de l'ensemble d'entraînement
>>> clf.score(X_digits[1000:], y_digits[1000:])      
0.943...

Par défaut, GridSearchCV (http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV) utilise la validation mutuelle 3x. Cependant, au lieu de l'analyse de régression, s'il est détecté qu'une classification a été réussie, utilisez un triplet stratifié.

Validation mutuelle imbriquée

>>> cross_val_score(clf, X_digits, y_digits)
...                                               
array([ 0.938...,  0.963...,  0.944...])

Deux boucles de validation croisée s'exécutent en parallèle, une avec l'estimateur GridSearchCV pour définir le gamma et l'autre avec cross_val_score pour mesurer les performances prédictives de l'évaluateur. Le score obtenu est une estimation non biaisée du score prévu pour les nouvelles données.

avertissement

Les objets ne peuvent pas être imbriqués dans des calculs parallèles («n_jobs» est différent de 1).

Estimateur à validation croisée

La validation mutuelle de la définition des paramètres peut être effectuée efficacement pour chaque algorithme. En effet, pour certains estimateurs, scikit-learn définit automatiquement les paramètres par validation croisée "Cross Validation: Evaluate Estimator Performance. /cross_validation.html#cross-validation) »Publiez l'estimateur.

>>> from sklearn import linear_model, datasets
>>> lasso = linear_model.LassoCV()
>>> diabetes = datasets.load_diabetes()
>>> X_diabetes = diabetes.data
>>> y_diabetes = diabetes.target
>>> lasso.fit(X_diabetes, y_diabetes)
LassoCV(alphas=None, copy_X=True, cv=None, eps=0.001, fit_intercept=True,
    max_iter=1000, n_alphas=100, n_jobs=1, normalize=False, positive=False,
    precompute='auto', random_state=None, selection='cyclic', tol=0.0001,
    verbose=False)
>>> # The estimator chose automatically its lambda:
>>> lasso.alpha_ 
0.01229...

Ces estimateurs sont appelés comme s'ils avaient un «CV» ajouté à leur nom.

Exercice

Dans le jeu de données sur le diabète, trouvez le paramètre de régularisation optimal «alpha».

** Bonus: ** Dans quelle mesure pouvez-vous faire confiance au choix alpha?

from sklearn import datasets
from sklearn.linear_model import LassoCV
from sklearn.linear_model import Lasso
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score

diabetes = datasets.load_diabetes()

[Réponse ici: Exercice d'authentification mutuelle de l'ensemble de données diabétiques](http://scikit-learn.org/stable/auto_examples/exercises/plot_cv_diabetes.html#sphx-glr-auto-examples-exercises-plot-cv-diabetes -py)


Page suivante

© 2010 --2016, développeurs scikit-learn (licence BSD)

Recommended Posts

[Français] scikit-learn 0.18 Tutorial Tutoriel d'apprentissage statistique pour le traitement des données scientifiques Sélection du modèle: sélection de l'estimateur et de ses paramètres
[Français] didacticiel scikit-learn 0.18 Didacticiel d'apprentissage statistique pour le traitement des données scientifiques Apprentissage statistique: paramètres et objets d'estimation dans scikit-learn
[Français] Tutoriel scikit-learn 0.18 Tutoriel d'apprentissage statistique pour le traitement des données scientifiques
[Français] didacticiel scikit-learn 0.18 Didacticiel d'apprentissage statistique pour le traitement des données scientifiques Mettre le tout ensemble
[Français] scikit-learn 0.18 Tutorial Rechercher de l'aide pour des tutoriels d'apprentissage statistique pour le traitement des données scientifiques
[Français] didacticiel scikit-learn 0.18 Didacticiel d'apprentissage statistique pour le traitement des données scientifiques Apprentissage non supervisé: recherche de représentation des données
[Français] didacticiel scikit-learn 0.18 Didacticiel d'apprentissage statistique pour le traitement des données scientifiques Apprentissage supervisé: prédire les variables de sortie à partir d'observations en haute dimension
Organisation des procédures de base pour l'analyse des données et le traitement statistique (4)
Organisation des procédures de base pour l'analyse des données et le traitement statistique (2)
Introduction à la modélisation statistique pour l'analyse des données Sélection du modèle GLM
[Français] scicit-learn 0.18 Tutorial Manipulation des données de texte
Modèle de régression utilisant scikit-learn et sa visualisation
À propos du traitement d'expansion des données pour l'apprentissage en profondeur
[Français] Tutoriel scikit-learn 0.18 Choisir le bon modèle
[Français] scikit-learn 0.18 Introduction de l'apprentissage automatique par le didacticiel scikit-learn