Eu tenho um conjunto de dados de cerca de 5000 recursos. Para esses dados, usei o teste Chi Square para seleção de recursos; depois disso, obtive cerca de 1500 variáveis que mostraram relação de significância com a variável resposta.
Agora eu preciso ajustar a regressão logística nisso. Estou usando o pacote glmulti para R (o pacote glmulti fornece seleção eficiente de subconjuntos para vlm), mas ele pode usar apenas 30 recursos por vez; caso contrário, seu desempenho diminui à medida que o número de linhas no meu conjunto de dados é de cerca de 20000.
Existe alguma outra abordagem ou técnica para resolver os problemas acima? Se eu seguir o método acima, levará muito tempo para ajustar o modelo.
sklearn
éLogisticRegression
e ele resolve um 4000 recursos, problema 20.000 linhas em cerca de um minuto no meu laptop.Respostas:
Não é apropriado fazer a triagem de recursos e, em seguida, alimentar os recursos sobreviventes em um método que não entenda quanta tortura de dados foi feita anteriormente. É melhor usar um método que possa lidar com todos os recursos em potencial (por exemplo, rede elástica). Outras sugestões sobre o uso da redução de dados também são excelentes idéias.
fonte
Uma primeira abordagem é usar o PCA para reduzir a dimensionalidade do conjunto de dados. Tente manter ~ 97% da variação total, isso pode ajudar bastante.
Outra opção é usar algo como descida de gradiente estocástico, este pode ser um algoritmo muito mais rápido e capaz de caber na memória de R.
EDIT: Um problema com o R é que você só pode usar sua RAM; portanto, se você tiver apenas 8 GB de memória, é a isso que você está limitado. Eu já tive muitos problemas com isso e, desde então, passei a usar o scikit-learn do python, que parece lidar com conjuntos de dados maiores muito melhor.
Um gráfico muito bom, que dá uma idéia de locais para começar com base no tamanho do seu conjunto de dados, pode ser encontrado aqui: http://3.bp.blogspot.com/-dofu6J0sZ8o/UrctKb69QdI/AAAAAAAAADfg/79ewPecn5XU/s1600/scikit-learn-flow -chart.jpg
fonte
Como o @Frank Harrell já mencionou, o uso de rede elástica ou LASSO para executar regressão penalizada com todos os 5.000 recursos ( p ) seria um bom começo para a seleção de recursos (não se pode simplesmente remover 3500 variáveis porque elas não são "estatisticamente significativas" com o variável de interesse dependente). Qualquer um desses métodos pode ser executado usando o pacote R
glmnet
,.Para levar em conta os relacionamentos compartilhados entre as possíveis variáveis preditoras de interesse ( p = 5000), eu recomendaria executar uma floresta aleatória usando o
randomForest
pacote e / ou aumentar o gradiente usando ogbm
pacote para avaliar a importância relativa das possíveis variáveis preditoras em relação ao resultado binário. Com essas informações, você estará muito mais preparado para construir um modelo de regressão logística mais parcimonioso.fonte
Suponho que você não esteja limitado ao R, pois esse é um problema de grande volume de dados que você provavelmente não deveria estar. Você pode experimentar o MLlib , que é a biblioteca de aprendizado de máquina escalável do Apache Spark.
O Apache Spark , por sua vez, é um mecanismo rápido e geral para processamento de dados em larga escala na memória. Eles operam em uma estrutura do Hadoop que permite o processamento distribuído de grandes conjuntos de dados entre clusters de computadores usando modelos de programação simples. Ele foi projetado para expandir de servidores únicos para milhares de máquinas, cada uma oferecendo computação e armazenamento local.
Observe que 'milhares de máquinas' é opcional (!), Você também pode configurá-lo na área de trabalho / área de trabalho local.
Voltando ao MLlib, ele vem com os algoritmos abaixo, prontos para uso:
Se você trabalha regularmente com big data, pode ser necessário adotar uma solução Hadoop.
fonte
Você pode experimentar o Vowpal Wabbit: Vowpal Wabbit . Funciona bem com conjuntos de dados muito grandes e um número muito grande de recursos.
de acordo com o site:
fonte