python - 关于使用 scikit-learn GridSearchCV 调优超参数的问题
问题描述
在同一数据集上进行测试时,对超参数执行网格搜索能否保证性能提高?
我问是因为我的直觉是“是”,但是在调整正则化常数后我的分数略低:
classifier_os = LinearModel.LogisticRegression()
p_grid = {
'C': np.logspace(-3, 3, 7)
}
clf = model_selection.GridSearchCV(classifier_os, p_grid, scoring='accuracy')
clf.fit(x_train, y_train)
y_pred = clf.predict(x_test)
metrics.classification_report(y_pred, y_test, output_dict=True)
给我以下分数:
accuracy : 0.8218181818181818
macro avg:
precision : 0.8210875331564986
recall : 0.8213603058298822
f1-score : 0.8212129655428624
support : 275
与调优前相比:
accuracy : 0.8290909090909091
macro avg:
precision : 0.8287798408488063
recall : 0.8285358354537744
f1-score : 0.8286468069310212
调整改变的唯一一件事是使正则化常数 10 而不是默认的 1
解决方案
如果未指定,默认情况下 GridSearhCV 执行 5 倍 CV 并返回评分。有时,作为平均值返回的准确度可能不是一个很好的选择,因此 F1 是一个不错的选择。要添加,该函数还输出best_params
, best_score
。您将使用在最终模型中获得的 best_params 来测试它在调整后的效果。
参考:
网格搜索 Sklearn
推荐阅读
- java - 解析 JSON 并将对象添加到数组仅在第二次按下按钮时起作用?
- javascript - Vue.js 方法声明之间的区别
- git - 吉特 | 在提交时恢复未添加的文件
- angular - 如何删除 mat-grid-tile 之间的填充
- r - if (sjmisc::is_empty(x)) return(NULL) 出错:需要 TRUE/FALSE 的地方缺少值
- c# - 使用 .net core API 将 XML 文件下载到本地机器
- python - SymPy:求解线性方程组的超定系统
- r - 使用 RSelenium:找不到 Java
- bash - if 语句嵌套在 while 循环中,但它不起作用
- makefile - Opensplice 无法构建 dcpsisocpp2