web-dev-qa-db-fra.com

Existe-t-il un moyen simple de rechercher sur la grille sans validation croisée en python?

La classe GridSearchCV est absolument utile dans scikit-learn pour effectuer une recherche sur grille et une validation croisée, mais je ne souhaite pas effectuer de validation croisée. Je veux faire une recherche sur la grille sans validation croisée et utiliser des données entières pour m'entraîner. Pour être plus précis, je dois évaluer mon modèle réalisé par RandomForestClassifier avec "score oob" lors de la recherche sur la grille. Y a-t-il un moyen facile de le faire? ou devrais-je faire un cours par moi-même?

Les points sont

  • Je voudrais faire une recherche sur la grille avec un moyen facile.
  • Je ne veux pas faire de validation croisée.
  • Je dois utiliser des données entières pour m'entraîner (je ne veux pas séparer pour former des données et des données de test)
  • Je dois utiliser le score oob pour évaluer pendant la recherche sur la grille.
16
ykensuke9

Je déconseillerais vraiment d'utiliser OOB pour évaluer un modèle, mais il est utile de savoir effectuer une recherche sur une grille en dehors de GridSearchCV() (je le fais souvent afin de pouvoir enregistrer les prédictions de CV de la meilleure grille pour faciliter l'empilement des modèles). Je pense que le moyen le plus simple est de créer votre grille de paramètres via ParameterGrid(), puis de parcourir en boucle chaque ensemble de paramètres. Par exemple, si vous avez un dict de grille, nommé "grid", et un objet de modèle RF, nommé "rf", vous pouvez alors procéder de la manière suivante:

for g in ParameterGrid(grid):
    rf.set_params(**g)
    rf.fit(X,y)
    # save if best
    if rf.oob_score_ > best_score:
        best_score = rf.oob_score_
        best_grid = g

print "OOB: %0.5f" % best_score 
print "Grid:", best_grid
26
David

Une méthode consiste à utiliser ParameterGrid pour créer un itérateur des paramètres de votre choix et le parcourir en boucle.

Une autre chose à faire est de configurer GridSearchCV pour qu’il fasse ce que vous voulez. Je ne recommanderais pas cela beaucoup parce que c'est inutilement compliqué.
Ce qu'il vous faudrait faire, c'est:

  • Utilisez la variable arg cv dans docs et donnez-lui un générateur qui produit un tuple avec tous les indices (pour que train et test soient identiques)
  • Modifiez l'argument scoring pour utiliser l'oob attribué à partir de la forêt aléatoire.
2
AbdealiJK

Voir ce lien: https://stackoverflow.com/a/44682305/2202107

Il a utilisé cv=[(slice(None), slice(None))] qui n'est PAS recommandé par les auteurs de sklearn.

1
Sida Zhou