我正在尝试优化机器学习任务的超参数,并编写了一个用于测试各种模型的函数。我希望能够采用网格搜索确定的最佳参数,并将它们放在一种格式中,这样当我准备好拟合模型时,我可以将它们作为关键字参数传递。
我有这个:
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 很陌生,所以任何帮助都将不胜感激!