我正在使用scikit-learn提供的KFold函数运行10倍CV,以选择一些内核参数。我正在执行此(grid_search)程序:

1-pick up a selection of parameters
2-generate a svm
3-generate a KFold
4-get the data that correspons to training/cv_test
5-train the model (clf.fit)
6-classify with the cv_testdata
7-calculate the cv-error
8-repeat 1-7
9-When ready pick the parameters that provide the lowest average(cv-error)

如果我在KFold代中不使用随机播放,那么如果我重复相同的运行并且“最佳结果”是可重复的,则得到的平均值(cv_errors)几乎相同。
如果使用随机播放,如果多次重复相同的运行并且“最佳值”不可重复,则平均值(cv错误)的值将有所不同。
我可以理解,每次KFold传递我都应该获得不同的cv_errors,但最终平均值应该相同。
带折叠的KFold如何真正起作用?
每次调用KFold时,它都会打乱我的索引,并生成训练/测试数据。如何为“培训/测试”选择不同的方向?它有一种随机的方法来挑选不同的褶皱进行训练/测试吗?
任何有利于“洗牌”的情况以及非这种情况?

最佳答案

如果shuffle为True,则首先对整个数据进行shuffle,然后拆分为K折。对于可重复的行为,可以将random_state设置为例如整数种子(random_state = 0)。
如果您的参数取决于改组,这意味着您的参数选择非常不稳定。可能您的训练数据很少,或者您很少使用折叠(例如2或3)。

如果按某种方式对数据进行分类,则“混洗”主要有用,因为这样一来,每个折叠可能只包含一个分类的样本(尤其是对于随机梯度体面分类器而言,分类的分类是危险的)。
对于其他分类器,应该没有区别。如果改组非常不稳定,则您的参数选择可能没有任何意义(又称垃圾)。

关于python-2.7 - 如何在scikit_learn中的KFold中使用随机播放,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12237127/

10-13 00:05