Ich gruppiere ein Beispiel von etwa 100 Datensätze (unmarkiert) und versucht, Grid_search zu verwenden, um den Cluster-Algorithmus mit verschiedenen Hyperparametern auszuwerten. Ich bewerte mit silhouette_score
, die gut funktioniert.Grid-Suche für Hyperparameter-Evaluierung von Clustering in scikit-learn
Mein Problem hier ist, dass ich nicht die Kreuzvalidierung Aspekt der GridSearchCV
/RandomizedSearchCV
zu verwenden, aber ich kann nicht ein einfaches GridSearch
/RandomizedSearch
finden. Ich kann meine eigenen schreiben, aber die ParameterSampler
und ParameterGrid
Objekte sind sehr nützlich.
Mein nächster Schritt sein wird BaseSearchCV
Unterklasse und meine eigene _fit()
Methode zu implementieren, aber dachte, es wert war zu fragen ist es ein einfacherer Weg, dies zu tun, zum Beispiel durch etwas zum cv
Parameter übergeben?
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)
Sie Kreuzvalidierung nicht tun (oder Raster-Suche) in * unüberwacht * Data Mining. Berechnen Sie einfach die 10 Läufe von k-means und verwenden Sie die besten. –
Offensichtlich führen Sie keine Kreuzvalidierung durch, aber warum wird die Gitternetzsuche nicht mit einem geeigneten Bewertungsmaß wie dem Silhouettenwert verglichen? –
Auch hier ist Kmeans nur ein Beispiel. Ich möchte eine Reihe verschiedener Algorithmen und deren Hyperparameter testen. –