scikit 学习:5 折交叉验证和训练测试拆分
scikit learn: 5 fold cross validation & train test split
我想知道当我训练测试拆分(20% 测试,80% 80%)然后应用 5 折交叉验证是否意味着所有数据都在测试集中一次?还是每次都是随机选择的,在每次折叠中,相同的事件可能不止一次包含在测试中,而有些可能从未包含在测试集中?
#20% of the data will be used as test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=seed)
cv_results= cross_val_score(model, X_train, y_train, cv=kfold, scoring=scoring)
会不会所有数据都在测试集中来过一次?是的,至少在您传递给交叉验证方法的数据中。例如:
X = np.arange(10)
y = np.concatenate((np.ones(5), np.zeros(5)))
X
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
y
array([1., 1., 1., 1., 1., 0., 0., 0., 0., 0.])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2, random_state=42)
X_train
array([5, 0, 7, 2, 9, 4, 3, 6])
X_test
array([8, 1])
kf = Kfold(n_splits=5)
for train, test in kf.split(X_train):
print(train, test)
[2 3 4 5 6 7] [0 1]
[0 1 4 5 6 7] [2 3]
[0 1 2 3 6 7] [4 5]
[0 1 2 3 4 5 7] [6]
[0 1 2 3 4 5 6] [7]
如您所见,测试集 运行 的索引从 0 到 7,这意味着 X_train
中的所有 8 个值都将在交叉验证测试中出现一次。无论您的样本大小如何,这种模式都会持续存在。
交叉验证 split
方法创建的分割大小取决于您的数据与您选择的分割数的比率。例如,如果我设置了 KFold(n_splits=8)
(与我的 X_train
数组大小相同),则每个拆分的测试集将包含一个数据点。
我想知道当我训练测试拆分(20% 测试,80% 80%)然后应用 5 折交叉验证是否意味着所有数据都在测试集中一次?还是每次都是随机选择的,在每次折叠中,相同的事件可能不止一次包含在测试中,而有些可能从未包含在测试集中?
#20% of the data will be used as test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=seed)
cv_results= cross_val_score(model, X_train, y_train, cv=kfold, scoring=scoring)
会不会所有数据都在测试集中来过一次?是的,至少在您传递给交叉验证方法的数据中。例如:
X = np.arange(10)
y = np.concatenate((np.ones(5), np.zeros(5)))
X
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
y
array([1., 1., 1., 1., 1., 0., 0., 0., 0., 0.])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2, random_state=42)
X_train
array([5, 0, 7, 2, 9, 4, 3, 6])
X_test
array([8, 1])
kf = Kfold(n_splits=5)
for train, test in kf.split(X_train):
print(train, test)
[2 3 4 5 6 7] [0 1]
[0 1 4 5 6 7] [2 3]
[0 1 2 3 6 7] [4 5]
[0 1 2 3 4 5 7] [6]
[0 1 2 3 4 5 6] [7]
如您所见,测试集 运行 的索引从 0 到 7,这意味着 X_train
中的所有 8 个值都将在交叉验证测试中出现一次。无论您的样本大小如何,这种模式都会持续存在。
交叉验证 split
方法创建的分割大小取决于您的数据与您选择的分割数的比率。例如,如果我设置了 KFold(n_splits=8)
(与我的 X_train
数组大小相同),则每个拆分的测试集将包含一个数据点。