在进行机器学习模型验证时,往往需要用到交叉验证。Oracle为机器学习提供了非常优秀的交叉验证工具——“oraclesql.rqscript”。
交叉验证是机器学习模型验证过程中的一个重要环节,它需要将数据集分为训练集和测试集,用训练集训练模型,用测试集验证模型准确性。一般来说,数据集中选出20%~30%的数据作为测试集。因为在机器学习中,如果训练数据与测试数据分布不一致,那么模型在测试数据上的表现就无法反映出真实情况。
但是,在数据集过于小的情况下,每次划分出的训练集和测试集会影响模型的准确性。此时,我们需要使用交叉验证来降低对数据集大小的依赖。交叉验证会对数据集进行多次随机分割,每次都选出一部分数据作为测试集,剩下的数据作为训练集,以此来测定模型的准确性。
下面使用一段代码来演示oraclesql.rqscript如何完成交叉验证:
BEGIN DECLARE SAMPLE_DATA SET('id', 'input', 'expected_output') := CHOOSE RANDOM SAMPLE FROM. SIZE 100; TRAIN_DATA SET('id', 'input', 'expected_output'); TEST_DATA SET('id', 'input', 'expected_output'); TEST_RATIO NUMBER := 0.3; CV_RESULT TABLE('id', 'accuracy') := TABLE(); BEGIN FOR I IN 1..3 LOOP -- 3-fold cross-validation -- Split the Sample Data into Training and Test Sets SELECT * BULK COLLECT INTO TRAIN_DATA, TEST_DATA FROM ( SELECT ID, INPUT, EXPECTED_OUTPUT FROM SAMPLE_DATA SAMPLE (90) SEED (I) ) WHERE ROWID IN (SELECT MIN(ROWID) FROM DUAL UNION ALL SELECT MAX(ROWID) FROM DUAL); ... END LOOP; END; END;
上述代码中,我们使用了一个随机选取样本数据的集合。我们将样本数据分为测试集和训练集,其中测试集占数据集的30%。为进行方便,我们使用3-fold交叉验证。
我们首先选择第一组测试集和训练集,然后将训练集输入到模型中进行训练,得到一组模型。接着,我们用测试集验证该模型的准确性,并记录下跟实际结果相符的次数,即预测正确的测试样本数量。
然后,我们用第二组测试集和训练集重复上述过程。最后,我们将所有三个模型的预测结果进行合并,以此来得到最终的交叉验证结果。
除了3-fold交叉验证,我们还可以使用其他fold中值作为评估模型的准确性。例如,我们可以使用5-fold、10-fold,甚至100-fold交叉验证来对模型进行验证。
综上所述,交叉验证是机器学习领域中不可或缺的一环。使用oraclesql.rqscript,我们可以轻松完成交叉验证,进一步提升模型的准确性。