在 scikit learn 中自定义交叉验证

Customizing cross validation in scikit learn

我有一组针对每个玩家回放的特征,以及不同时间片的目标值。我正在通过 Scikit-learn 进行 class 化。为了进行交叉验证,我应该设置一个约束条件,如果重放的样本在训练集中,那么测试集中应该没有来自该重放的其他样本。我应该定义一个函数来拆分数据,还是可以在 Scikit-learn 中自定义 craoss 验证函数?

编辑 1

假设我的数据矩阵如下:这一行的replayID、时间片和特征。我还有一个包含 class 标签的数组。

             replayID Time_slice Features
data=array([[ 100,     0.,     1.5,...],
           [ 100,      1.,       3.7,...],
           [ 100,      0.,       1.2,...],
           [ 100,      1.,       1.8,...],
           [ 100,      2.,       2.9,...],
           [ 101,      0.,       1.5,...],
           [ 101,      1.,       3.7,...],
           [ 101,      0.,       1.2,...],
           [ 101,      1.,       1.8,...],
           [ 101,      2.,       2.9,...]])

我要求如果replayID=100的样本在训练数据中,那么测试数据中没有其他replayID=100的样本。而且,训练数据应该是数据的80%,测试数据的20%。

X = data[:, 1:]
y = targets
labels = data[:, 0]
cv = LabelKFold(labels, n_folds=10)
est = GradientBoostingClassifier(**params)
for train, test in cv:
     X_train = X[train]
     y_train = y[train]
     X_test = X[test]
     est.fit(X_train, y_train)

sklearn.cross_validation 的现代版本已经包含了您所要求的版本 - 那些包含单词 Label 的版本。例如,