使用计分器实现 GridSearchCV 以进行留一法交叉验证
Implementing GridSearchCV with scorer for Leave One Out Cross-Validation
我正在尝试为高斯过程回归 (GPR) 实施 scikit-learn 的 GridSearchCV。我正在使用约 200 个点的小型数据集,并且想使用 LOOCV 作为我模型的性能评估器。我的设置是:
from sklearn.model_selection import *
from sklearn.ensemble import *
from sklearn.gaussian_process import *
param_grid = {
'kernel':[kernels.RBF(),kernels.Matern(length_scale=0.1)],
'n_restarts_optimizer':[5,10,20,25],
'random_state':[30]
}
res_GPR = GridSearchCV(estimator=GaussianProcessRegressor(),param_grid=param_grid,cv=LeaveOneOut(),verbose=20,n_jobs=-1)
res_GPR.fit(X,y)
其中 X 和 y 分别是我的数据点和目标值。
我知道 GPR 返回的评分方法是 r^2,这对于 LOOCV 情况是不可定义的(因为只有一个测试元素)——这是通过获得拟合模型的 .best_score_ 属性的 NaN 来验证的.
因此,我希望模型仅使用每个测试用例的均方根误差 (RMSE) 进行评分,并在所有迭代中取平均值。将不胜感激有关如何实施此评估方法的任何意见。
GridSearchCV
包含一个 scoring
参数,您可以使用它来将分数设置为负 RMSE:
res_GPR = GridSearchCV(estimator=GaussianProcessRegressor(),
param_grid=param_grid,
cv=LeaveOneOut(),
verbose=20,
n_jobs=-1,
scoring = 'neg_root_mean_squared_error')
有关更多信息,请参阅 documentation and the list of available scores。
我正在尝试为高斯过程回归 (GPR) 实施 scikit-learn 的 GridSearchCV。我正在使用约 200 个点的小型数据集,并且想使用 LOOCV 作为我模型的性能评估器。我的设置是:
from sklearn.model_selection import *
from sklearn.ensemble import *
from sklearn.gaussian_process import *
param_grid = {
'kernel':[kernels.RBF(),kernels.Matern(length_scale=0.1)],
'n_restarts_optimizer':[5,10,20,25],
'random_state':[30]
}
res_GPR = GridSearchCV(estimator=GaussianProcessRegressor(),param_grid=param_grid,cv=LeaveOneOut(),verbose=20,n_jobs=-1)
res_GPR.fit(X,y)
其中 X 和 y 分别是我的数据点和目标值。 我知道 GPR 返回的评分方法是 r^2,这对于 LOOCV 情况是不可定义的(因为只有一个测试元素)——这是通过获得拟合模型的 .best_score_ 属性的 NaN 来验证的. 因此,我希望模型仅使用每个测试用例的均方根误差 (RMSE) 进行评分,并在所有迭代中取平均值。将不胜感激有关如何实施此评估方法的任何意见。
GridSearchCV
包含一个 scoring
参数,您可以使用它来将分数设置为负 RMSE:
res_GPR = GridSearchCV(estimator=GaussianProcessRegressor(),
param_grid=param_grid,
cv=LeaveOneOut(),
verbose=20,
n_jobs=-1,
scoring = 'neg_root_mean_squared_error')
有关更多信息,请参阅 documentation and the list of available scores。