train_test_split 和 StratifiedShuffleSplit 之间的区别

Differnce between train_test_split and StratifiedShuffleSplit

我在试图找出 train_test_splitStratifiedShuffleSplit 之间的区别时遇到了以下语句。

When stratify is not None train_test_split uses StratifiedShuffleSplit internally,

我只是想知道为什么当我们可以使用 train_test_split 中可用的 stratify 参数时使用 sklearn.model_selection 中的 StratifiedShuffleSplit

主要是为了复用性而做的。 train_test_split 没有复制已经为 StratifiedShuffleSplit 实现的代码,而是调用 class。 同理,当stratify=False时,它使用model_selection.ShuffleSplitclass(见source code)。

请注意,复制代码被认为是一种不好的做法,因为它假设会增加维护成本,但也被认为容易出现缺陷,因为对重复代码的不一致更改可能会导致意外行为。如果您想了解更多信息,请点击 reference

此外,尽管它们执行相同的任务,但它们不能总是在相同的上下文中使用。例如,train_test_split 不能在带有 sklearn.model_selection.RandomizedSearchCVsklearn.model_selection.GridSearchCV 的随机或网格搜索中使用。 StratifiedShuffleSplit 会。原因是前者不是“可迭代的屈服(训练,测试)拆分为索引数组”。虽然后者有一个方法 split yields (train, test) splits as array of indices。 更多信息 here(参见参数 cv)。