
200
|
第
5
章
数据分组的这种例子常见于医疗应用,你可能拥有来自同一名病人的多个样本,但想要将
其泛化到新的病人。同样,在语音识别领域,你的数据集中可能包含同一名发言人的多条
记录,但你希望能够识别新的发言人的讲话。
下面这个示例用到了一个由 groups 数组指定分组的模拟数据集。这个数据集包含
12
个数
据点,且对于每个数据点,groups 指定了该点所属的分组(想想病人的例子)。一共分成
4
个组,前
3
个样本属于第一组,接下来的
4
个样本属于第二组,以此类推:
In[16]:
from sklearn.model_selection import GroupKFold
# 创建模拟数据集
X, y = make_blobs(n_samples=12, random_state=0)
# 假设前3个样本属于同一组,接下来的4个属于同一组,以此类推
groups = [0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3]
scores = cross_val_score(logreg, X, y, groups, cv=GroupKFold(n_splits=3))
print("Cross-validation scores:\n{}".format(scores))
Out[16]:
Cross-validation scores:
[ 0.75 0.8 0.667]
样本不需要按分组进行排序,我们这么做只是为了便于说明。基于这些标签计算得到的划
分如图
5-4
所示。
如你所见,对于每次划分,每个分组都是整体出现在训练集或测试集中: ...