我是机器学习的初学者,希望有人能帮助我。
在 Python 的“scikit-learn”库中,函数“train_test_split”将数据集拆分为训练集和测试集。这是以随机方式完成的(可能使用种子在重复执行中获得相同的结果)。但是,对于单个随机拆分,我们可以在多大程度上信任通过“拟合”方法获得的结果(分类准确度)?我的意思是……如果我们“不走运”,我们可能会得到一个非常糟糕的结果(或者相反,如果我们“走运”)。我们不应该多次重复拆分/拟合过程(例如,100 次),然后平均获得的分类准确度吗?(可能在通过交叉验证进行参数调整之后)。
我问这个是因为之前我使用了 Python 的 Orange Data Mining 库,其中包括一个方法('proportion_test'),它将数据集拆分为训练集和测试集,然后根据特定的分类器对其进行评估,重复操作指定的次数次(例如,它执行 100 次 70:30 测试的迭代)。我的问题是:我是否也应该使用 scikit-learn 中的拆分/拟合功能手动执行此操作?(例如,使用 100 个不同的随机种子进行 100 次迭代)。结果会更好吗?
我对此感到非常困惑......
我想强调一下,我知道交叉验证、遗漏一个等。但是,如果我理解正确,这些技术将用于模型验证(即模型参数调整)。我的问题是模型的最终评估是否应该基于重复的拆分/拟合操作。例如,在《Introduction to Machine Learning with Python》一书中(Andreas C. Müller 和 Sarah Guido,O'Reilly),建议的操作流程是:(1)将原始数据集拆分为训练集和测试集;(2)在训练集上使用交叉验证进行参数调优(即最佳参数选择);(3) 使用刚刚找到的最佳参数与训练集重新训练;(4) 使用训练好的模型和(单个)测试集进行最终评估(计算分类精度)。我的问题是:这够了吗?或者,一旦使用最佳参数训练了分类器(上面的第 3 步),我是否应该在整个数据集(原始训练 + 测试集)上多次重复拆分/拟合过程以获得更可靠的结果?我使用 Orange 库做到了这一点,但也许没有必要(上面引用的书中没有这样做)。
非常感谢您的帮助!