Я хочу сделать свой код более питонным или более оптимизированным, и я застрял. После дня, когда я обернулся, чтобы понять, как правильно использовать ** 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