Классификатор Python различных параметров с использованием ** kwargs - PullRequest
0 голосов
/ 15 марта 2019

Я хочу сделать свой код более питонным или более оптимизированным, и я застрял. После дня, когда я обернулся, чтобы понять, как правильно использовать ** kwargs, я смог использовать их в своей функции (train_logreg). Когда я напрямую передаю параметры в функцию train_logreg:

model = train(X_train_sc, y_train, solver='liblinear', penalty='l1', C=1.0)

Работает как положено. Однако я хочу автоматизировать изменение параметров [решатель, штраф, C]. Вы можете мне помочь? Ниже вы найдете код:

def train_logreg(X_train_sc, y_train, **kwargs):
    clf = LogisticRegression(random_state=0, 
                             class_weight='balanced',
                             solver=kwargs.get('solver', 'sag'),
                             penalty=kwargs.get('penalty', 'l2'), 
                             C=kwargs.get('C', 1.0))
    model = clf.fit(X_train_sc, y_train)
    return model 

def eval_model(X_test_sc, y_test):
    return model.score(X_test_sc, y_test)

scores = []

for hyperparameters in [{'train_function':train_logreg}]:
    train = hyperparameters.get('train_function')
    model = train(X_train_sc, y_train, solver='liblinear', penalty='l1', C=1.0)
    scores.append(["solver='liblinear', penalty='l1', C=1.0",eval_model(X_test_sc, y_test), eval_model(X_train_sc, y_train)])
    model = train(X_train_sc, y_train, solver='liblinear', penalty='l1', C=0.5)
    scores.append(["solver='liblinear', penalty='l1', C=0.5",eval_model(X_test_sc, y_test), eval_model(X_train_sc, y_train)])
    model = train(X_train_sc, y_train, solver='liblinear', penalty='l1', C=0.1)
    scores.append(["solver='liblinear', penalty='l1', C=0.1",eval_model(X_test_sc, y_test), eval_model(X_train_sc, y_train)])
    model = train(X_train_sc, y_train)
    scores.append(["default",eval_model(X_test_sc, y_test), eval_model(X_train_sc, y_train)])

scores
...