1

我现在正在阅读一本关于机器学习的书。

在作者上工作NaiveBayesClassifier非常支持交叉验证方法。

他建议将数据分成十个桶(文件),并在每次保留一个不同的桶时对其中的九个进行训练。

到目前为止,我熟悉的唯一方法是将数据以 50%/50% 的比例分成训练集和测试集,然后简单地一次性训练分类器。

有人可以解释使用交叉验证的可能优势吗?

4

3 回答 3

5

交叉验证是一种解决偏差和方差之间权衡的方法。

当您在训练集上获得模型时,您的目标是最小化方差。您可以通过添加更多项、高阶多项式等来做到这一点。

但您的真正目标是预测模型从未见过的点的结果。这就是测试集模拟的情况。

您将在训练集上创建模型,然后在测试集上进行尝试。你会发现有一个最小的方差和偏差组合可以给你最好的结果。最小化两者的最简单模型应该是您的选择。

我推荐 Hastie 和 Tibshirani 的“统计学习简介”或“统计学习要素”以获取更多详细信息。

于 2015-04-19T18:06:56.370 回答
1

这个想法是有最大没有。点来训练模型以获得准确的结果。对于在训练集中选择的每个数据点,它都被排除在测试集中。所以我们使用 k 和 k-1 的概念,我们首先将数据集划分为相等的 k 个大小的 bin,我们取一个 bin 作为测试集,剩下的 k-1 个 bin 代表训练集。我们重复这个过程,直到所有的 bin 被选择一次作为测试集(k),剩下的作为训练(k-1)。这样做不会错过任何数据点用于训练目的

于 2020-10-18T09:44:31.470 回答
1

机器学习的总体目标是,用于训练的数据越多,获得的结果就越好。在我开始回答问题之前说明这一点很重要。

交叉验证有助于我们避免模型的过度拟合,也有助于提高泛化精度,即模型在未见的未来点上的精度。现在,当您将数据集划分为 dtrain 和 dtest 时,存在一个问题,即如果您的函数在您训练完模型后将确定需要训练和测试数据,那么您不能说您在未来看不见的点上的准确性是与您在测试数据上获得的准确性相同。上述论点可以通过 k-nn 的例子来说明,其中最近邻是在训练数据的帮助下确定的,而 k 的值是由测试数据确定的。

但是,如果您使用 CV,则 k 可以由 CV 数据确定,您的测试数据可以被视为看不见的数据点。

现在假设您将数据集分为 3 部分 Dtrain(60%)、Dcv(20%) 和 Dtest(20%)。现在你只有 60% 的数据可以训练。现在假设您想使用所有 80% 的数据进行训练,那么您可以借助 m-fold 交叉验证来做到这一点。在 m-fold CV 中,您将数据分为两部分 Dtrain 和 Dtest(比如说 80 和 20)。假设 m 的值为 4,因此您将训练数据随机分成 4 个相等的部分(d1,d2,d3,d4)。现在开始训练模型,将 d1,d2,d3 作为 dtrain 将 d4 作为 cv 并计算准确率,接下来将 d2,d3,d4 作为 dtrain 和 d1 作为 cv 并同样采用 m=1 的所有可能性,然后对于 m=2 继续相同的过程。这样,您就可以使用整个 80% 的 dtrain 并且您的 dtest 可以被视为未来看不见的数据集。

优点是更好和更多地使用您的 dtrain 数据,减少过拟合,并有助于为您提供确定的泛化精度。但不利的一面是时间复杂度很高。在您的情况下, m 的值为 10。

希望这可以帮助。

于 2019-07-29T04:40:20.947 回答