2016-08-03 24 views
1

Ich erspare mir die Details und arbeite gerade an einem Java-Programm, das die paarweise Klassifizierung für eine Ranking-SVM durchführt.Zufällige Auswahl von 2D-Vektorzeilen für die Halbentzerrung bestimmter Werte

Um etwas Hintergrundwissen zu haben, habe ich Inhalte von einer CSV-Datei in eine 2D-String-Array-Liste gelesen, alle notwendigen Berechnungen in der 2D-Array-Liste durchgeführt und diese in eine CSV-Datei schreiben müssen.

Bevor jedoch die Daten in eine leere CSV-Datei zurückgeschrieben werden, gibt es einen letzten Schritt. Die letzte Zelle jeder Reihe enthält einen von zwei Werten - entweder eine "1" oder eine "-1". Mein Ziel ist es, sicherzustellen, dass die Daten in die Datei zurückgeschrieben werden, so dass es eine gleiche Anzahl von Datenzeilen (oder innerhalb eines Bereichs von 1) in Bezug auf die letzte Zelle gibt, die entweder eine "1" oder eine "-" enthält. 1, "wenn das Sinn macht.

einige Beispiele zu nennen, sind hier zwei akzeptable Ergebnisse in eine Datei geschrieben werden, zurück:

[10 20 30 -1] 
[12 13 14 1] 
[12 13 14 -1] 
[34 35 36 1] 

und

[10 20 30 -1] 
[12 13 14 1] 
[12 13 14 -1] 
[34 35 36 1] 
[20 34 35 -1] 

Wie Sie im ersten Beispiel sehen können, gibt es eine ist, gleiche Verteilung von Zeilen in Bezug auf die letzte Zelle jeder Zeile ist entweder eine "1" oder "-1", und in der zweiten gibt es eine Verteilung von Zeilen, so dass die Differenz der Anzahl der Zeilen, wo es ein " -1 "oder" 1 "in der letzten Zelle unterscheiden sich nur um 1. Diese sind beide akzeptabel.

Also habe ich mich gefragt, ob mir jemand ein paar Ideen geben könnte, wie ich das machen könnte? Was ich derzeit denke, ist die Erstellung eines Zufallszahlengenerators für einen Indexer, der fortlaufend Zeilen basierend auf diesem Zufallsindex enthält und nur die Anzahl der Zeilen verfolgt, die in der letzten Zelle nur eine "1" oder "-1" enthalten Stoppen, wenn eine Menge von zufälligen Zeilen in meinem Endergebnis enthalten ist, so dass meine Kriterien der gleichen/fast gleichen Verteilung erfüllt sind. Ich bin mir jedoch nicht ganz sicher, wie ich den Code dafür einrichten würde.

Vielen Dank, und lassen Sie mich bitte wissen, wenn ich weitere Details zur Verfügung stellen kann, die helfen würden.

+0

Könnten Sie nicht einfach den letzten Index jeder Zeile zu einer laufenden Tally hinzufügen, und nachdem Sie * die ganze Arbeit erledigt haben, können Sie nicht einfach überprüfen, ob '-1> = tally <= 1' ist? Entschuldigung, wenn dies das Zeichen verfehlt, ist diese Frage irgendwie verwirrend. –

Antwort

1

keine Notwendigkeit für die Randomisierung hier können Sie etwas Ähnliches wie folgt vorgehen:

2 row Zeiger halten. Eins für +1, eins für -1.

  1. Geben Sie eine +1 aus, und erhöhen Sie den Index dann, bis er eine andere Zeile findet, die auf +1 endet.
  2. Geben Sie eine -1 aus und inkrementieren Sie diesen Index, bis eine andere Zeile mit der Endung -1 gefunden wird.
  3. Schritt 1 wiederholen, bis einer Ihrer Zeiger nicht inkrementiert werden kann.

Ein anderer Ansatz:

erstellen 2 Sätze. Einer enthält die Zeilennummer für den +1, der andere enthält die Zeilennummer für den -1. Alternative Ausgabe durch Aufnahme einer Zeile aus jedem Satz.

+0

Vielen Dank, Colin. – BK201