Machine Learning - Cross Val Function in Verbindung mit GridSearch

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
hendo132
User
Beiträge: 1
Registriert: Samstag 12. September 2020, 15:55

Hallo Leute,

zurzeit bringe ich mir selbst Python und Maschinelles Lernen bei und arbeite an einem Projekt, das sich mit Klassifikation befasst. Ich habe ausführbaren Code, den ich für mich neu schreiben und daraus lernen möchte. Jetzt bin ich an einem Punkt angelangt, an dem ich alleine nicht mehr weiterkomme. Ich verwende ein Ensemble mit verschiedenen Klassifikatoren wie AdaBoost, CatBoost, XGBoost usw.

Die erste Funktion ist eine angepasste Cross-Val-Function, was für mich nachvollziehbar. Die zweite Funktion ist eine erweiterte Funktion der GridSearch, die ich nicht ganz verstehe und nun in eine "normale GridSearch-Funktion" umschreiben will. Für Hinweise und Hilfe um die zweite Funktion in eine "normale" GridSearch-Funktion umzuwandeln wäre ich dankbar.

Die originale "ParamSearch" findet ihr hier: https://effectiveml.com/files/paramsearch.py

Code: Alles auswählen

def crossvaltest_cat(params, X, y, n_splits=5):
    skf = StratifiedKFold(n_splits=5)
    accuracy, score, f1 = [], [], []
    for train_index, test_index in skf.split(X, y):
        X_train, X_test = X.iloc[train_index, :], X.iloc[test_index, :]
        y_train, y_test = y.iloc[train_index], y.iloc[test_index]
        
        clf = CatBoostClassifier(**params)
        clf.fit(X_train, y_train)
        
        y_pred = np.array(clf.predict(X_test))
        tn, fp, fn, tp = confusion_matrix(y_test, y_pred).ravel()
        
        accuracy.append(accuracy_score(y_test, y_pred))
        score.append(score_function(tp,fp,fn,tn))
        f1.append(f1_score(y_test, y_pred))
        
    return np.mean(score)

def cat_param_tune(params, X, y ,n_splits=5):
    ps = paramsearch(params)
    for prms in chain(ps.grid_search(['border_count']),
                      ps.grid_search(['l2_leaf_reg']),
                      ps.grid_search(['iterations','learning_rate']),
                      ps.grid_search(['depth'])):
        res = crossvaltest_cat(prms,X, y,n_splits)
        ps.register_result(res,prms)
        print(res,prms,'best:',ps.bestscore(),ps.bestparam())
        print()
    return ps.bestparam(), ps.bestscore()
    
Antworten