Raster-Suche für hyperparameter evaluation von clustering in scikit-learn
Ich bin clustering eine Stichprobe von rund 100 Datensätze (unbeschrifteten) und versuchen, zu verwenden grid_search zur Bewertung der clustering Algorithmus mit verschiedenen hyperparameters. Ich bin scoring mit silhouette_score
welche gut funktioniert.
Mein problem hier ist, dass ich nicht brauchen, um verwenden Sie die cross-Validierung Aspekt der GridSearchCV
/RandomizedSearchCV
, aber ich kann nicht finden, eine einfache GridSearch
/RandomizedSearch
. Ich kann schreiben, meine eigenen, sondern die ParameterSampler
und ParameterGrid
Objekte sind sehr hilfreich.
Mein Nächster Schritt wird sein, die Unterklasse BaseSearchCV
und Umsetzung eigener _fit()
Methode, aber dachte, es war es Wert zu Fragen, gibt es einen einfacheren Weg, dies zu tun, zum Beispiel durch die übergabe etwas cv
parameter?
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)
- Tun Sie das nicht cross-validation (grid-search) in unüberwachte data-mining. Nur die Berechnung der 10 Durchläufe des k-means, und die besten.
- Offensichtlich tun Sie das nicht cross-Validierung, aber warum nicht grid-search erhält eine entsprechende scoring-Metrik wie die silhouette score?
- Auch, kmeans ist nur ein Beispiel. Ich möchte zum testen eine Reihe von verschiedenen algorithmen und Ihre hyperparameters.
- Genauso gut könnte man optimieren silhouette direkt dann. Erwarte nicht, dass das clustering-Ergebnis zu verbessern wirklich auf diese Weise. Am Ende, Sieh dir mal die Parameter Stimmen am besten mit der Silhouette. Es ist nur ein weiteres Kriterium als SSE.
- Was würde ich tun, ohne dass mit einer der
BaseSearchCV
Unterklassen? Habe ich etwas verpasst-Funktion für die Optimierung hyperparameters, oder meinst du etwas schreiben, spezifisch für jeden Algorithmus? - Ich bin darauf hindeutet, direkt-Suche für die optimale Lösung silhouette, ohne Verwendung von clustering-Methode. Naive-enumeration funktioniert nicht, aber sagen evoluationary Optimierung oder so etwas wie dieses arbeiten kann. k-means nicht optimieren die silhouette, aber nicht sagen, es ist nicht ein Algorithmus der die nicht.
- Ah, ich sehe. Ich kann wollen, um zusätzliche Dinge zu der scoring-Methode, obwohl (bevorzugte Größe von Clustern, die ähnlichkeit der Cluster-Größe, etc.), so dass ich bin wirklich auf der Suche nach einem Weg, etwas zu tun eine Menge, wie grid-search. Danke für die Vorschläge aber.
- Bitte sehen Sie, wenn Sie this Ihre Frage beantwortet.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, das ist vielleicht eine alte Frage, aber ich verwende diese Art von code:
Zuerst möchten wir generieren alle möglichen Kombinationen der Parameter:
Dann erstellen Sie eine Schleife aus diesem:
Natürlich, es kann kombiniert werden, in eine hübsche Funktion. Also diese Lösung ist meist ein Beispiel.
Hoffe es hilft jemandem!
Kürzlich lief ich in ähnliches problem. Ich benutzerdefinierte iterierbar
cv_custom
definiert splitting-Strategie und dient als input für das cross-validation-parametercv
. Diese durchsuchbar enthalten sollte, ein paar für jedes Fach mit Proben identifiziert durch Ihre Indizes, z.B.([fold1_train_ids], [fold1_test_ids]), ([fold2_train_ids], [fold2_test_ids]), ...
In unserem Fall, wir brauchen nur ein paar für eine Herde mit Indizes aller Beispiele im Zug und auch in der test-Teil([train_ids], [test_ids])