libsvm Datenformat [geschlossen]

31

Ich verwende das Tool libsvm ( http://www.csie.ntu.edu.tw/~cjlin/libsvm/ ) zur Unterstützung der Vektorklassifizierung. Ich bin jedoch verwirrt über das Format der Eingabedaten.

Aus der README:

Das Format der Trainings- und Testdatendatei ist:

<label> <index1>:<value1> <index2>:<value2> ...
.
.
.

Jede Zeile enthält eine Instanz und wird mit einem '\ n'-Zeichen abgeschlossen. Bei der Klassifizierung <label>handelt es sich um eine Ganzzahl, die die Klassenbezeichnung angibt (mehrere Klassen werden unterstützt). Für die Regression <label>ist der Zielwert eine beliebige reelle Zahl. Für eine SVM-Klasse wird sie nicht verwendet, es kann sich also um eine beliebige Zahl handeln. Das Paar <index>:<value>gibt einen Merkmalswert (Attributwert) an: <index>ist eine Ganzzahl ab 1 und <value> eine reelle Zahl. Die einzige Ausnahme ist der vorberechnete Kernel, bei <index>dem mit 0 begonnen wird. Siehe den Abschnitt über vorberechnete Kernel. Indizes müssen in aufsteigender Reihenfolge sein. Etiketten in der Testdatei werden nur zur Berechnung von Genauigkeit oder Fehlern verwendet. Wenn sie unbekannt sind, füllen Sie einfach die erste Spalte mit beliebigen Zahlen.

Ich habe folgende Fragen:

  1. Was nützt der <index>? Welchem ​​Zweck dient es?
  2. Gibt es eine Entsprechung zwischen den gleichen Indexwerten verschiedener Dateninstanzen?
  3. Was ist, wenn ich dazwischen einen Index überspringe?

Ich frage, weil die Datendatei * heart_scale *, die im Paket für libsvm enthalten ist, in Zeile 12 mit 2 beginnt. Wird die <value>für Index 1 als unbekannt / fehlend angenommen? Hinweis: Das im Paket enthaltene Tool tools / checkdata.py gibt an, dass die Datei * heart_scale * korrekt ist.

Siddhant Saraf
quelle

Antworten:

23

Dieser Link sollte helfen: http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#/Q3:_Data_preparation

Es wird erwähnt, dass die Daten in einer spärlichen Array- / Matrixform gespeichert sind. Im Wesentlichen bedeutet dies, dass nur die Nicht-Null-Daten gespeichert werden und fehlende Daten als Haltewert Null angenommen werden. Für Ihre Fragen:

a) Der Index dient lediglich zur Unterscheidung der Merkmale / Parameter. In Bezug auf einen Hyperraum bezeichnet er lediglich jede Komponente: ZB: 3-D-Indizes (3 Merkmale) 1, 2, 3 würden den x-, y-, z-Koordinaten entsprechen.

b) Die Entsprechung ist rein mathematisch, bei der Konstruktion der Hyperebene dienen diese als Koordinaten.

c) Wenn Sie einen dazwischen überspringen, sollte ihm der Standardwert Null zugewiesen werden.

Kurz gesagt bedeutet +1 1: 0.7 2: 1 3: 1:

Ordnen Sie der Klasse +1 den Punkt (0.7,1,1) zu.

Govind Gopakumar
quelle
4

Nur eine kleine und schnelle Anleitung:

Das LibSVM-Format bedeutet, dass Ihr Dokument bereits vorverarbeitet werden muss. Sie müssen wissen, wie viele Klassifizierungsklassen verwendet werden (höchstwahrscheinlich 2) und wie viel Platz zur Verfügung steht.

Klassifikationsklasse ist so etwas wie wahr / falsch; 0,1, ... Hier müssen Sie es in ganze Zahlen umwandeln (zB 0,1).

Der Objektbereich ist ein Bereich für Ihre mehrdimensionalen Daten. Jede Feauture (Vektor) sollte eine eigene ID (Index) und einen eigenen Wert haben. ZB 1: 23.2 bedeutet, dass Feature / Dimension 1 den Wert 23.2 hat

<label> <index1>:<value1> <index2>:<value2> ... <indexN>:<valueN>
...
xhudik
quelle