Mais uma pergunta geral. Estou executando um SVM rbf para modelagem preditiva. Acho que meu programa atual definitivamente precisa de um pouco de velocidade. Eu uso o scikit learn com uma pesquisa de grade grossa a fina + validação cruzada.
Cada execução do SVM leva cerca de um minuto, mas com todas as iterações, continuo achando muito lenta. Supondo que, eventualmente, multiencadeie a parte da validação cruzada em vários núcleos, alguma recomendação para acelerar meu programa? Alguma implementação mais rápida de SVMs? Já ouvi falar de alguns SVMs de GPU, mas não me aprofundou muito nisso. Algum usuário e é mais rápido?
Respostas:
O algoritmo Sofia do Google contém uma implementação extremamente rápida de um SVM linear. É um dos SVMs mais rápidos do mercado, mas acho que ele suporta apenas classificação e apenas SVMs lineares.
Existe até um pacote R !
fonte
A aceleração mais fácil que você obterá é executar a validação cruzada em paralelo. Pessoalmente, eu gosto do pacote de intercalação em R , que usa foreach como back-end. Isso facilita muito o farm de validação cruzada e pesquisa de grade em vários núcleos ou em várias máquinas.
O Caret pode lidar com muitos modelos diferentes, incluindo SVMs rbf:
Observe que a biblioteca doMC () está disponível apenas no mac e no linux, deve ser executada a partir da linha de comando, não de uma GUI, e quebra todos os modelos do RWeka. Também é fácil usar clusters MPI ou SNOW como back-end paralelo, que não apresenta esses problemas.
fonte
Sei que essa é uma pergunta bastante antiga, mas também é possível (dependendo do tamanho do seu conjunto de dados, pode ser mais ou menos eficaz) usar aproximações de baixa dimensão do mapa de recursos do kernel e usá-la em um SVM linear. Veja http://scikit-learn.org/stable/modules/kernel_approximation.html
fonte
Dê uma olhada no módulo de multiprocessamento do Python . Torna as coisas paralelas realmente fáceis e é perfeito para validação cruzada.
fonte
O R possui um ótimo pacote svm acelerado por GPU , rpusvm , leva ~ 20 segundos para treinar em amostras de 20K * 100 dimensões, e eu descobri que a CPU nunca é sobrecarregada por ela, portanto, ela usa a GPU com eficiência. No entanto, requer uma GPU NVIDIA.
fonte
Alerta: Este é um plug descarado.
Considere o DynaML uma biblioteca ML baseada em Scala em que estou trabalhando. Eu implementei LS-SVM (máquinas de vetores de suporte de mínimos quadrados) com base em kernel, juntamente com o ajuste automático de kernel, usando pesquisa de grade ou recozimento simulado acoplado.
http://mandar2812.github.io/DynaML/
fonte