Ajude-me a entender as máquinas de vetores de suporte

76

Entendo o básico do objetivo de um Support Vector Machines em termos de classificação de um conjunto de entradas em várias classes diferentes, mas o que não entendo são alguns detalhes minuciosos. Para começar, estou um pouco confuso com o uso de Slack Variables. Qual é o seu propósito?

Estou com um problema de classificação em que capturei leituras de pressão de sensores que coloquei na palmilha de um sapato. Um sujeito fica sentado, em pé e caminha por alguns minutos enquanto os dados de pressão são registrados. Quero treinar um classificador para poder determinar se uma pessoa está sentada, em pé ou andando e poder fazer isso para quaisquer dados de teste futuros. Que tipo de classificador eu preciso tentar? Qual é a melhor maneira de treinar um classificador a partir dos dados que capturei? Eu tenho 1000 entradas para sentar, ficar de pé e caminhar (3x1000 = 3000 total) e todas elas têm o seguinte formulário de vetor de recurso. (pressão do sensor1, pressão do sensor2, pressão do sensor3, pressão do sensor4)

rohanbk
fonte

Respostas:

103

Eu acho que você está tentando começar de um final ruim. O que se deve saber sobre o SVM para usar é que esse algoritmo está encontrando um hiperplano no hiperespaço de atributos que separa melhor duas classes, onde melhor significa com maior margem entre as classes (o conhecimento de como é feito é seu inimigo aqui, porque desfoca a imagem geral), conforme ilustrado por uma imagem famosa como esta: texto alternativo

Agora, existem alguns problemas restantes.
Primeiro de tudo, o que fazer com aqueles desagradáveis ​​outliers deitados descaradamente em um centro de nuvens de pontos de uma classe diferente?
texto alternativo
Para esse fim, permitimos que o otimizador deixe certas amostras com um rótulo incorreto, mas punir cada um desses exemplos. Para evitar a opimização multiobjetiva, as sanções para casos com rótulos incorretos são mescladas com o tamanho da margem com o uso do parâmetro adicional C, que controla o equilíbrio entre esses objetivos.
Em seguida, às vezes o problema não é linear e não é possível encontrar um hiperplano bom. Aqui, apresentamos o truque do kernel - apenas projetamos o espaço não-linear original para um espaço dimensional mais alto com alguma transformação não-linear, é claro definida por vários parâmetros adicionais, esperando que no espaço resultante o problema seja adequado para uma planificação simples. SVM:

texto alternativo

Mais uma vez, com um pouco de matemática e podemos ver que todo esse processo de transformação pode ser ocultado com elegância, modificando a função objetivo, substituindo o produto escalar de objetos pela chamada função do kernel.
Finalmente, tudo isso funciona para 2 classes e você tem 3; O que fazer com isso? Aqui, criamos 3 classificadores de 2 classes (sentado - sem sentar, em pé - sem pé, andando - sem andar) e na classificação combinamos aqueles com votação.

Ok, então os problemas parecem resolvidos, mas temos que selecionar o kernel (aqui consultamos nossa intuição e escolher RBF) e ajustar pelo menos alguns parâmetros (kernel C +). E devemos ter uma função objetivo com segurança excessiva, por exemplo, aproximação de erros a partir da validação cruzada. Então deixamos o computador trabalhando nisso, vamos tomar um café, voltamos e vemos que existem alguns parâmetros ótimos. Ótimo! Agora, apenas começamos a validação cruzada aninhada para ter uma aproximação de erro e pronto.

É claro que esse breve fluxo de trabalho é simplificado demais para ser totalmente correto, mas mostra os motivos pelos quais eu acho que você deve tentar primeiro com a floresta aleatória , que é quase independente dos parâmetros, multiclasse nativa, fornece estimativa de erro imparcial e executa SVMs quase tão bons quanto adequados .


fonte
5
(+1) Ótimo que você adicione algumas fotos para ilustrar tudo!
chl
3
@mbq Como você parece muito competente em SVM, deixe-me pedir que esclareça minha dúvida: uma vez que encontramos o melhor hiperplano de separação, para que o usamos? Podemos definir o SVM como um método que, em primeiro lugar, escolhe o melhor hiperplano para classificar corretamente os pontos de dados e, em segundo lugar, usa esse hiperplano para separar novos pontos de dados nas duas classes. Direito? (Eu tenho algumas dúvidas na segunda parte)
DavideChicco.it 27/04
3
@ DavideChicco.it Basicamente, o principal problema de todo o ML é criar um modelo que preveja novos dados de maneira confiável, então sim.