如何使用 cross_val_score 来拟合我的测试数据?
How do I use cross_val_score to fit my test data?
我正在尝试了解 cross_val_score() 的用法。我了解它是如何工作的,以及它的目的。但让我们看一下简单的例子
reg = LinearRegression()
cv_scores = cross_val_score(reg, X_train, y_train, cv=5)
cv_scores = cross_val_score(reg, X_train, y_train, cv=10)
假设在 cv=5 和 cv=10 的情况下,a 的平均得分分别为 .91 和 .84。我如何使用该信息来拟合我的测试数据?
我能想到的一种方法是在 GridSearchCV 中使用 CV 的最佳值,即 5,并拟合训练数据和预测测试数据。那正确吗?如果可以,可以在不使用 GridSearchCV 的情况下执行该任务吗?
欢迎来到机器学习的世界,在这里评估模型的性能是一种乐趣。
k
一般是你设置的超参数,但是怎么选择呢?好吧,对此没有确切的法律。经验法则是:k = min(10, sqrt(n))
,其中 n
是您拥有的数据点数。
更有趣的是k
小或大的含义是什么?小 k
(例如 2)意味着我们需要大量数据(其中 50%)进行验证,我们的模型可能无法捕获数据的全部复杂性,这会导致测试偏差增加(模型欠拟合)。大 k
意味着我们无法相信我们从(小)测试数据集得出的误差估计,因为它可能无法代表我们数据的整体复杂性。这导致高测试方差。
这是一个很好的博客post,它更详细地解释了一切:https://codesachin.wordpress.com/2015/08/30/cross-validation-and-the-bias-variance-tradeoff-for-dummies/
在你的具体情况下,我建议不要只看你的 cross_val_score 的平均值,还要看标准差。这将使您更深入地了解您的模型如何在测试数据上执行。 GridSearchCV 本身是一个为您的模型查找超参数的工具,k
的值可以说是超超参数。
这里您需要了解的是 cv 参数 并不 指代您的模型,而是指您将如何执行交叉验证。在这种情况下,您正在比较 5 倍和 10 倍交叉验证。
请记住,您尝试使用交叉验证的目的是估计将您的方法应用于一般人群时的误差。在最小二乘线性回归的情况下,留一法 CV 误差将渐近地成为具有最小偏差 + 方差的 CV。然而在实践中,差异不会太大,这主要与小样本量有关。
现在,为什么 需要 "test error" 的估计值?因为当你解决大多数模型时,你试图最小化的恰恰是应用于训练数据的误差函数,所以如果你不小心并且你的模型太复杂,你会在你的训练数据上得到很好的结果,但不是在人口中。完成简历是为了确保不会发生这种情况。在线性回归中,通常你通过改变 特征数量 来做 CV(前向选择,或者如果你不介意在偏差错误中付出一些代价,则使用类似套索的东西),并修复 cv =5(或 10,在大多数情况下并不重要)
我正在尝试了解 cross_val_score() 的用法。我了解它是如何工作的,以及它的目的。但让我们看一下简单的例子
reg = LinearRegression()
cv_scores = cross_val_score(reg, X_train, y_train, cv=5)
cv_scores = cross_val_score(reg, X_train, y_train, cv=10)
假设在 cv=5 和 cv=10 的情况下,a 的平均得分分别为 .91 和 .84。我如何使用该信息来拟合我的测试数据?
我能想到的一种方法是在 GridSearchCV 中使用 CV 的最佳值,即 5,并拟合训练数据和预测测试数据。那正确吗?如果可以,可以在不使用 GridSearchCV 的情况下执行该任务吗?
欢迎来到机器学习的世界,在这里评估模型的性能是一种乐趣。
k
一般是你设置的超参数,但是怎么选择呢?好吧,对此没有确切的法律。经验法则是:k = min(10, sqrt(n))
,其中 n
是您拥有的数据点数。
更有趣的是k
小或大的含义是什么?小 k
(例如 2)意味着我们需要大量数据(其中 50%)进行验证,我们的模型可能无法捕获数据的全部复杂性,这会导致测试偏差增加(模型欠拟合)。大 k
意味着我们无法相信我们从(小)测试数据集得出的误差估计,因为它可能无法代表我们数据的整体复杂性。这导致高测试方差。
这是一个很好的博客post,它更详细地解释了一切:https://codesachin.wordpress.com/2015/08/30/cross-validation-and-the-bias-variance-tradeoff-for-dummies/
在你的具体情况下,我建议不要只看你的 cross_val_score 的平均值,还要看标准差。这将使您更深入地了解您的模型如何在测试数据上执行。 GridSearchCV 本身是一个为您的模型查找超参数的工具,k
的值可以说是超超参数。
这里您需要了解的是 cv 参数 并不 指代您的模型,而是指您将如何执行交叉验证。在这种情况下,您正在比较 5 倍和 10 倍交叉验证。
请记住,您尝试使用交叉验证的目的是估计将您的方法应用于一般人群时的误差。在最小二乘线性回归的情况下,留一法 CV 误差将渐近地成为具有最小偏差 + 方差的 CV。然而在实践中,差异不会太大,这主要与小样本量有关。
现在,为什么 需要 "test error" 的估计值?因为当你解决大多数模型时,你试图最小化的恰恰是应用于训练数据的误差函数,所以如果你不小心并且你的模型太复杂,你会在你的训练数据上得到很好的结果,但不是在人口中。完成简历是为了确保不会发生这种情况。在线性回归中,通常你通过改变 特征数量 来做 CV(前向选择,或者如果你不介意在偏差错误中付出一些代价,则使用类似套索的东西),并修复 cv =5(或 10,在大多数情况下并不重要)