- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图理解 sklearn 的 GridSearchCV 。我对 GridsearchCV 中交叉验证的使用有一些基本问题,然后我该如何进一步使用 GridsearchCV 的建议
假设我声明了一个 GridsearchCV 实例,如下所示
from sklearn.grid_search import GridSearchCV
RFReg = RandomForestRegressor(random_state = 1)
param_grid = {
'n_estimators': [100, 500, 1000, 1500],
'max_depth' : [4,5,6,7,8,9,10]
}
CV_rfc = GridSearchCV(estimator=RFReg, param_grid=param_grid, cv= 10)
CV_rfc.fit(X_train, y_train)
我有以下问题:
假设在第一次迭代中选择 n_estimators = 100
和 max_depth = 4
进行模型构建。现在将为此计算score
借助 10 倍交叉验证来选择模型?
a。我对流程的理解如下
X_train
和 y_train
将分为 10 组。score_list
score_list
中,总共得到 10 分n_estimators = 100
和 max_depth = 4
b。将使用 n_estimators
和 max_depth
的所有其他可能组合重复上述过程,每次我们都会获得该模型的final_score
c.最佳模型将是具有最高 final_score 的模型,我们将通过 CV_rfc.best_params_
我对GridSearchCV
的理解正确吗?
{'max_depth': 10, 'n_estimators': 100}
。我声明模型的实例如下RFReg_best = RandomForestRegressor(n_estimators = 100, max_depth = 10, random_state = 1)
我现在有两个选择,哪个是正确的,这就是我想知道的
a.对整个数据集使用交叉验证来查看模型的性能,如下所示
scores = cross_val_score(RFReg_best , X, y, cv = 10, scoring = 'mean_squared_error')
rm_score = -scores
rm_score = np.sqrt(rm_score)
b.在 X_train、y_train 上拟合模型,然后在 X_test、y_test 上进行测试
RFReg_best.fit(X_train, y_train)
y_pred = RFReg.predict(X_test)
rm_score = np.sqrt(mean_squared_error(y_test, y_pred))
或者两者都是正确的
最佳答案
关于(1),你的理解确实是正确的;原则上需要纠正的措辞细节是“更好final_score
”而不是“更高”,因为有几个性能指标(衡量错误的所有指标) >,例如 MSE、MAE 等),越低越好。
现在,步骤 (2) 更加棘手;它需要退一步检查整个过程......
首先,CV 通常用于参数调整(您的步骤 1)或模型评估(即您在步骤 2 中尝试执行的操作) ),这确实是不同的事情。正如您在此处所做的那样,从一开始就将数据拆分为训练集和测试集,然后依次执行步骤 1(用于参数调整)和 2b(在未见数据中进行模型评估)可以说是最有效的原则上“正确”的程序(至于您在评论中注意到的偏差,这是我们必须忍受的,因为默认情况下,我们所有的拟合模型都“偏向”用于训练的数据,这是无法避免的)。
然而,从一开始,从业者就一直想知道是否可以避免仅仅为了测试(模型评估)目的而“牺牲”一部分宝贵的数据,并尝试看看是否真的可以跳过模型评估部分(以及测试集本身),使用从参数调整过程(步骤 1)获得的最佳结果作为模型评估。这显然是在偷工减料,但是,与往常一样,问题是实际结果会有多大?以及它仍然有意义吗?
再次,在理论上,Vivek Kumar 在他的 linked answer 中写道。正确的是:
If you use the whole data into GridSearchCV, then there would be leakage of test data into parameter tuning and then the final model may not perform that well on newer unseen data.
但这里是(强烈推荐)Applied Predictive Modeling 的相关摘录书(第 78 页):
简而言之:如果你在步骤 1 中使用整个 X
并将调优的结果视为模型评估,确实会存在偏差/泄漏,但通常很小,至少对于中等规模的训练集...
总结:
X
,并且很可能您的模型评估仍处于可接受的范围内。关于python - GridsearchCV 和 Kfold 交叉验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53481349/
考虑以下网格搜索: 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。下面的代码适用于其他数据
我是一名优秀的程序员,十分优秀!