Je fais actuellement un projet par moi-même. Pour ce projet, j'ai essayé de comparer les résultats de plusieurs algorithmes. Mais je veux être sûr que chaque algorithme testé est configuré pour donner les meilleurs résultats.
J'utilise donc la validation croisée et je teste chaque combinaison de paramètres et je choisis le meilleur.
Par exemple:
def KMeanstest(param_grid, n_jobs): estimator = KMeans() cv = ShuffleSplit(n_splits=10, test_size=0.2, random_state=42) regressor = GridSearchCV(estimator=estimator, cv=cv, param_grid=param_grid, n_jobs=n_jobs) regressor.fit(X_train, y_train) print("Best Estimator learned through GridSearch") print(regressor.best_estimator_) return cv, regressor.best_estimator_ param_grid={'n_clusters': [2], 'init': ['k-means++', 'random'], 'max_iter': [100, 200, 300, 400, 500], 'n_init': [8, 9, 10, 11, 12, 13, 14, 15, 16], 'tol': [1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6], 'precompute_distances': ['auto', True, False], 'random_state': [42], 'copy_x': [True, False], 'n_jobs': [-1], 'algorithm': ['auto', 'full', 'elkan'] } n_jobs=-1 cv,best_est=KMeanstest(param_grid, n_jobs)
Mais c'est très long. Je veux savoir si cette méthode est la meilleure ou si je dois utiliser une approche différente.
Merci pour votre aide
3 Réponses :
Vous pouvez essayer la recherche aléatoire à la place de la recherche par grille, la recherche aléatoire est une technique dans laquelle des combinaisons aléatoires d'hyperparamètres sont utilisées pour trouver la meilleure solution pour le modèle construit. Il essaie des combinaisons aléatoires d'une plage de valeurs. Pour optimiser avec la recherche aléatoire, la fonction est évaluée à un certain nombre de configurations aléatoires dans l'espace des paramètres.
Vous pouvez trouver les détails sur la page de documentation sklearn . Une comparaison est donnée entre la recherche aléatoire et la recherche par grille.
J'espère que vous trouverez cela utile.
Outre la recherche aléatoire et la recherche par grille, il existe des outils et des bibliothèques pour un réglage plus intelligent des hyperparamètres. J'ai utilisé Optuna avec succès, mais il y en a peu d'autres.
Le problème avec GridSearch est qu'il prend beaucoup de temps comme vous l'avez dit à juste titre. RandomSearch peut parfois être une bonne option, mais ce n'est pas optimal.
L'optimisation bayésienne est une autre option. cela nous permet de nous concentrer rapidement sur l'ensemble de paramètres optimal en utilisant une approche probabiliste. Je l'ai essayé personnellement en utilisant la bibliothèque hyperopt en python et cela fonctionne très bien. Consultez ce tutoriel pour plus d'informations. Vous pouvez également télécharger le bloc-notes associé à partir de mon GitHub
La bonne chose est que puisque vous avez déjà expérimenté GridSearch, vous avez une idée approximative des plages de paramètres qui ne fonctionnent pas bien. Ainsi, vous pouvez définir un espace de recherche plus précis pour l'exécution de l'optimisation bayésienne, ce qui réduira encore plus le temps. En outre, hyperopt peut être utilisé pour comparer plusieurs algorithmes et leurs paramètres respectifs.
Merci de votre aide. J'ai testé cette méthode et cela me semble la meilleure solution. J'ai un problème lorsque j'utilise la bibliothèque hyperopt. Lorsque j'affiche la barre de progression. La plupart du temps, il reste bloqué avant d'atteindre 100%. Est-ce que tu sais pourquoi ?
Cela semble inhabituel et je ne sais pas vraiment pourquoi cela se produit. Pouvez-vous partager plus de détails et votre code, en particulier là où vous définissez la fonction fmin
? Peut-être que l'espace que vous avez défini est trop large et qu'il reste bloqué? Une chose que vous pouvez faire est d'imprimer les paramètres que vous optimisez à chaque étape pour déboguer le problème.
Je crée un nouveau sujet pour cela stackoverflow.com/questions/ 60097207 /…