2014-11-24 75 views
9

Custom cross validation split sklearn类似我想为GridSearchCV定义我自己的拆分,为此我需要定制内置的交叉验证迭代器。如何通过索引自定义sklearn交叉验证迭代器?

我想将我自己的一套列车测试指标交叉验证传递给GridSearch,而不是让迭代器为我确定它们。我浏览了sklearn文档页面上的可用cv迭代器,但找不到它。

比如我想实现这样的事情 数据有9个样品 为2倍CV创建我自己的一套培训测试指标

>>> train_indices = [[1,3,5,7,9],[2,4,6,8]] 
>>> test_indices = [[2,4,6,8],[1,3,5,7,9]] 
       1st fold^ 2nd fold^ 
>>> custom_cv = sklearn.cross_validation.customcv(train_indices,test_indices) 
>>> clf = GridSearchCV(X,y,params,cv=custom_cv) 

什么可以像customcv工作?

+0

您可以加入一个问题吗?另外我不知道在'sklearn.cross_validation'中存在'customcv',所以你可能不应该放它。你确定'LeaveOneLabelOut'在你的情况下不起作用吗? – eickenberg 2014-11-24 10:53:47

+1

我给了customcv作为我想实现的例子......它不是sklearn。我试试你在回答中给出的方法 – tangy 2014-11-24 15:39:36

回答

9

实际上,交叉验证迭代器就是这样:迭代器。他们在每次迭代时都会给出一个训练/测试折叠元组。那么这应该为你工作:

custom_cv = zip(train_indices, test_indices) 

另外,对于你提的具体情况,你可以做

import numpy as np 
labels = np.arange(0, 10) % 2 
from sklearn.cross_validation import LeaveOneLabelOut 
cv = LeaveOneLabelOut(labels) 

观察到list(cv)产量

[(array([1, 3, 5, 7, 9]), array([0, 2, 4, 6, 8])), 
(array([0, 2, 4, 6, 8]), array([1, 3, 5, 7, 9]))] 
+0

修正案:这是针对0.18以前的scikit-learn的发布。 'cross_validation'模块功能现在位于'model_selection'中,交叉验证分割器现在是需要明确要求使用split方法分割数据的类。这是为了使嵌套交叉验证更容易。 – eickenberg 2017-09-05 17:47:02