2016-05-11 1 views
0

Ich habe ein Python-Problem. Ich benutze scikit-learn 0.17 Jemand gibt mir einen Beispielcode, den ich ausführen muss. Der Code war in Python 2 und Scikit-lernen 0,18, die dev-Version. Ich habe den Code in Python 3 ohne Problem umgewandelt. Aber er verwendet die Funktion:python - sklearn 0.17 und 0.18 - wie wird nur der erste Wert eines StratifiedKFold-Objekts abgerufen?

sklearn.model_selection.StratifiedKFold(n_folds=3, shuffle=False, random_state=None) 

In Scikit-Learn 0,17, I Funktion haben, wie dieses aussieht:

sklearn.cross_validation.StratifiedKFold(y, n_folds=3, shuffle=False, random_state=None) 

Wie Sie sehen können, scheinen sie sehr ähnlich: Es gibt nur das ist "y" das ändert sich.

Also habe ich zwei Lösung: Update auf 0.18 (ich benutze Windows, und ich kann nicht verwenden Linux) Ich habe dieses versucht, aber es gelingt mir nicht, Quellen zu kompilieren.

Die zweite Lösung ist die Verwendung des StratifiedKFold von 0,17. Ich gelange zu dieser Lösung. (Ich weiß nicht, ob es die Dinge tut, die es tun soll, aber x)).

Also, es mein Problem ist (endlich):

ich diese zwei Linie anpassen müssen:

skf = StratifiedKFold(n_folds=5) 
train_idx, test_idx = skf.split(patch_arr, labels).next() 

für den Moment, schrieb ich diese (Ihre Augen bedecken):

skf = StratifiedKFold(labels, n_folds=5) 
for train_idx, test_idx in skf: 
    break 

Und das Programm läuft, aber mein Code ist schrecklich. Gibt es eine andere Methode, nur das erste Paar (train_idx, test_idx) abzurufen? Ich versuchte mit skf [0] und skf.next(), aber nichts davon funktioniert.

(zur Information, train_idx und test_idx sind zwei Arrays)

Haben Sie eine Idee? Ich finde seltsam, dass ich patch_arr nicht in meiner Lösung auch verwenden kann, aber wenn ich vermeiden kann, mehr Stunden zu verbringen, scikit-image zu aktualisieren, werde ich sehr glücklich sein :)

Antwort

1

Folgendes sollte ausreichen.

train_idx, test_idx = next(iter(skf)) 
+0

es funktioniert, danke – SuperMouette