在scikit中自定义交叉验证

时间:2016-02-01 12:47:55

标签: python scikit-learn classification cross-validation

我为每个玩家的重播提供了一组功能,并且在不同的时间片上有一个目标值。我正在通过Scikit-learn进行分类。为了进行交叉验证,我应该设置一个约束条件,如果重放样本在列车集中,那么测试集中的重放应该没有其他样本。我应该定义一个分割数据的函数,还是可以在Scikit-learn中自定义Craoss验证函数?

修改1

假设我的数据矩阵如下:此行的replayID,时间片和功能。我还有一个包含类标签的数组。

             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)

1 个答案:

答案 0 :(得分:1)

当前版本的sklearn.cross_validation已经包含了您要求的版本 - 包含Label一词的版本。如,