format de données libsvm [fermé]

31

J'utilise l'outil libsvm ( http://www.csie.ntu.edu.tw/~cjlin/libsvm/ ) pour prendre en charge la classification des vecteurs. Cependant, je suis confus quant au format des données d'entrée.

Du README:

Le format du fichier de données de formation et de test est:

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

Chaque ligne contient une instance et se termine par un caractère '\ n'. Pour la classification, <label>est un entier indiquant le libellé de la classe (plusieurs classes sont prises en charge). Pour la régression, <label>est la valeur cible qui peut être n'importe quel nombre réel. Pour le SVM à une classe, il n'est pas utilisé, il peut donc être n'importe quel nombre. La paire <index>:<value>donne une valeur de caractéristique (attribut): <index>est un entier à partir de 1 et <value> est un nombre réel. La seule exception est le noyau précalculé, où <index>commence à partir de 0; voir la section des noyaux précalculés. Les indices doivent être dans l'ordre ASCENDANT. Les étiquettes du fichier de test ne sont utilisées que pour calculer la précision ou les erreurs. S'ils sont inconnus, remplissez simplement la première colonne de n'importe quel nombre.

J'ai les questions suivantes:

  1. À quoi sert le <index>? A quoi est-ce que ça sert?
  2. Existe-t-il une correspondance entre les mêmes valeurs d'index de différentes instances de données?
  3. Et si je manque / saute un index entre les deux?

Je demande parce que le fichier de données * heart_scale * qui est inclus dans le paquet pour libsvm, à la ligne 12, l'index commence à partir de 2. L' <value>index 1 est-il pris comme inconnu / manquant? Remarque: l'outil tools / checkdata.py fourni avec le package indique que le fichier * heart_scale * est correct.

Siddhant Saraf
la source

Réponses:

23

Ce lien devrait aider: http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#/Q3:_Data_preparation

Il est mentionné que les données sont stockées sous forme de tableau / matrice clairsemée. Essentiellement, cela signifie que seules les données non nulles sont stockées et toutes les données manquantes sont prises comme valeur de maintien zéro. Pour vos questions:

a) L'index sert simplement de moyen de distinguer les caractéristiques / paramètres. En termes d'hyperespace, il s'agit simplement de désigner chaque composant: par exemple: les indices 1, 3, 3-D (3 entités) correspondraient aux coordonnées x, y, z.

b) La correspondance est purement mathématique, lors de la construction de l'hyperplan, celles-ci servent de coordonnées.

c) Si vous en sautez un entre les deux, une valeur par défaut de zéro devrait lui être attribuée.

En bref, +1 1: 0,7 2: 1 3: 1 se traduit par:

Attribuez à la classe +1, le point (0.7,1,1).

Govind Gopakumar
la source
4

Guide petit et rapide:

Le format LibSVM signifie que votre document doit déjà être prétraité. Vous devez savoir combien de classes de classification seront utilisées (très probablement 2) et l'espace des fonctionnalités.

La classe de classification est quelque chose comme vrai / faux; 0,1, ... Ici, vous devez le transformer en entiers (par exemple 0,1).

L'espace d'entité est un espace pour vos données multidimensionnelles. Chaque feauture (vecteur) doit avoir son propre ID (index) et sa valeur. Par exemple 1: 23,2 signifie que la caractéristique / dimension 1 a la valeur 23,2

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