2013-12-20 7 views
6

Wie erzeuge ich zufällige Falten für die Kreuzvalidierung in scikit-learn?scikit-learn Unterabtastung von unsymmetrischen Daten für die Kreuzvalidierung

Stellen Sie sich vor, wir haben 20 Proben von einer Klasse, und 80 von der anderen, und wir müssen N Zug und Test-Sets, jeder Zug Satz der Größe 30, unter der Einschränkung, dass in jedem Training, die wir haben 50% der Klasse eins und 50% der Klasse 2.

Ich fand diese Diskussion (https://github.com/scikit-learn/scikit-learn/issues/1362), aber ich verstehe nicht, wie man Falten bekommen. Idealerweise denke ich, ich brauche eine solche Funktion:

cfolds = np.cross_validation.imaginaryfunction(
[list(itertools.repeat(1,20)), list(itertools.repeat(2,80))], 
n_iter=100, test_size=0.70) 

Was bin ich?

+0

Warum nicht einfach 'random.sample()' verwenden? – Skyler

+0

aus dem gleichen Grund haben wir alle anderen cross_validation Funktion !? – adrin

+2

Sie können einen eigenen Kreuzvalidierungsgenerator definieren: Es sollte ein Objekt mit einem '__len__' sein, das' N' zurückgibt und ein '__iter__', das' N' Listenpaare ergibt (train_indices, test_indices) '. –

Antwort

1

Es gibt keinen direkten Weg mit Kreuzvalidierung Unterabtastung in scikit zu tun, aber es gibt zwei Lösungen:

1.

Verwendung StratifiedCrossValidation in jeder mit der Verteilung Kreuzvalidierung erreichen falten sich die Verteilung der Datenspiegelung, Dann können Sie eine Ungleichgewichtsreduktion in Klassifizierern erreichen, indem Sie class_weight param verwenden, die entweder auto und Unterabtastungs-/Oversample-Klassen umgekehrt proportional zu ihrer Zählung nehmen können oder Sie können ein Wörterbuch mit expliziten Gewichtungen übergeben.

2.

Ihre eigene Kreuzvalidierungsroutine schreiben, die ziemlich geradlinig pandas verwenden sollten.

0

StratifiedCV ist eine gute Wahl, aber Sie können es einfacher machen:

  1. Run stichprobenartig auf Daten der Klasse 1 bezogen (Sie 15/20 Proben wählen müssen)
  2. Das gleiche gilt für Klasse 2 (15/80)
  3. Wiederholen Sie 100 Mal oder wie viel Sie benötigen.

Das ist alles. Schnell und praktikabel!

Verwandte Themen