【问题标题】:Question on tuning hyper-parameters with scikit-learn GridSearchCV关于使用 scikit-learn GridSearchCV 调优超参数的问题
【发布时间】:2020-07-17 21:18:13
【问题描述】:

在同一数据集上进行测试时,对超参数执行网格搜索能否保证提高性能?

我问是因为我的直觉是“是”,但是在调整正则化常数后我得到的分数略低:

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

【问题讨论】:

    标签: python scikit-learn data-science


    【解决方案1】:

    如果未指定,默认情况下 GridSearhCV 会执行 5 倍 CV 并返回评分。有时,作为平均值返回的准确度可能不是一个很好的选择,因此 F1 是一个不错的选择。要添加,该函数还输出best_paramsbest_score。您将使用在最终模型中获得的 best_params 来测试它在调整后的效果。

    参考:
    Grid Search Sklearn

    【讨论】:

    • @rocksNwaves 有时调整参数会导致分数较低,因为构建模型将在测试实例上执行。我希望在调整参数之前和调整参数之后的整个执行过程中,训练和测试的分割保持不变。此外,另一个要考虑的替代方法是尝试对训练数据运行手动 K 折交叉验证,最后在未见过的实例上对其进行测试。
    • 是的,我将训练集/测试集保持不变。感谢您的回答,我会考虑您的建议。
    猜你喜欢
    • 2016-05-11
    • 2017-09-23
    • 2020-11-22
    • 2019-06-02
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 2021-07-29
    • 2016-12-07
    相关资源
    最近更新 更多