train_test_split 和 StratifiedShuffleSplit 之间的区别
Differnce between train_test_split and StratifiedShuffleSplit
我在试图找出 train_test_split
和 StratifiedShuffleSplit
之间的区别时遇到了以下语句。
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.ShuffleSplit
class(见source code)。
请注意,复制代码被认为是一种不好的做法,因为它假设会增加维护成本,但也被认为容易出现缺陷,因为对重复代码的不一致更改可能会导致意外行为。如果您想了解更多信息,请点击 reference。
此外,尽管它们执行相同的任务,但它们不能总是在相同的上下文中使用。例如,train_test_split
不能在带有 sklearn.model_selection.RandomizedSearchCV
或 sklearn.model_selection.GridSearchCV
的随机或网格搜索中使用。
StratifiedShuffleSplit
会。原因是前者不是“可迭代的屈服(训练,测试)拆分为索引数组”。虽然后者有一个方法 split
yields (train, test) splits as array of indices。
更多信息 here(参见参数 cv)。
我在试图找出 train_test_split
和 StratifiedShuffleSplit
之间的区别时遇到了以下语句。
When
stratify
is not None train_test_split usesStratifiedShuffleSplit
internally,
我只是想知道为什么当我们可以使用 train_test_split
中可用的 stratify
参数时使用 sklearn.model_selection
中的 StratifiedShuffleSplit
。
主要是为了复用性而做的。 train_test_split
没有复制已经为 StratifiedShuffleSplit
实现的代码,而是调用 class。
同理,当stratify=False
时,它使用model_selection.ShuffleSplit
class(见source code)。
请注意,复制代码被认为是一种不好的做法,因为它假设会增加维护成本,但也被认为容易出现缺陷,因为对重复代码的不一致更改可能会导致意外行为。如果您想了解更多信息,请点击 reference。
此外,尽管它们执行相同的任务,但它们不能总是在相同的上下文中使用。例如,train_test_split
不能在带有 sklearn.model_selection.RandomizedSearchCV
或 sklearn.model_selection.GridSearchCV
的随机或网格搜索中使用。
StratifiedShuffleSplit
会。原因是前者不是“可迭代的屈服(训练,测试)拆分为索引数组”。虽然后者有一个方法 split
yields (train, test) splits as array of indices。
更多信息 here(参见参数 cv)。