google traduit http://scikit-learn.org/0.18/modules/grid_search.html [scikit-learn 0.18 Guide de l'utilisateur 3. Sélection et évaluation du modèle](http://qiita.com/nazoking@github/items/267f2371757516f8c168#3-%E3%83%A2%E3%83%87%E3%83] À partir de% AB% E3% 81% AE% E9% 81% B8% E6% 8A% 9E% E3% 81% A8% E8% A9% 95% E4% BE% A1)
Les hyperparamètres sont des paramètres de l'estimateur qui ne sont pas directement entraînés. Dans scikit-learn, ils sont passés comme arguments au constructeur de la classe d'estimateur. Des exemples typiques sont les classificateurs de vecteurs de support "C", "noyau", "gamma" et LASSO "alpha". Il est possible et recommandé de rechercher l'espace des hyperparamètres avec un score de Validation croisée optimale: Résultats de l'estimateur (http://qiita.com/nazoking@github/items/13b167283590f512d99a). Tous les paramètres qui composent l'estimateur peuvent être optimisés de cette manière. Plus précisément, pour trouver les noms et les valeurs courantes de tous les paramètres d'un estimateur donné:
estimator.get_params()
La recherche ressemble à ceci:
--Estimator (variable indépendante ou classifieur comme sklearn.svm.SVC ()
)
--Espace paramètres
Certains modèles permettent les stratégies spéciales et efficaces d'extraction de paramètres décrites ci-dessous. GridSearchCV combine parfaitement tous les paramètres de la valeur spécifiée. RandomizedSearchCV est donné à partir de l'espace de paramètres avec la distribution spécifiée. Vous pouvez échantillonner le nombre de candidats. Après avoir expliqué ces outils, nous détaillons les meilleures pratiques qui peuvent être appliquées aux deux approches. Un petit sous-ensemble de ces paramètres peut avoir un impact significatif sur les performances prédictives ou de calcul du modèle, et il est courant que d'autres paramètres restent à leurs valeurs par défaut. Il est probablement conseillé de lire les références jointes à la littérature et de lire la documentation de la classe d'estimateur pour mieux comprendre le comportement attendu.
La recherche de grille fournie par GridSearchCV génère en profondeur des candidats à partir de la grille de valeurs de paramètres spécifiées par le paramètre param_grid
. Par exemple, la suivante param_grid
:
param_grid = [
{'C': [1, 10, 100, 1000], 'kernel': ['linear']},
{'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']},
]
Valeur C de [1, 10, 100, 1000] avec noyau linéaire, deux grilles avec noyau RBF et produit externe de la valeur C avec [1, 10, 100, 1000], valeur «gamma» [0,001, 0,0001] y a-t-il. L'instance GridSearchCV implémente l'API d'estimation régulière. Lorsque vous «insérez» dans un ensemble de données, toutes les combinaisons possibles de valeurs de paramètres sont évaluées et la meilleure combinaison est préservée.
--Exemple: --Pour un exemple de calcul de la recherche de grille pour l'ensemble de données de chiffres, [Estimation de paramètre à l'aide de la recherche de grille avec vérification mutuelle](http://scikit-learn.org/0.18/auto_examples/model_selection/grid_search_digits.html#sphx-glr- Voir auto-examples-model-selection-grid-search-digits-py). --Grider les paramètres pour les extracteurs de caractéristiques de document texte (vectoriseurs de nombre de n grammes et convertisseurs TF-IDF) et les classificateurs (SVM linéaire formé par SGD ou pénalités L2) à l'aide du pipeline ・ Un exemple de recherche est "[Exemple de pipeline d'extraction et d'évaluation de caractéristiques de texte](http://scikit-learn.org/0.18/auto_examples/model_selection/grid_search_text_feature_extraction.html#sphx-glr-auto-examples-model] -selection-grid-search-text-feature-extraction-py) ". --Pour un exemple de recherche de grille dans une boucle de validation croisée d'un ensemble de données iris, voir Validation mutuelle imbriquée ou non imbriquée (http://scikit-learn.org/0.18/auto_examples/model_selection/plot_nested_cross_validation_iris.html#sphx Voir -glr-auto-examples-model-selection-plot-nested-cross-validation-iris-py). Il s'agit d'une bonne pratique pour évaluer les performances du modèle à l'aide de la recherche de grille.
L'utilisation d'une grille de réglages de paramètres est actuellement la méthode la plus utilisée pour l'optimisation des paramètres, mais d'autres méthodes de recherche ont des caractéristiques plus favorables. RandomizedSearchCV implémente une recherche aléatoire pour chaque paramètre. Chaque paramètre est échantillonné à partir d'une distribution pour les valeurs de paramètre possibles. Cela présente deux avantages principaux par rapport à la recherche complète.
--Le budget peut être sélectionné quel que soit le nombre de paramètres et les valeurs possibles.
Utilisez un dictionnaire pour spécifier comment les paramètres sont échantillonnés. Ceci est très similaire à la spécification des paramètres GridSearchCV. De plus, le budget calculé, qui est le nombre d'échantillons échantillonnés ou le nombre d'itérations d'échantillonnage, est spécifié à l'aide du paramètre «n_iter». Pour chaque paramètre, vous pouvez spécifier une distribution des valeurs possibles ou une liste de choix discrets (échantillonnés uniformément).
{'C': scipy.stats.expon(scale=100), 'gamma': scipy.stats.expon(scale=.1),
'kernel': ['rbf'], 'class_weight':['balanced', None]}
Cet exemple utilise le module scipy.stats
, qui contient de nombreuses distributions qui servent des paramètres d'échantillonnage tels que ʻexpon,
gamma, ʻuniform
ou randint
. En règle générale, vous pouvez passer une fonction qui fournit une méthode rvs
(random variate sample) pour échantillonner la valeur. Les appels à la fonction rvs
doivent fournir un échantillon aléatoire indépendant des valeurs de paramètres possibles avec des appels continus.
** AVERTISSEMENT ** Vous ne pouvez pas spécifier un état aléatoire dans
scipy.stats
avant scipy 0.16. À la place, utilisez un état aléatoire numpy global qui peut être amorcé vianp.random.seed
ou défini à l'aide denp.random.set_state
. Cependant, lorsque scikit-learn 0.18 est démarré, le module scley.model_selection peut également utiliser scipy> = 0.16 Si, définit un état aléatoire fourni par l'utilisateur.
Pour les paramètres continus comme «C» ci-dessus, il est important de spécifier une distribution continue pour tirer pleinement parti de la randomisation. De cette façon, augmenter n_iter
entraînera toujours une recherche plus fine.
--Exemple:
Par défaut, la recherche de paramètres utilise la fonction score
de l'estimateur pour évaluer les réglages des paramètres. Ce sont [sklearn.metrics.accuracy_score] pour la classification (http://scikit-learn.org/0.18/modules/generated/sklearn.metrics.accuracy_score.html#sklearn.metrics.accuracy_score) et pour la régression. Il existe sklearn.metrics.r2_score. D'autres fonctionnalités de notation conviennent mieux à certaines applications (par exemple, les scores de précision sont souvent inutiles pour les classifications disproportionnées). Vous pouvez spécifier différentes fonctions de notation à l'aide de GridSearchCV, RandomizedSearchCV et du paramètre scoring
de l'outil spécial de validation croisée décrit ci-dessous. Pour plus d'informations, voir Paramètres de notation: définition des règles d'évaluation du modèle (http://qiita.com/nazoking@github/items/958426da6448d74279c7#331-%E5%BE%97%E7%82%B9%E3% 83% 91% E3% 83% A9% E3% 83% A1% E3% 83% BC% E3% 82% BF% E3% 83% A2% E3% 83% 87% E3% 83% AB% E8% A9% Voir 95% E4% BE% A1% E3% 83% AB% E3% 83% BC% E3% 83% AB% E3% 81% AE% E5% AE% 9A% E7% BE% A9).
[Pipeline: Chain Estimate](http://qiita.com/nazoking@github/items/fdfd207b3127d6d026e0#411-%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9 % E3% 82% A4% E3% 83% B3% E9% 80% A3% E9% 8E% 96% E6% 8E% A8% E5% AE% 9A) est une estimation synthétique qui vous permet de rechercher l'espace des paramètres avec ces outils. Explique comment construire un navire.
La sélection du modèle en évaluant différents réglages de paramètres peut être considérée comme un moyen d'utiliser des données étiquetées pour «former» les paramètres de la grille. Lors de l'évaluation du modèle résultant, il est important d'évaluer les échantillons qui n'ont pas été utilisés pendant le processus de recherche de grille. Nous vous recommandons de diviser les données en ** ensembles de développement ** (fournis aux instances GridSearchCV) et ** ensembles d'évaluation ** pour calculer les métriques de performances. Cela peut être fait en utilisant la fonction utilitaire train_test_split.
GridSearchCV et RandomizedSearchCV évaluent chaque paramètre individuellement. Si votre système d'exploitation le prend en charge, vous pouvez utiliser le mot-clé n_jobs = -1
pour effectuer des calculs en parallèle. Voir Signatures de fonction pour plus d'informations.
Certains réglages de paramètres peuvent provoquer une erreur dans fit
. Par défaut, la recherche entière échouera, même si les autres réglages de paramètres peuvent être entièrement évalués. Si vous définissez ʻerror_score = 0` (ou = np.NaN), un avertissement sera émis et le score sera mis à 0 (ou NaN), mais la recherche sera terminée.
Dans certains modèles, les données d'une plage de valeurs pour un paramètre peuvent être ajustées à une valeur unique pour ce paramètre aussi efficacement que l'ajustement d'un estimateur. Vous pouvez tirer parti de cette fonctionnalité pour effectuer une validation croisée plus efficace utilisée pour la sélection de modèle pour ce paramètre. Le paramètre le plus courant qui suit cette stratégie est le paramètre qui code la force du régulariseur. Dans ce cas, on dit qu'il calcule le ** chemin de normalisation ** de l'estimateur. Une liste de ces modèles peut être trouvée ici:
Certains modèles peuvent fournir une forme fermée théorique de l'information d'estimations optimales des paramètres de régularisation (plutôt que quelques-unes lors de l'utilisation de tests croisés). Vous trouverez ci-dessous une liste de modèles qui ont bénéficié du critère d'information Aikike (AIC) ou du critère d'information bayésien (BIC) pour la sélection automatique des modèles.
Lors de l'utilisation de la méthode d'ensemble basée sur l'ensachage, c'est-à-dire lors de la génération d'un nouvel ensemble d'apprentissage en utilisant l'échantillonnage avec substitution, une partie de l'ensemble d'apprentissage reste inutilisée. Pour chaque classificateur de l'ensemble, différentes parties de l'ensemble d'apprentissage sont exclues. Cette partie restante peut être utilisée pour estimer les erreurs de généralisation sans s'appuyer sur un ensemble distinct de validations. Cette estimation est «gratuite» car elle ne nécessite aucune donnée supplémentaire et peut être utilisée pour la sélection du modèle. Il est actuellement implémenté dans la classe suivante:
[scikit-learn 0.18 Guide de l'utilisateur 3. Sélection et évaluation du modèle](http://qiita.com/nazoking@github/items/267f2371757516f8c168#3-%E3%83%A2%E3%83%87%E3%83] À partir de% AB% E3% 81% AE% E9% 81% B8% E6% 8A% 9E% E3% 81% A8% E8% A9% 95% E4% BE% A1)
© 2010 --2016, développeurs scikit-learn (licence BSD).
Recommended Posts