Sto raggruppando un campione di circa 100 record (senza etichetta) e provando a utilizzare grid_search per valutare l'algoritmo di clustering con vari hyperparameters. Sto segnando usando silhouette_score
che funziona bene.Ricerca griglia per la valutazione dell'iperparametro del clustering in scikit-learn
Il mio problema è che non ho bisogno di usare l'aspetto convalida incrociata del GridSearchCV
/RandomizedSearchCV
, ma non riesco a trovare una semplice GridSearch
/RandomizedSearch
. Posso scrivere i miei ma gli oggetti ParameterSampler
e ParameterGrid
sono molto utili.
Il mio prossimo passo sarà quello di sottoclasse BaseSearchCV
e implementare il mio metodo _fit()
, ma pensato che fosse la pena chiedere c'è un modo più semplice per fare questo, per esempio passando qualcosa al parametro cv
?
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)
Non fai convalida incrociata (o grid-ricerca) in * data mining senza supervisione *. Calcola le 10 sequenze di k-medie e usa il meglio. –
Ovviamente non si esegue la convalida incrociata, ma perché non eseguire la ricerca della griglia con una metrica di punteggio appropriata come il punteggio della sagoma? –
Inoltre, kmeans è solo un esempio qui. Mi piacerebbe testare un numero di algoritmi diversi e i loro iperparametri. –