formato de dados libsvm [fechado]

31

Estou usando a ferramenta libsvm ( http://www.csie.ntu.edu.tw/~cjlin/libsvm/ ) para classificação de vetores de suporte. No entanto, estou confuso sobre o formato dos dados de entrada.

No README:

O formato do arquivo de dados de treinamento e teste é:

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

Cada linha contém uma instância e termina com um caractere '\ n'. Para classificação, <label>é um número inteiro indicando o rótulo da classe (multi-classe é suportada). Para regressão, <label>é o valor alvo que pode ser qualquer número real. Para SVM de uma classe, ele não é usado; portanto, pode haver qualquer número. O par <index>:<value>fornece um valor de recurso (atributo): <index>é um número inteiro a partir de 1 e <value> é um número real. A única exceção é o kernel pré-computado, onde <index>começa em 0; veja a seção de kernels pré-computados. Os índices devem estar em ordem ASCENDING. As etiquetas no arquivo de teste são usadas apenas para calcular a precisão ou erros. Se eles são desconhecidos, basta preencher a primeira coluna com qualquer número.

Tenho as seguintes perguntas:

  1. Qual é o uso do <index>? Que finalidade serve?
  2. Existe uma correspondência entre os mesmos valores de índice de diferentes instâncias de dados?
  3. E se eu perder / pular um índice no meio?

Eu pergunto porque o arquivo de dados * heart_scale * incluído no pacote libsvm, na linha 12, o índice inicia em 2. O <value>índice 1 é considerado desconhecido / ausente? Nota: a ferramenta tools / checkdata.py fornecida com o pacote informa que o arquivo * heart_scale * está correto.

Siddhant Saraf
fonte

Respostas:

23

Este link deve ajudar: http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#/Q3:_Data_preparation

Mencionou-se que os dados são armazenados em uma forma esparsa de matriz / matriz. Essencialmente, significa que apenas os dados diferentes de zero são armazenados e quaisquer dados ausentes são considerados como mantendo o valor zero. Para suas perguntas:

a) O índice serve apenas como uma maneira de distinguir entre os recursos / parâmetros. Em termos de hiperespaço, está apenas designando cada componente: Por exemplo: índices 3-D (3 recursos) 1,2,3 corresponderiam às coordenadas x, y, z.

b) A correspondência é meramente matemática; ao construir o hiperplano, elas servem como coordenadas.

c) Se você pular uma entre elas, deverá ser atribuído um valor padrão zero.

Em resumo, +1 1: 0,7 2: 1 3: 1 se traduz em:

Atribua à classe +1, o ponto (0,7,1,1).

Govind Gopakumar
fonte
4

Apenas guia pequeno e rápido:

O formato LibSVM significa que seu documento já precisa ser pré-processado. Você precisa saber quantas classes de classificação serão usadas (provavelmente 2) e o espaço de recursos.

A classe de classificação é algo como verdadeiro / falso; 0,1, ... Aqui você precisa transformá-lo em números inteiros (por exemplo, 0,1).

O espaço de recursos é um espaço para seus dados multidimensionais. Cada fantasia (vetor) deve ter seu próprio ID (índice) e seu valor. Por exemplo, 1: 23.2 significa que o recurso / dimensão 1 tem valor 23.2

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