为多个回归量提取网格搜索值

时间:2017-09-13 06:43:44

标签: python machine-learning scikit-learn grid-search

我在Python中使用sklearn,我为网格搜索创建了多个Regressor,如:

def randomFF_reg():
    params = {'n_estimators':[10,30,50],'max_features':['log2','sqrt']}
    return RandomForestRegressor(),params

def lasso_reg():
    params = {'alpha':[1e-1, 1, 10, 100]}
    return linear_model.Lasso(),params

现在,我在GridSearchCV中调用这些函数,如下所示:

grid = GridSearchCV(lasso_reg()).fit(X, y)
best_params =list(grid.cv_results_['params'])

但我的问题是我必须提取并分析最佳拟合模型的结果。不同的回归程序具有不同的参数,这些参数经过调整,因此当我为Linear RegressionLasso Regression运行以下行时,它可以正常工作:

parameters =[prms[best_params[0].keys()[0]] for prms in best_params]

但是为具有多个参数的回归量提供错误,例如RandomForest Regressors,DecisionTree Regressors等。有没有办法为具有多个参数的回归量提取值?

1 个答案:

答案 0 :(得分:4)

您需要检查best_params中的密钥长度。这适用于任何类型的回归器,无论是单参数还是多参数:

if len(best_params[0].keys())>1:
        parameters = list(itertools.product(*best_params.values()[::-1]))
    else:
        parameters =[prms[best_params[0].keys()[0]] for prms in best_params]