交叉验证:R中的概念和例子
2017-12-28 23:21 作者:FintechProbe编译 收藏(0) 阅读(2599) 评论(0)

IFTNews:什么是交叉验证? 在机器学习中,交叉验证是一种重新采样的方法,用于模型评估,以避免在同一数据集上测试模型。这是一个常见的错误,尤其是一个单独的测试数据集并不总是可用的。然而,这通常会导致不准确的性能度量因为模型将会有一个几乎完美的分数,因为它是在经过训练的相同数据上测试的。为了避免这种错误,交叉验证通常是首选。 交叉验证的概念实际上很简单:我们可以将数据随机分为训练和测试数据集,而不是使用整个数据集来训练和测试相同的数据。 交叉验证方法有几种类型LOOCV - leave -one- out交叉验证,holdout方法,k - fold交叉验证。这里,我将讨论k - fold交叉验证方法。 k - fold主要由以下步骤组成: 将数据随机分成k个子集,也称为折叠。 将模型拟合到训练数据(或k-1个折叠)上。 使用剩余部分的数据作为测试集来验证模型。 (通常,在这一步中测量模型的精度或测试误差)。 重复该过程k次。 下面是从维基百科采取的程序的一个简单的例子。


怎么用R来做呢?

在下面的练习中,我使用逻辑回归来预测泰坦尼克号数据集中的一个乘客是否存活下来。其目的是为了找到一个预测的最优阈值,以确定是否将结果分类为1或0。

阈值示例:考虑模型预测了两名乘客的以下值:p1 = 0.7,p2 = 0.4。如果阈值为0.5,则p1>阈值和乘客1处于幸存类别中。而p2 <阈值,所以乘客2处于未存活类别。

但是,根据我们的数据,0.5“默认”的阈值将不能确保正确分类的最大数量。在这种情况下,我们可以使用交叉验证来根据在验证集上运行模型的结果来确定每个折叠的最佳阈值。

在执行过程中,我遵循以下步骤:

将数据随机分为80训练和验证,20不可见数据的测试。

对80%的数据进行交叉验证,这些数据将用于培训和验证模型。

在验证数据集上运行模型后,根据每次折叠迭代的最佳精度获取最佳阈值。

找到最佳阈值具有最高精度的阈值,并在测试该模型与测试数据集时使用它作为中断。

注意:ROC通常是找到最佳“截止”概率的最佳方法,但为了简单起见,我在下面的代码中使用了准确性。

下面的cross_validation方法将:

创建一个“perf”数据框,将数据存储在验证数据上的模型测试结果。

使用createFolds方法创建nbfolds折叠数。

在每一个折叠上:

训练k-1倍的模型

在剩余部分数据上测试模型

使用性能方法测量模型的准确性。

将最优阈值和它的精度添加到perf dataframe中。

在perf dataframe中查看optThresh——具有最高精度的阈值。

在测试集上测试模型(原始数据的20%)时,将其用作截止值。

使用F1分数来衡量模型的准确性。


那么,如果我们运行这个方法100次,我们可以测量使用交叉验证时的最大模型精度:



我们可以看到,在使用阈值选择的准确性方法时,我们的最大性能大约是0.885,考虑到该模型正在对不可见数据进行测试,所以这并不差。

我们可以看到,当使用精度方法进行阈值选择时,我们的最大性能约为0.885,


作者:SONDOSATWI

来源:wordpress

编译:FintechProbe

转载请注明来自:www.ifintechnews.com