首页 > 解决方案 > 通过 Gridsearchcv 添加模型超参数有什么缺点

问题描述

通过 Gridsearchcv 添加超参数会产生哪些缺点,

假设我有这个管道

pipe_svm = Pipeline([
        ('clf', svm.SVC()])

而且我也在使用Gridsearchcv,

param_range =[1]
gs_svm = GridSearchCV(estimator=pipe_svm,
    param_grid={'clf__C':param_range}) 

为了简单起见,我只使用了一个超参数,即 C(误差项惩罚参数)

从功能上讲,使用 Gridsearchcv 的方案是从给定的一组值中找到最佳超参数,但在这种情况下,仅提供一个值为 1 的情况下,它肯定是最好的超参数。

标签: pythonscikit-learn

解决方案


  • 这会导致任何问题吗?

绝对不会造成任何问题。只需确保将这些单个值作为列表提供。

  • 在执行时 Gridsearchcv 对这个值做了什么?

它将仅对那一种超参数组合执行 k 倍 CV。

  • 这会导致获得结果的任何延迟(大规模完成时)?

当您将 n_jobs>1 设置为 1 时,可能会有一些开销,因此当您认为超参数组合的数量会很小时,将其设置为 1。

更新:

如果您出于某种原因想避免交叉验证,那么您可以定义您的训练和测试拆分方式。然后将该拆分作为迭代器提供。

例子:

from sklearn import svm, datasets
from sklearn.model_selection import GridSearchCV
iris = datasets.load_iris()
parameters = {'C':[1]}
svc = svm.SVC()
train_ind = np.random.choice(np.arange(150), size=100, replace=False)
cv_split_iter = [(train_ind, np.setdiff1d(np.arange(150), train_ind)),]
clf = GridSearchCV(svc, parameters, cv=cv_split_iter)
clf.fit(iris.data, iris.target)
pd.DataFrame(clf.cv_results_)

#   mean_fit_time  std_fit_time  mean_score_time  std_score_time param_C    params  split0_test_score  mean_test_score  std_test_score  rank_test_score
#0           0.00          0.00             0.00            0.00       1  {'C': 1}               0.92             0.92            0.00                1

推荐阅读