- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑 3 个数据集训练/验证/测试。 Sklearns GridSearchCV 默认选择交叉验证分数最高的最佳模型。在预测需要准确的现实世界环境中,这是选择最佳模型的可怕方法。原因是因为它应该是这样使用的:
- 训练模型学习数据集
-Val 设置以验证模型在训练集中学到的内容并更新参数/超参数以最大化验证分数。
- 测试集 - 在看不见的数据上测试您的数据。
- 最后在实时环境中使用模型并记录结果以查看结果是否足以做出决策。令人惊讶的是,许多数据科学家仅根据选择验证分数最高的模型就冲动地在生产中使用他们经过训练的模型。我发现网格搜索可以选择过度拟合的模型,并且在预测看不见的数据方面比默认参数做得更差。
我的方法:
- 手动训练模型并查看每个模型的结果(在某种循环中,但效率不高)。这是非常手动和耗时的,但我得到的结果比网格搜索要好得多。我希望这是完全自动化的。
- 为我想选择的每个超参数绘制验证曲线,然后选择显示 train 和 val 集之间差异最小的超参数,同时最大化两者(即 train=98%, val = 78% 真的很糟糕,但 train=72 %, val=70% 是可以接受的)。
就像我说的,我想要一种更好的(自动化)方法来选择最佳模型。
我在寻找什么样的答案:
我想最大化训练集和验证集中的分数,同时最小化训练集和验证集之间的分数差异。考虑以下来自网格搜索算法的示例:
有两种型号:
Model A: train score = 99%, val score = 89%
Model B: train score = 80%, val score = 79%
B 型是一个更可靠的模型,我会选择 B 型而不是 A 型。它较少过拟合并且预测是一致的。我们知道会发生什么。但是网格搜索将选择模型 A,因为 val 分数更高。我发现这是一个常见问题,并且在 Internet 上的任何地方都没有找到任何解决方案。人们往往过于关注他们在学校学到的东西,而实际上并没有考虑选择过拟合模型的后果。我看到了关于如何使用 sklearn 和 caret gridsearch 包并让他们为您选择模型的冗余帖子,但没有看到如何实际选择最佳模型。
gs = GridSearchCV(model, params, cv=3).fit(X_train, y_train) # X_train and y_train consists of validation sets too if you do it this way, since GridSearchCV already creates a cv set.
final_model = gs.best_estimator_
train_predictions = final_model.predict(X_train)
val_predictions = final_model.predict(X_val)
test_predictions = final_model.predict(X_test)
print('Train Score:', accuracy_score(train_predictions, y_train)) # .99
print('Val Score:', accuracy_score(val_predictions, y_val)) # .89
print('Test Score:', accuracy_score(test_predictions, y_test)) # .8
如果我看到类似上面的内容,我将排除该模型并尝试不同的超参数,直到获得一致的结果。通过手动拟合不同的模型并查看所有 3 个结果、验证曲线等……我可以决定什么是最好的模型。我不想手动执行此操作。我希望这个过程是自动化的。网格搜索算法每次都会返回过拟合模型。我期待听到一些答案。
最佳答案
我同意使用测试集选择超参数不需要验证集 (/folds),并使测试集分数不再代表 future 性能的评论。您可以通过“在实时提要上测试模型”来解决这个问题,这样很好。
I'll even give the scenario where I take out the test set - it's the same problem. The gridsearch algorithm picks the model with the highest validation score. It doesn't look at the difference between the train score and val score. The difference should be close to 0. A train score of 99% and a val score of 88% is not a good model, but grid search will take that over train score of 88% and val score of 87%. I would choose the second model.
sklearn
从 v0.20 开始实际上确实适应了这一点:通过使用
return_train_score=True
和
refit
作为消耗
cv_results_
的可调用对象并返回最佳索引:
refit : bool, str, or callable, default=True
...
Where there are considerations other than maximum score in choosing a best estimator, refit can be set to a function which returns the selected best_index_ given cv_results_. In that case, the best_estimator_ and best_params_ will be set according to the returned best_index_ while the best_score_ attribute will not be available.
...
关于python - 如何在 GridSearchCV 中正确选择最佳模型 - sklearn 和 caret 都做错了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58648017/
考虑以下网格搜索: grid = GridSearchCV(clf, parameters, n_jobs =-1, iid=True, cv =5) grid_fit = grid.fit(X_tr
我正在做一个 GridSearchCV,我已经监控了核心的百分比,并且我看到当我运行一个简单的神经网络时,4 个核心具有相同的百分比,但是当网格搜索 cv (n_jobs = 1) 开始时在情节的线条
我在带有 RBF 内核的 SVM 上进行了网格搜索 + 交叉验证,以使用类 GridShearchCV 找到参数 C 和 gamma 的最佳值。现在我想以表格格式获得结果,例如 C/gamma 1e-
我正在尝试为 sklearn 的 GridSearchCV 结果生成热图。我喜欢的东西sklearn-evaluation是因为生成热图真的很容易。但是,我遇到了一个问题。当我将参数设为 None 时
我想提高这个的参数GridSearchCV 对于 随机森林回归器 . def Grid_Search_CV_RFR(X_train, y_train): from sklearn.model_
我正在尝试设置 GridSearchCV 的实例来确定哪一组超参数将产生最低的平均绝对误差。 This scikit documentation表示分数指标可以在创建 GridSearchCV 时传递
当使用网格搜索在 python 中使用此函数 GridSearchCV() 进行分类器时,假设我们有一个参数区间来调整形式 1 到 100,我们如何能够指定它(1:100 不起作用)? p> 最佳答案
我是机器学习的新手,并且一直坚持这个。 当我尝试在线性模型中实现多项式回归时,例如使用多个次数的多项式范围(1,10)并获得不同的 MSE。我实际上使用 GridsearchCV 方法来查找多项式的最
我想在一系列 alpha(拉普拉斯平滑参数)上使用 GridSearchCV 来检查哪个为伯努利朴素贝叶斯模型提供了最佳准确度。 def binarize_pixels(data, threshold
使用 sklearn 在随机森林分类器上运行网格搜索。这个运行的时间比我想象的要长,我正在尝试估计这个过程还剩多少时间。我认为它的总拟合次数是 3*3*3*3*5 = 405。 clf = Rando
我正在尝试使用网格搜索找出要在 PCA 中使用的 n_components 的最佳值: from sklearn.decomposition import PCA from sklearn.grid_
我正在尝试 GridsearchCV 但我希望在 param grid 中有一些异常(exception)。这是我的网格搜索代码: from sklearn.model_selection impor
我很难找出 GridSearchCV 中的参数 return_train_score。来自docs : return_train_score : boolean, optional If
我必须进行多类分类 (3)。我使用 GridSearchCV 为我的分类器搜索最佳参数。 但我有一个不平衡的 x_train(和 x_test):0 有 3079 个实例,1 有 12 个实例,3 有
有没有办法访问在 GridSearchCV 过程中计算的预测值? 我希望能够根据实际值(来自测试/验证集)绘制预测的 y 值。 网格搜索完成后,我可以使用 将其与其他一些数据相匹配 ypred =
我正在使用GridsearchCV来调整超参数,现在我想在训练和验证步骤中进行最小-最大Normalization(StandardScaler())。但我认为我不能做到这一点。 问题是: 如果我对整
我正在使用 scikit learn 进行多标签分类。我使用 RandomForestClassifier 作为基本估计器。我想使用 GridSearchCV 优化每个标签的参数。目前我正在按以下方式
好的,我只想说,我对 SciKit-Learn 和数据科学完全陌生。但这是问题所在,也是我目前对该问题的研究。代码在底部。 总结 我正尝试使用 BernoulliRBM 进行类型识别(例如数字),并尝
我正在使用 GridSearchCV ,并且在每次迭代之后,我想将 clf.cv_results_ 属性保存到一个文件中(以防进程在中间崩溃)。 我尝试寻找解决方案,但就是想不通。 我们将不胜感激。
我正在尝试自学如何在基本的多层神经网络中对神经元的数量进行网格搜索。我正在使用 Python 的 GridSearchCV 和 KerasClasifier 以及 Keras。下面的代码适用于其他数据
我是一名优秀的程序员,十分优秀!