-1

ich gridsearchCV verwende die optimalen Parameter für BIRKEN zu finden, ist mein Code:GridsearchCV den optimalen Parameter für BIRKEN finden

RAND_STATE=50 # for reproducibility and consistency 
folds=3 
k_fold = KFold(n_splits=folds, shuffle=True, random_state=RAND_STATE) 

hyperparams = { "branching_factor": [50,100,200,300,400,500,600,700,800,900], 
       "n_clusters": [5,7,9,11,13,17,21], 
       "threshold": [0.2,0.3,0.4,0.5,0.6,0.7]} 
birch = Birch() 

def sil_score(ndata): 
    labels = ensemble.predict(ndata) 
    score = silhouette_score(ndata, labels) 
    return score 

sil_scorer = make_scorer(sil_score) 

ensemble = GridSearchCV(estimator=birch,param_grid=hyperparams,scoring=sil_scorer,cv=k_fold,verbose=10,n_jobs=-1) 

ensemble.fit(x) 
print ensemble 
best_parameters = ensemble.best_params_ 
print best_parameters 
best_score = ensemble.best_score_ 
print best_score 

aber der Ausgang ist mir ein Fehler:

enter image description here

Ich bin verwirrt, warum der Score-Wert nach 4 Argumenten sucht, wenn ich bereits die erforderlichen Parameter für das Scoring in der sil_score-Funktion angegeben habe.

Antwort

2

Ihre Bewertungsfunktion ist nicht korrekt. Die Syntax sollte sil_score(y_true,y_pred) lauten, wobei y_true die Grundwahrheitsbezeichnungen und y_pred die vorhergesagten Bezeichnungen sind. Außerdem müssen Sie die Beschriftungen nicht separat mit dem Ensemble-Objekt in Ihrer Bewertungsfunktion vorhersagen. Auch in Ihrem Fall ist es sinnvoller, silhouette_score direkt als Scoring-Funktion zu verwenden, da Sie Ihr Ensemble dazu aufrufen, Labels innerhalb der Scoring-Funktion vorherzusagen, die gar nicht benötigt werden. Übergeben Sie einfach die silhouette_score als Scoring-Funktion und GridSearchCV wird sich darum kümmern, das Scoring selbst zu prognostizieren.

Here is an example wenn Sie sehen möchten, wie es funktioniert.

Verwandte Themen