我现在正在编写一本关于机器学习的书。
使用NaiveBayesClassifier
作者非常赞成cross-validation method
他建议将数据拆分成十个存储桶(文件),并在每次使用不同存储桶时对其中的九个进行训练。
到目前为止,我所熟悉的唯一方法是将数据以training set
的比例分成test set
和50%/50%
,并简单地一次训练分类器。
有人可以解释使用交叉验证的可能优势 - 这会很好。
谢谢。
干杯, 安德鲁
答案 0 :(得分:4)
交叉验证是解决偏差和方差之间权衡的一种方法。
当您在训练集上获得模型时,您的目标是最小化方差。您可以通过添加更多术语,更高阶多项式等来实现此目的。
但你真正的目标是预测模型从未看到的点的结果。这就是提供测试集的模拟。
您将在训练集上创建模型,然后在测试集上进行尝试。您会发现方差和偏差的最小组合可以产生最佳效果。最简单的模型应该是您的选择。
我建议"统计学习简介"或"统计学习的要素"由Hastie和Tibshirani提供更多详情。
答案 1 :(得分:1)
这个想法是最大数量。训练模型以获得准确结果的点数。对于训练集中选择的每个数据点,将其从测试集中排除。因此,我们使用k和k-1的概念,首先将数据集划分为相等的k个大小的容器,然后将一个容器设为测试集,其余的k-1个容器代表火车集。重复此过程,直到所有bin都被选择为测试集(k),其余的都被训练为(k-1)。这样做没有遗漏任何数据点用于训练目的
答案 2 :(得分:0)
机器学习的总体目标是,您拥有的训练数据越多,您得到的结果就越好。在我开始回答问题之前,请务必先陈述一下。
交叉验证有助于我们避免模型的过度拟合,并且还有助于提高泛化精度,这是该模型在看不见的未来点上的准确性。现在,当您将数据集划分为dtrain和dtest时,存在一个问题,即一旦训练模型后要确定的函数同时需要训练和测试数据,那么您就不能说在未来看不见的点上的准确性是与测试数据的准确性相同。可以通过以k-nn为例来说明上述论点,其中k是由训练数据确定的,而k的值是由测试数据确定的。
但是,如果您使用CV,则k可以由CV数据确定,而您的测试数据可以视为看不见的数据点。
现在假设您将数据集分为3部分:Dtrain(60%),Dcv(20%)和Dtest(20%)。现在,您只有60%的数据需要训练。现在,假设您要使用所有80%的数据进行训练,那么您可以借助m-fold交叉验证来做到这一点。在m折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%的偏差,并且您的dtest可以被视为将来看不见的数据集。
优点是更好,并更多地使用dtrain数据,减少了过拟合,并有助于确保确定的泛化精度。 但不利的是,时间复杂度很高。 在您的情况下,m的值为10。
希望这会有所帮助。