与Custom cross validation split sklearn类似,我想为GridSearchCV定义自己的分割,我需要自定义内置的交叉验证迭代器。
我想将自己的一组列车测试索引传递给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 :(得分:10)
实际上,交叉验证迭代器只是:迭代器。他们在每次迭代时都会返回一列火车/测试折叠。这应该适合你:
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]))]
答案 1 :(得分:0)
实际上,上述解决方案将每一行返回为真正需要的折叠:
let arr = [1, 1, 3, 1, 2, 2, 4]
let result = Dictionary(grouping: arr, by: { $0 }).filter({ $0.1.count > 1 }).flatMap({ $0.value })
print(result) //[2, 2, 1, 1, 1]