Como abordar problemas de aprendizado de máquina com espaço de entrada de alta dimensão?

StackOverflow https://stackoverflow.com/questions/2255833

Pergunta

Como devo abordar uma situação quando tento aplicar algum algoritmo de ML (classificação, para ser mais específico, SVM em particular) sobre alguma entrada de alta dimensão, e os resultados que obtenho não são muito satisfatórios?

Dados unidimensionais, bidimensionais ou tridimensionais podem ser visualizados, juntamente com os resultados do algoritmo, para que você possa entender o que está acontecendo e ter uma ideia de como abordar o problema.Uma vez que os dados ultrapassam três dimensões, além de brincar intuitivamente com os parâmetros, não tenho certeza de como atacá-los.

Foi útil?

Solução

O que você faz com dados?Minha resposta: nada.SVMs são projetado para lidar com dados de alta dimensão.Estou trabalhando em um problema de pesquisa que envolve classificação supervisionada usando SVMs.Além de encontrar fontes na Internet, fiz meus próprios experimentos sobre o impacto da redução da dimensionalidade antes da classificação.O pré-processamento dos recursos usando PCA/LDA não aumentou significativamente a precisão da classificação do SVM.

Para mim, isso faz todo o sentido pela forma como os SVMs funcionam.Seja x um vetor de características m-dimensional.Seja y = Ax onde y está em R^n e x está em R^m para n <m, ou seja, y é x projetado em um espaço de dimensão inferior.Se as classes Y1 e Y2 são linearmente separáveis ​​em R^n, então as classes correspondentes X1 e X2 são linearmente separáveis ​​em R^m.Portanto, os subespaços originais deveriam ser "pelo menos" tão separáveis ​​quanto suas projeções em dimensões inferiores, ou seja, o PCA não deveria ajudar, em teoria.

Aqui está uma discussão que debate o uso do PCA antes do SVM: link

O que você pode fazer é alterar seus parâmetros SVM.Por exemplo, com libsvm link, os parâmetros C e gama são de importância crucial para o sucesso da classificação.O faq do libsvm, particularmente esta entrada link, contém dicas mais úteis.Entre eles:

  1. Dimensione seus recursos antes da classificação.
  2. Tente obter aulas equilibradas.Se for impossível, penalize mais uma classe do que a outra.Veja mais referências sobre desequilíbrio de SVM.
  3. Verifique os parâmetros SVM.Experimente muitas combinações para chegar à melhor.
  4. Use o kernel RBF primeiro.Quase sempre funciona melhor (em termos computacionais).
  5. Quase esqueci...antes de testar, validação cruzada!

EDITAR:Deixe -me adicionar esse "ponto de dados". Recentemente, fiz outro experimento em larga escala usando o SVM com o pré-processamento da PCA em quatro conjuntos de dados exclusivos.O PCA não melhorou os resultados da classificação para qualquer opção de dimensionalidade reduzida.Os dados originais com escala diagonal simples (para cada recurso, subtrair a média e dividir pelo desvio padrão) tiveram melhor desempenho.Não estou tirando nenhuma conclusão ampla – apenas compartilhando este experimento.Talvez em dados diferentes, o PCA possa ajudar.

Outras dicas

Algumas sugestões:

  • Dados do projeto (apenas para visualização) para um espaço inferior dimensional (usando PCA ou MDS ou o que quer que faça sentido para seus dados)

  • Tente entender por que o aprendizado falha. Você acha que overfits? Você acha que tem dados suficientes? É possível que não haja informações suficientes em seus recursos para resolver a tarefa que você está tentando resolver? Existem maneiras de responder a cada uma dessas perguntas sem visualizar os dados.

Além disso, se você nos disser qual é a tarefa e qual é a sua saída SVM, pode haver sugestões mais específicas que as pessoas possam fazer.

Eu abordaria o problema da seguinte maneira:

O que você quer dizer com "os resultados que obtive não são muito satisfatórios"?

Se a taxa de classificação no Treinamento dados são insatisfatórios, implica que

  • Você tem outliers em seus dados de treinamento (dados classificados incorretamente). Nesse caso, você pode tentar algoritmos como Ransac para lidar com isso.
  • Sua modelo(SVM neste caso) não é adequado para esse problema. Isso pode ser diagnoszado experimentando outros modelos (adaboost etc.) ou adicionando mais parâmetros ao seu modelo atual.
  • o representação dos dados não são adequados para sua tarefa de classificação. Nesse caso

