2014-11-24 17 views
9

Custom cross validation split sklearn ile benzer GridSearchCV için kendi bölümlerimi tanımlamak istiyorum, ki bunun için yerleşik çapraz doğrulama yinelemesini özelleştirmem gerekiyor.Sklearn çapraz doğrulama yineleyici endekslerle nasıl özelleştirilir?

Yineleyicinin bunları benim için belirlemesine izin vermek yerine, GridSearch ile çapraz doğrulama için kendi dizi test dizileriimi geçmek istiyorum. Sklearn dokümantasyon sayfasındaki kullanılabilir cv yineleyicilerden geçtim ama bulamadım. Bu Data gibi bir şey customcv gibi çalışması için kullanılabilir Hangi eğitim-test endeksleri

>>> 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) 

benim kendi kümesi oluşturmak cv 2 kat için 9 örnekleri sahiptir uygulamak istediğiniz Örneğin

?

+0

Bir soru eklemek Could

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

o list(cv) verim gözlemleyin yapabilir? Ayrıca 'skecearn.cross_validation' içinde' customcv' nin varlığından haberdar değilim, bu yüzden muhtemelen bunu eklememelisiniz. Durumunda 'LeaveOneLabelOut'un çalışmadığından emin misiniz? – eickenberg

+1

Customcv'yi uygulamak istediklerimin bir örneği olarak verdim ... sklearn'de değil. Yanıtınız – tangy

cevap

9

Aslında, çapraz doğrulama yineleyiciler yalnızca şu şekildedir: Yineleyiciler. Her iterasyonda bir tuple tren/test katını geri verirler. Bu da sizin için çalışması gerekir: Ayrıca

custom_cv = zip(train_indices, test_indices) 

, sen söz spesifik durum için, sen

[(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

'da verdiğiniz yöntemi dener. Değişiklik: Bu, scikit-learn'in 0.18 öncesi sürümleri içindir. 'Cross_validation' modülü işlevselliği artık 'model_selection' içinde ve çapraz doğrulama bölücüleri artık' split 'yöntemini kullanarak verileri ayrıştırması istenmesi gereken sınıflardır. Bu iç içe çapraz geçerliliği kolaylaştırmaktır. – eickenberg

İlgili konular