Preciso treinar um classificador linear no meu laptop com centenas de milhares de pontos de dados e cerca de dez mil recursos. Quais são as minhas opções? Qual é o estado da arte para esse tipo de problema?
Parece que a descida do gradiente estocástico é uma direção promissora, e meu senso é que este é o estado da arte:
"Pegasos: Primal estimado sub-GrAdient SOlver para SVM" Shai Shalev-Shwartz, Yoram Singer, Nathan Srebro, Andrew Cotter. "Programação matemática, série B, 127 (1): 3-30, ano: 2007".
Esse é o consenso? Eu deveria estar olhando em alguma outra direção?
classification
carlosdc
fonte
fonte
Respostas:
Eu acho que você deve olhar para os métodos de aprendizagem on - line . O perceptron e o perceptron do kernel são extremamente fáceis de codificar e funcionam muito bem na prática, e existem vários outros métodos online. Observe que qualquer método de aprendizado on-line pode ser convertido em um algoritmo de aprendizado em lote, caso em que se assemelham aos métodos de descida estocástica de gradiente.
Se você estiver usando o Matlab, há uma caixa de ferramentas muito boa chamada DOGMA, de Francesco Orabona, que contém vários algoritmos de aprendizado on-line, e você pode avaliar alguns métodos diferentes usando isso. Eu usei isso em algumas das minhas pesquisas e achei muito útil (note que, tanto quanto me lembro, os dados são esperados como [recursos x exemplos], para que você precise transpor esses dados).
Como outros já mencionaram, convém tentar reduzir a dimensionalidade. O PCA pode não ser uma opção tão boa aqui, pois você precisa calcular a matriz de covariância, que será muito cara. Você pode tentar olhar para projeções aleatórias . A teoria é dura, mas o princípio é muito simples. É baseado no Johnson-Lindenstrauss Lemma, se você estiver interessado, mas a idéia básica é que, se você projetar aleatoriamente em um espaço dimensional inferior, distâncias entre os pontos serão preservadas até ϵ . Se você estiver usando um kernel RBF, você precisará de ℓ 2 distâncias!ℓ2 ϵ ℓ2
fonte
Primeiro, gostaria de perguntar como você sabe que classificador linear é a melhor escolha? Intuitivamente, para um espaço tão grande (R ^ 10000), é possível que algum outro classificador não linear seja uma escolha melhor.
Eu sugiro que você tente vários classificadores diferentes e observe os erros de previsão (eu tentaria vários modelos de classificação regularizados).
Se você ficar sem memória, reduza a dimensão usando o PCA
fonte
Você também pode usar o PCA para reduzir dimensões sem computar a matriz de covariância --- usando o equivalente neural de PCA do PCA.
Aqui está um documento que o descreve (mas eu recomendo fazer sua própria pesquisa): http://users.ics.tkk.fi/oja/Oja1982.pdf , e aqui está um link para algumas coisas que podem estar funcionando na implementação do matlab: http : //www.cs.purdue.edu/homes/dgleich/projects/pca_neural_nets_website/index.html .
fonte
Como jb sugeriu, acho melhor usar o método "Redução de dimensão". A Análise de Componentes Principais (PCA) é uma escolha popular. Além disso, você também pode tentar técnicas de aprendizado de recursos não supervisionados. Para obter mais informações sobre o aprendizado de recursos não supervisionados, consulte http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial
fonte