python分类器使用不同的参数**kwargs

2024-09-22 16:26:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想让我的代码更pythonic,或更优化,我卡住了。一天之后,我绞尽脑汁想知道如何正确地使用**kwargs,我能够在我的函数(train\u logreg)中使用它们。 当我直接把parametrs传递给train\u 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

Tags: 代码testl1getmodelevaltrainkwargs