Se a taxa de classificação no teste Os dados são insatisfatórios, implica que seu modelo Overfits os dados:

  • Seu modelo é muito complexo (muitos parâmetros) e precisa ser restrito ainda mais,
  • Ou você o treinou em um conjunto de treinamento que é muito pequeno e precisa de mais dados

Claro que pode ser uma mistura dos elementos acima. Todos esses são métodos "cegos" para atacar o problema. Para obter mais informações sobre o problema, você pode usar métodos de visualização projetando os dados em dimensões mais baixas ou procure modelos que sejam adequados melhor ao domínio do problema como você o entende (por exemplo, se você sabe que os dados são normalmente distribuídos, pode Use GMMs para modelar os dados ...)

Você pode tentar reduzir a dimensionalidade do problema por PCA ou técnica semelhante.Esteja ciente de que o PCA tem dois pontos importantes.(1) Assume que os dados aos quais é aplicado são normalmente distribuídos e (2) os dados resultantes perdem seu significado natural (resultando em uma caixa preta).Se você consegue conviver com isso, experimente.

Outra opção é tentar vários algoritmos de seleção de parâmetros.Como os SVMs já foram mencionados aqui, você pode tentar a abordagem de Chang e Li (Classificação de recursos usando SVM linear) em que usaram SVM linear para pré-selecionar "recursos interessantes" e, em seguida, usaram SVM baseado em RBF nos recursos selecionados.Se você estiver familiarizado com Orange, uma biblioteca de mineração de dados python, você poderá codificar esse método em menos de uma hora.Observe que esta é uma abordagem gananciosa que, devido à sua "ganância", pode falhar nos casos em que as variáveis ​​de entrada são altamente correlacionadas.Nesse caso, e se você não conseguir resolver este problema com PCA (veja acima), você pode querer recorrer a métodos heurísticos, que tentam selecionar as melhores combinações possíveis de preditores.A principal armadilha desse tipo de abordagem é o alto potencial de overfitting.Certifique-se de ter muitos dados "virgens" que não foram vistos durante todo o processo de construção do modelo.Teste seu modelo nesses dados apenas uma vez, depois de ter certeza de que o modelo está pronto.Se falhar, não use esses dados mais uma vez para validar outro modelo, você terá que encontrar um novo conjunto de dados.Caso contrário, você não terá certeza de que não se ajustou demais mais uma vez.

Lista de artigos selecionados sobre seleção de parâmetros:Seleção de recursos para dados de microarranjos genômicos de alta dimensão

Ah, e mais uma coisa sobre o SVM.SVM é uma caixa preta.É melhor você descobrir qual é o mecanismo que gera os dados e modelar o mecanismo e não os dados.Por outro lado, se isso fosse possível, muito provavelmente você não estaria aqui fazendo essa pergunta (e eu não ficaria tão ressentido com o overfitting).

Lista de artigos selecionados sobre seleção de parâmetros

  1. Seleção de recursos para dados de microarranjos genômicos de alta dimensão
  2. Wrappers para seleção de subconjuntos de recursos
  3. Seleção de parâmetros na otimização de enxame de partículas
  4. Trabalhei no laboratório que desenvolveu este Método estocástico para determinar, in silico, o caráter de droga das moléculas

Se eu não estiver errado, você está tentando ver quais parâmetros para o SVM oferecem o melhor resultado. Seu problema é o ajuste de modelo/curva. Eu trabalhei em um problema semelhante alguns anos atrás. Existem toneladas de bibliotecas e algos para fazer o mesmo. eu usei Newton-RaphsonAlgoritmo e uma variação do algoritmo genético para se ajustar à curva.

Gere/adivinhe/obtenha o resultado que você espera, através do experimento do mundo real (ou se estiver fazendo uma classificação simples, faça -o sozinho). Compare isso com a saída do seu SVM. Os algos que mencionei anteriormente reiteram esse processo até o resultado do seu modelo (SVM neste caso) corresponde um pouco aos valores esperados (observe que esse processo levaria algum tempo com base no seu problema/tamanho de dados. Levou cerca de 2 meses para mim no um cluster beowulf 140 nó).

Se você optar por ir com o Newton-Raphson's, isto Pode ser um bom lugar para começar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top