python - 通过 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 的情况下,它肯定是最好的超参数。
这会导致任何问题吗?
在执行时 Gridsearchcv 对这个值做了什么?
这会导致获得结果的任何延迟(大规模完成时)?
解决方案
- 这会导致任何问题吗?
绝对不会造成任何问题。只需确保将这些单个值作为列表提供。
- 在执行时 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
推荐阅读
- portability - 如何在 aarch64 上检测 crc32
- vue.js - 获取所有子数据后的 vuejs 父事件
- c++ - 如何在 mac os 10.14 上安装 vcremote?
- javascript - 在 django 中使用这个 d3 仪表?
- java - 对应用程序使用身份验证设置时获得 401 响应
- python - python在“配对”进程上并行启动/等待(可能是popen/wait/subprocess?)
- python - 试图从整数列表中删除两个最低值,不知道如何?
- c# - C# WPF Listview 项目刷新在 OnPropertyChanged 后未触发
- visual-studio - 特定文件的 Visual Studio 自定义编辑器
- c# - 向下转换泛型参数时如何修复转换错误