O SVM pode transmitir um aprendizado de exemplo por vez?

33

Eu tenho um conjunto de dados de streaming, exemplos estão disponíveis um de cada vez. Eu precisaria fazer uma classificação multi-classe neles. Assim que forneço um exemplo de treinamento para o processo de aprendizado, tenho que descartar o exemplo. Simultaneamente, também estou usando o modelo mais recente para realizar previsões em dados não rotulados.

Até onde eu sei, uma rede neural é capaz de aprender o fluxo alimentando exemplos um de cada vez e realizando propagação para frente e propagação para trás no exemplo.

Um SVM pode executar o aprendizado de fluxo um exemplo de cada vez e descartá-lo imediatamente?

siamii
fonte
2
A resposta aceita deve ser atualizada. Parece que no momento existem várias bibliotecas que suportam algoritmos de aprendizado on-line do SVM. O vowpal wabbit tem uma redução para svm , outras alternativas são: scikit-learn, sofia-ml e o pacote kernlab do R tem algumas opções para o aprendizado on-line.
marbel

Respostas:

22

A configuração de streaming no aprendizado de máquina é chamada de "aprendizado online". Não existe uma máquina exata de vetores de suporte na configuração online (já que a definição da função objetivo é inerente à configuração do lote). Provavelmente, a generalização mais direta do SVM para a configuração online são algoritmos passivo-agressivos. O código está aqui http://webee.technion.ac.il/people/koby/code-index.html e um documento associado está aqui http://eprints.pascal-network.org/archive/00002147/01/CrammerDeKeShSi06. pdf

A idéia básica é que se receba dados como emparelha com pontos de consulta que é o número de etiquetas. O algoritmo mantém uma matriz de pesos na iteração os algoritmos recebem um ponto de dados e, em seguida, fornecem as pontuações previstas para cada um dos rótulos e prevê o rótulo com a pontuação mais alta como o rótulo verdadeiro. Se a previsão estiver incorreta, o algoritmo a menor alteração emxR k W tR k x d t x t y t = W x t W t(x,y)Rd×[k]xRkWtRk×dtxty^t=WxtWtde modo a evitar esse erro no futuro. A menor mudança é aqui definida em termos da norma de Frobenius.

Mark S
fonte
1
(+1) Bem-vindo ao site, Mark.
cardeal
11

Eu sempre achei a estrutura de atualizações implícitas (que inclui os algoritmos passivo-agressivos mencionados em outra resposta aqui) ser desnecessariamente mais complexa do que a estrutura de atualizações explícitas (sem mencionar que as atualizações implícitas podem ser muito mais lentas que as explícitas, a menos que solução de formulário fechado para atualização implícita está disponível).

As Atualizações com reconhecimento de peso de importância on-line são um exemplo de um algoritmo de atualização explícita de última geração que é mais simples, rápido e flexível (suportando múltiplas funções de perda, multas, aprendizado sensível a custos etc.) do que seus equivalentes implícitos. O artigo trata apenas de modelos lineares (svm linear corresponde ao caso da função de perda de dobradiça com penalidade quadrática)

Como você precisa de classificação de várias classes, uma abordagem é usar a funcionalidade "reduções" do vowpal wabbit (construída na parte superior da abordagem do artigo), que infelizmente não está bem documentada.

Yevgeny
fonte
8

O LASVM é uma das variantes de aprendizado on-line mais populares do SVM.

Os SVMs lineares também podem ser treinados usando a descida de gradiente estocástico, como qualquer modelo linear.

Fred Foo
fonte
Apenas para tornar as coisas claras, não qualquer modelo linear pode ser treinado usando SGD, é preciso assumir pelo menos uma forma particular da (função de perda aditivo) objetivo
lejlot
6

Consulte o artigo Aprimoramento, adaptação e otimização incrementais do SVM , que propôs um SVM on-line para classificação binária.

O código do artigo acima pode ser encontrado aqui . No código, duas maneiras de treinamento on-line são introduzidas:

  1. treinar o SVM de forma incremental em um exemplo de cada vez, chamando svmtrain()e
  2. execute o treinamento em lote, incrementando todos os exemplos de treinamento na solução simultaneamente, chamando svmtrain2().

De volta à sua pergunta, a resposta é obviamente SIM para o aprendizado de fluxo, um exemplo de cada vez. E o código também pode lidar com desaprender (descartar) um exemplo, ou seja, estimativa exata e aproximada de erro de deixar para fora (LOO) - a estimativa exata de erro de LOO pode ser calculada com eficiência, desaprendendo exatamente um exemplo de cada vez e testando o classificador em o exemplo.

herohuyongtao
fonte
(+1) Bem-vindo ao nosso site!
whuber
0

Aprendizado on-line com Kernels discute o aprendizado on-line nas configurações gerais do kernel.

Trecho do resumo -

" Algoritmos baseados em kernel, como máquinas de vetores de suporte, alcançaram um sucesso considerável em vários problemas na configuração de lotes, onde todos os dados de treinamento estão disponíveis com antecedência. As máquinas de vetores de suporte combinam o chamado truque do kernel com a idéia de grande margem. pouco uso desses métodos em um ambiente on-line adequado para aplicativos em tempo real.Neste artigo, consideramos o aprendizado on-line em um espaço de reprodução do núcleo de Hilbert.Além disso, consideramos a descida clássica do gradiente estocástico dentro de um espaço de recurso e o uso de alguns truques diretos , desenvolvemos algoritmos simples e computacionalmente eficientes para uma ampla variedade de problemas, como classificação, regressão e detecção de novidades " .

TenaliRaman
fonte