web-dev-qa-db-fra.com

Recherche de grille pour l'évaluation d'hyperparamètre de la mise en grappe dans scikit-learn

Je regroupe un échantillon d'environ 100 enregistrements (non étiqueté) et j'essaie d'utiliser grid_search pour évaluer l'algorithme de regroupement avec divers hyperparamètres. Je marque en utilisant silhouette_score qui fonctionne bien.

Mon problème ici est que je n'ai pas besoin d'utiliser l'aspect de validation croisée de GridSearchCVname __/RandomizedSearchCVname__, mais je ne trouve pas un simple GridSearchname __/RandomizedSearchname__. Je peux écrire le mien, mais les objets ParameterSampleret ParameterGridsont très utiles.

Ma prochaine étape consistera à sous-classer BaseSearchCVet à implémenter ma propre méthode _fit(), mais je pensais qu'il valait la peine de demander s'il existe un moyen plus simple de le faire, par exemple, en passant quelque chose au paramètre cvname__.

def silhouette_score(estimator, X):
    clusters = estimator.fit_predict(X)
    score = metrics.silhouette_score(distance_matrix, clusters, metric='precomputed')
    return score

ca = KMeans()
param_grid = {"n_clusters": range(2, 11)}

# run randomized search
search = GridSearchCV(
    ca,
    param_distributions=param_dist,
    n_iter=n_iter_search,
    scoring=silhouette_score,
    cv= # can I pass something here to only use a single fold?
    )
search.fit(distance_matrix)
20
Jamie Bull

Récemment, j'ai rencontré un problème similaire. J'ai défini le cv_custom personnalisable personnalisé, qui définit la stratégie de fractionnement et constitue une entrée pour le paramètre de validation croisée cv. Cet itérable doit contenir un couple pour chaque pli avec des échantillons identifiés par leurs indices, par ex. ([fold1_train_ids], [fold1_test_ids]), ([fold2_train_ids], [fold2_test_ids]), ... Dans notre cas, nous avons besoin d'un seul couple pour un pli avec des index de tous les exemples dans le train et également dans la partie test ([train_ids], [test_ids])

N = len(distance_matrix)
cv_custom = [(range(0,N), range(0,N))]
scores = cross_val_score(clf, X, y, cv=cv_custom)
1
Jakub Macina