K-Cross 交叉验证

K 折叠交叉验证是多次重复训练/测试分割程序的系统过程,以减少与单次试验列车/测试分裂相关的变化。你基本上将整个数据集拆分为 K 个相等大小的折叠,每个折叠用于测试模型一次,K-1 次用于训练模型。

scikit 库提供多种折叠技术。它们的使用取决于输入数据特征。一些例子是

K-折

你基本上将整个数据集拆分为 K 个相等大小的折叠,每个折叠用于测试模型一次,K-1 次用于训练模型。

from sklearn.model_selection import KFold
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = np.array([1, 2, 1, 2])
cv = KFold(n_splits=3, random_state=0)

for train_index, test_index in cv.split(X):
...    print("TRAIN:", train_index, "TEST:", test_index)

TRAIN: [2 3] TEST: [0 1]
TRAIN: [0 1 3] TEST: [2]
TRAIN: [0 1 2] TEST: [3]

StratifiedKFold 是 k-fold 的变体,它返回分层折叠:每组包含与完整集合大致相同的每个目标类别的样本百分比

ShuffleSplit

用于生成用户定义数量的独立列车/测试数据集拆分。首先将样品洗牌,然后将其分成一对列车和测试装置。

from sklearn.model_selection import ShuffleSplit
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = np.array([1, 2, 1, 2])
cv = ShuffleSplit(n_splits=3, test_size=.25, random_state=0)

for train_index, test_index in cv.split(X):
...    print("TRAIN:", train_index, "TEST:", test_index)

TRAIN: [3 1 0] TEST: [2]
TRAIN: [2 1 3] TEST: [0]
TRAIN: [0 2 1] TEST: [3]

StratifiedShuffleSplit 是 ShuffleSplit 的变体,它返回分层分裂,即通过为每个目标类保留与完整集合相同的百分比来创建分裂。

其他折叠技术,例如 Leave One / p Out 和 TimeSeriesSplit(K-fold 的变体)可在 scikit model_selection 库中找到。