模型评估:交叉验证(cross-validation)的使用

Rowena ·
更新时间:2024-11-13
· 584 次阅读

为什么要使用交叉验证? 如果我们有一个数据集,我们通保留20%作为验证集,其余作为训练集。但是我们训练的模型可能在这个验证集表现很好,在其他数据上表现不好。 通常情况下,验证集越大,我们的模型质量度量中的随机性(也就是“噪声”)就越小,它就越可靠。不幸的是,我们只能通过从我们的训练数据中删除行来获得一个大的验证集,而更小的训练数据集意味着更糟糕的模型!

交叉验证:例如,我们将数据等分成五份,实验一用第一份作为验证集,其余部分作为训练集。实验二用第二份作为验证集,其余作为训练集。以此类推,重复直到每一份都做了验证集。最后我们得到了基于整个数据集的模型质量度量。
交叉验证提供了更准确的模型质量度量,如果您正在做出许多建模决策,则这一点尤为重要。然而,它可能需要更长的运行时间,因为它估计了多个模型。

什么时候使用交叉验证?

1.对于小数据集,在这些数据集中,额外的计算负担并不是什么大问题,您应该使用交叉验证。
2.对于较大的数据集,一个验证集就足够了。你的代码将运行得更快,并且您可能有足够的数据,因此没有必要使用交叉验证。

例子

假设我们已经加载了数据X,y.

预处理和定义模型 from sklearn.ensemble import RandomForestRegressor from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer my_pipeline = Pipeline(steps=[('preprocessor', SimpleImputer()), ('model', RandomForestRegressor(n_estimators=50, random_state=0)) ]) 使用交叉验证 from sklearn.model_selection import cross_val_score # Multiply by -1 since sklearn calculates *negative* MAE scores = -1 * cross_val_score(my_pipeline, X, y, cv=5, scoring='neg_mean_absolute_error')#使用负MAE然后乘以-1 print("MAE scores:\n", scores) print("Average MAE score (across experiments):") print(scores.mean())#求平均值
作者:supreme_1



CROSS 交叉验证 交叉 模型

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章