Scikit learn 通过管道和网格搜索使用交叉值分数拟合嵌套交叉验证
我在scikit工作,我正在尝试调整我的XGBoost。 我尝试使用嵌套交叉验证,使用管道重新缩放训练折叠(以避免数据泄漏和过度拟合),并与GridSearchCV并行进行参数调整和交叉验证,以获得最后的roc_auc分数Scikit learn 通过管道和网格搜索使用交叉值分数拟合嵌套交叉验证,scikit-learn,nested,pipeline,cross-validation,grid-search,Scikit Learn,Nested,Pipeline,Cross Validation,Grid Search,我在scikit工作,我正在尝试调整我的XGBoost。 我尝试使用嵌套交叉验证,使用管道重新缩放训练折叠(以避免数据泄漏和过度拟合),并与GridSearchCV并行进行参数调整和交叉验证,以获得最后的roc_auc分数 from imblearn.pipeline import Pipeline from sklearn.model_selection import RepeatedKFold from sklearn.model_selection import GridSearchC
from imblearn.pipeline import Pipeline
from sklearn.model_selection import RepeatedKFold
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import cross_val_score
from xgboost import XGBClassifier
std_scaling = StandardScaler()
algo = XGBClassifier()
steps = [('std_scaling', StandardScaler()), ('algo', XGBClassifier())]
pipeline = Pipeline(steps)
parameters = {'algo__min_child_weight': [1, 2],
'algo__subsample': [0.6, 0.9],
'algo__max_depth': [4, 6],
'algo__gamma': [0.1, 0.2],
'algo__learning_rate': [0.05, 0.5, 0.3]}
cv1 = RepeatedKFold(n_splits=2, n_repeats = 5, random_state = 15)
clf_auc = GridSearchCV(pipeline, cv = cv1, param_grid = parameters, scoring = 'roc_auc', n_jobs=-1, return_train_score=False)
cv1 = RepeatedKFold(n_splits=2, n_repeats = 5, random_state = 15)
outer_clf_auc = cross_val_score(clf_auc, X_train, y_train, cv = cv1, scoring = 'roc_auc')
问题1。
如何将cross\u val\u score
与培训数据相匹配
问题2。
既然我在管道中包括了StandardScaler()
,那么在cross\u-val\u分数中包括X\u列
是否有意义,或者我应该使用X\u列
的标准形式(即std\u列
)
您选择了正确的方法来避免数据泄漏,正如您所说-嵌套CV
在嵌套CV中,你估计的不是你可以“拿在手里”的真实估计器的分数,而是描述模型选择过程的不存在的“元估计器”的分数
含义-在每一轮外部交叉验证中(在您的案例中,以交叉分数表示),估计器clf_auc接受内部CV,在外部CV的给定倍数下选择最佳模型。
因此,对于外部CV的每一个倍数,您都要对内部CV选择的不同估计值进行评分
例如,在一个外部CV折叠中,评分的模型可以是选择参数algo_uMIN_uCHILD_u权重为1的模型,而在另一个模型中,评分的模型可以是选择参数algo_uMIN_uCHILD_u权重为2的模型
因此,外部简历的分数代表了更高级别的分数:“在合理的模型选择过程中,我选择的模型的推广程度如何”
现在,如果你想在手头有一个真实的模型的情况下完成这个过程,你必须以某种方式选择它(cross_val_score不会帮你)
实现这一点的方法是现在在整个数据上拟合您的内部模型。
履行的含义:
clf_auc.fit(X, y)
现在是了解您在这里所做工作的时候:
您有一个可以使用的模型,该模型适用于所有可用数据
当你被问到“该模型对新数据的概括程度如何?”时,答案是你在嵌套简历中得到的分数——它将模型选择过程作为模型评分的一部分
关于问题#2-如果定标器是管道的一部分,那么没有理由从外部操纵X#U序列 @ShaharA没有足够的话来感谢你。非常感谢你明确的回答和友好的回复。我非常感谢你花时间提供如此详细的解释。你帮我了解了更多。再次感谢你,伙计!!
clf_auc.fit(X, y)