Eu tenho um problema de grande volume de dados com um grande conjunto de dados (por exemplo, 50 milhões de linhas e 200 colunas). O conjunto de dados consiste em cerca de 100 colunas numéricas e 100 colunas categóricas e uma coluna de resposta que representa um problema de classe binária. A cardinalidade de cada uma das colunas categóricas é menor que 50.
Quero saber a priori se devo optar por métodos de aprendizado profundo ou por métodos baseados em árvores de conjunto (por exemplo, aumento de gradiente, adaboost ou florestas aleatórias). Existem análises exploratórias de dados ou outras técnicas que podem me ajudar a decidir por um método em relação ao outro?
Acho que, a menos que você tenha uma boa intuição sobre as propriedades dos dados, você acaba explorando as duas opções (talvez apenas em 500.000 linhas) e a validação cruzada. Mas talvez haja visualizações ou outras análises que possam ajudá-lo a obter essa intuição.
Na verdade, planejei fazer uma grande comparação de modelos para minha própria pesquisa em dados reais esta semana. Vou limpar um pouco os resultados e publicá-los aqui. Além disso, pelo menos um estudante de CS tem estudado a questão: academia.edu/3526056/...
@NeilSlater eu gostaria de ver uma resposta abordar o que a intuição poder / poderia / deveria ser
Ainda não tenho reputação suficiente para fazer um breve comentário sobre sua pergunta original e isso não é realmente uma resposta. De qualquer forma, queria dizer que acho que este artigo é bastante relevante para esta questão: Fernández-Delgado, M., Cernadas, E., Barro, S., & Amorim, D. (2014). Precisamos de centenas de classificadores para resolver problemas de classificação no mundo real? The Journal of Machine Learning Research, 15, 3133-3181. Obtido em dl.acm.org/citation.cfm?id=2697065
— José María Mateos
Existem análises exploratórias de dados ou outras técnicas que podem me ajudar a decidir por um método em relação ao outro? No caso geral não, o 'teorema do almoço sem graça' prova isso. Mas há heurísticas que podem orientá-lo na direção certa por exemplo scikit-learn.org/stable/tutorial/machine_learning_map/...
Por que se restringir a essas duas abordagens? Porque eles são legais? Eu sempre começaria com um classificador linear simples \ regressor. Portanto, neste caso, uma SVM linear ou regressão logística, de preferência com uma implementação de algoritmo que pode tirar proveito da escarsidade devido ao tamanho dos dados. Levará muito tempo para executar um algoritmo de DL nesse conjunto de dados, e normalmente eu tentaria apenas um aprendizado profundo sobre problemas especializados, onde há alguma estrutura hierárquica nos dados, como imagens ou texto. É um exagero para muitos problemas de aprendizagem mais simples, e leva muito tempo e conhecimento para aprender e também os algoritmos de DL são muito lentos para treinar. Além disso, apenas porque você tem 50 milhões de linhas, não significa que você precisa usar todo o conjunto de dados para obter bons resultados. Dependendo dos dados, você pode obter bons resultados com uma amostra de algumas 100.000 linhas ou alguns milhões. Eu começaria simples, com uma pequena amostra e um classificador linear, e ficaria mais complicado a partir daí, se os resultados não fossem satisfatórios. Pelo menos assim, você obterá uma linha de base. Muitas vezes, encontramos modelos lineares simples para executar modelos mais sofisticados na maioria das tarefas, então você sempre quer começar por aí.
1 para o arranque com um modelo simples e de sub-amostragem
Concordo em usar o svm para dados esparsos, mas você não acha que o svm levará muito tempo para treinar um conjunto de dados dimensionais tão grandes!
— blitu12345
Não, especialmente se for escasso e usar um kernel linear. Mas eles podem ter problemas com um grande número de linhas. De qualquer maneira, será muito mais rápido que um modelo de DL. Mas observe que eu também recomendei a regressão logística.
Meu ponto principal é começar com um modelo linear simples e nem usar o conjunto de dados completo, pois é improvável que você precise de todo o conjunto de dados para obter um bom desempenho. Duvido que exista muita diferença de precisão entre o uso de digamos 100 mil linhas e alguns milhões.
+1 para experimentar o aprendizado profundo sobre problemas de especialistas nos quais há alguma estrutura hierárquica nos dados
Além de outras respostas (e há um bom link nos comentários), depende de qual é o problema ou de quais tipos de perguntas você deseja responder. Como só posso sugerir com base em minha própria experiência, no caso de uma tarefa de classificação, os métodos possíveis podem ser severamente limitados com base no equilíbrio de classes no conjunto de dados.
Quando você atinge um desequilíbrio maior que cerca de 1:10 da classe, a maioria dos métodos de classificação simplesmente para de funcionar. Você ficará com métodos baseados em floresta aleatória e talvez em redes neurais (ainda não tentei). Trabalho com o saldo da classe no intervalo de 1: 500 a 1: 1000 e constatei que nem a redução ou a ampliação da amostra funcionam. Felizmente, meu conjunto de dados é "apenas" observações de 6mln por 200 variáveis ​​e sou capaz de executar árvores otimizadas em todo o conjunto em tempo razoável.
Então, para responder diretamente à sua pergunta:
você deve formular um monte de perguntas que gostaria de responder e, em caso de classificação, verifique os saldos das classes das variáveis ​​de destino.
você deve verificar a distribuição (não no sentido matemático) de valores ausentes em todos os seus dados e documentar o que encontra. Alguns métodos de ML são bons com valores ausentes, enquanto outros não, e você precisa examinar a imputação de dados (que possui seu próprio conjunto de regras, diretrizes e problemas).
Tente SGD classificador de sklearn com class_weight = "equilibrado"
Na minha perspectiva, para 5 milhões de instâncias, você precisa de muitas árvores para obter uma boa generalização (um bom modelo no termo leigo). Se isso não for um problema, tente-o, mesmo a resposta exata depende da natureza do seu problema. O GBT é um bom método, especialmente se você misturar tipos de recursos como categórico, numérico e outros. Além disso, em comparação com as Redes Neurais, possui um número menor de hiperparâmetros a serem ajustados. Portanto, é mais rápido ter um melhor modelo de configuração. Mais uma coisa é a alternativa do treinamento paralelo. Você pode treinar várias árvores ao mesmo tempo com uma boa CPU. Se você não estiver satisfeito com os resultados, vá para as Redes Neurais, pois isso significa que seu modelo deve ser mais extenso e deve aprender informações de ordem superior através de seus dados. Isso é devido às NNs em comparação com outros algoritmos de aprendizado.
Na linha do que o @Simon já disse:
As abordagens de aprendizado profundo têm sido particularmente úteis na solução de problemas de modelagem de visão, fala e linguagem, onde a engenharia de recursos é complicada e exige muito esforço.
Para o seu aplicativo, isso não parece ser o caso, pois você possui recursos bem definidos e são necessárias apenas interações de recursos, etc.
Dado que os modelos de aprendizado profundo atualmente precisam de muitos recursos de computação e tempo de cientista para codificar as coisas, sugiro optar por uma abordagem de aprendizado não profundo.
Para o seu problema, a troca de esforço versus benefício não parece estar a favor da aprendizagem profunda. DL seria um exagero
Quando você tem um conjunto de dados tão grande, pode jogar com qualquer uma das técnicas de modelagem estatística e de aprendizado de máquina, e isso é altamente recomendável. Como outros sugeriram, eu também recomendaria coletar alguns milhões de amostras aleatórias dos dados e brincar com isso. Como esse é um problema de classificação, seguirei primeiro as técnicas simples de classificação e depois as mais complexas. A regressão logística é ótima para começar.
Eu queria acrescentar que modelos generativos também devem ser experimentados. O classificador Naive Bayes é um dos classificadores probabilísticos mais simples e supera muitos métodos complexos, como suporta máquinas de vetores em muitas tarefas. Você pode observar esta simples implementação do NB e este link para comparação do NB à regressão logística.
Pode-se construir um classificador Naive bayes (NB) como modelo de linha de base e, em seguida, optar por qualquer técnica de aprendizado de máquina, como máquinas de vetor de suporte (SVM) ou perceptrons de multicamadas (MLP). Uma desvantagem aqui é que o NB é computacionalmente mais barato que o MLP e, portanto, é desejado um melhor desempenho do MLP.
Chegando à sua consulta exata: O aprendizado profundo e o aprimoramento da árvore de gradiente são técnicas muito poderosas que podem modelar qualquer tipo de relacionamento nos dados. Mas e se, no seu caso, uma simples regressão logística ou RN estiver dando a precisão desejada. Portanto, é sempre melhor experimentar primeiro as técnicas simples e ter um desempenho básico. Depois, pode-se optar por modelos complexos e comparar com a linha de base.