python-3.x 如何将字典中的参数从网格搜索输出到一系列关键字参数中

xriantvc  于 2023-01-06  发布在  Python
关注(0)|答案(1)|浏览(127)

我正在尝试优化机器学习任务的超参数,并编写了一个函数来测试各种模型,我希望能够采用网格搜索识别的最佳参数,并将它们放入一种格式,以便在准备拟合模型时将它们作为关键字参数传递。
我有这个:

def optimization(classifier):
    if classifier == LR:
         param_grid = {'class_weight': [None,'balanced'], 'solver': ['liblinear', 'sag']}
    if classifier == DT:
        param_grid = {'criterion': ['gini', 'entropy'], 'splitter': ['best', 'random'], 'class_weight': [None,'balanced']}
    if classifier == RF:
        param_grid = {'n_estimators': [10,20,30], 'criterion': ['gini', 'entropy']}
    print(str(classifier))
    print('Number of tested models: %i' % np.prod([len(param_grid[element]) for element in param_grid]))
    search = GridSearchCV(classifier(), param_grid, cv=10)
    search.fit(X,y)
    print('Best parameters: %s' % search.best_params_)
    print('Best score: ' + str(search.best_score_))

optimization(LR) # with LR being a logistic regression model

它会输出这个

<class 'sklearn.linear_model.logistic.LogisticRegression'>
Number of tested models: 4
Best parameters: {'solver': 'sag', 'class_weight': None}
Best score: 0.801363055516

理想情况下,我希望将输出中确定的最佳参数转换为如下形式:

solver=sag, class_weight=None

这样我以后就可以很容易地把它们插入到一个函数中。我对Python非常陌生,所以任何帮助都将不胜感激!

q3qa4bjr

q3qa4bjr1#

很久以前就有人问过这个问题了,但是除了最后一部分,你基本上都解决了,你可以把字典解包,然后像这样把它们作为函数参数放进去

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(**search.best_params_)

相关问题