在获取数据集后,从数据集中总结规律有很多种算法,那如何判断这些算法中的哪一个更适合当前的数据分析呢?此时,可以利用数据集对算法进行评估。评估就是估计算法在预测新数据的时候能达到什么程度,但这不是对算法准确度的的保证。当评估完算法模型之后,可以用整个数据集重新训练算法,生成最终的算法模型。以下为四种不同的分离数据集的方法:
要使用已有的数据来评估算法,最简单的方法就是将评估数据集和训练集完全分开,采用评估数据集来评估算法模型。将原始数据集分为两部分:一部分用来训练算法生成模型,一部分通过模型来预测结果,并与已知的结果进行比较,来评估算法模型的准确度。通常数据集分配比例为67%训练、33%评估。
该方法的应用场景为:具有大量数据、数据分布比较平衡,或者对问题的展示比较平均的情况下
使用示例:
1 | #导入csv步骤省略 |
K折交叉验证是指将原始数据集分成K组,将每个子集数据分别做一次验证集,其余的K-1个子集作为训练集,如此,可得K个模型,再用这K个模型最终的验证集的分类准确率的平均数,作为此K折交叉验证下分类器的性能指标。
使用示例:
1 | num_folds=10 |
一般情况下,K的取值为3,5,10,如果数据集中数据量特别小,可以使用2。K折交叉验证是用来评估机器学习算法的黄金准则。
弃一交叉验证与K折有一定的类似的地方,都是取出数据集的一部分作为训练集,剩余部分作为验证集,如此反复,互为训练集又互为验证集。只不过,弃一交叉验证的面更广,如果有原始数据有N个样本,那么弃一交叉验证就是N-1个交叉验证。其优势显而易见,全面、可靠,其劣势也同样明显,量大,计算成本高。
使用示例:
1 | loocv=LeaveOneOut() |
这是一种扩展后的K折交叉验证,其重复多次后,基本与交叉验证分离类似了。
弃一及重复两种方法,通常会用于平衡评估算法、模型训练的速度及数据集的大小。