Mesclando dados esparsos e densos no aprendizado de máquina para melhorar o desempenho

17

Eu tenho características esparsas que são preditivas, também tenho algumas características densas que também são preditivas. Preciso combinar esses recursos para melhorar o desempenho geral do classificador.

Agora, quando tento combiná-los, os recursos densos tendem a dominar mais sobre os recursos esparsos, oferecendo, portanto, apenas 1% de melhoria na AUC em comparação com o modelo com apenas recursos densos.

Alguém já se deparou com problemas semelhantes? Realmente aprecio as entradas, meio que presas. Eu já tentei muitos classificadores diferentes, combinação de classificadores, transformações de recursos e processamento com algoritmos diferentes.

Obrigado antecipadamente pela ajuda.

Editar :

Eu já tentei as sugestões que são dadas nos comentários. O que eu observei é que, para quase 45% dos dados, recursos esparsos têm um desempenho muito bom, eu recebo a AUC de cerca de 0,9 com apenas recursos esparsos, mas para os demais, os recursos densos têm um desempenho bem com AUC de cerca de 0,75. Eu meio que tentei separar esses conjuntos de dados, mas recebo a AUC de 0,6; portanto, não posso simplesmente treinar um modelo e decidir quais recursos usar.

Em relação ao snippet de código, experimentei tantas coisas que não sei exatamente o que compartilhar :(

Sagar Waghmode
fonte
Quão escassas são suas características? Eles são preenchidos a 1% ou até menos?
João Almeida
2
Além disso, observe que, se seus recursos forem escassos, eles deverão ajudar a classificar apenas uma pequena parte do seu conjunto de dados, o que significa que, em geral, a precisão não deve mudar significativamente. Isso é um palpite, já que não sei quais são as características do seu conjunto de dados.
João Almeida
@ JoãoAlmeida Eles não são tão escassos. Eles são cerca de 5% preenchidos. O problema é quando observo a diferença nas previsões de dois modelos, onde as previsões diferem, o modelo com recursos esparsos tende a ter um desempenho melhor, é por isso que eu esperava que ele também visse o aumento na AUC quando os combinei com os recursos densos . Estou recebendo um impulso, mas parece muito baixo.
Sagar Waghmode
hum ... eu não tenho nenhuma idéia para você, então
João Almeida
eu conheci o mesmo problema, talvez simplesmente colocar recurso denso e esparso em um único modelo não é uma boa escolha. talvez você possa tentar um modelo amplo e profundo. amplo para recursos esparsos e profundo para recursos densos, se você tentou esse método, diga-me a resposta.
Jianye Ji

Respostas:

6

Parece um trabalho para a Análise de componentes principais. No Scikit, o PCA é bem implementado e me ajudou muitas vezes.

O PCA, de certa maneira, combina seus recursos. Ao limitar o número de componentes, você busca seu modelo com dados sem ruído (na melhor das hipóteses). Porque seu modelo é tão bom quanto seus dados.

Considere abaixo um exemplo simples.

from sklearn.pipeline import Pipeline
pipe_rf = Pipeline([('pca', PCA(n_components=80)),
                    ('clf',RandomForestClassifier(n_estimators=100))])
pipe_rf.fit(X_train_s,y_train_s)

pred = pipe_rf.predict(X_test)

Por que eu escolhi 80? Quando planto a variação cumulativa, obtive isso abaixo, o que me diz que, com ~ 80 componentes, alcanço quase toda a variação. variância cumulativa

Então, eu diria que tente, use em seus modelos. Isso deve ajudar.

HonzaB
fonte
4

A melhor maneira de combinar recursos é através de métodos de conjunto. Basicamente, existem três métodos diferentes: ensacamento, reforço e empilhamento. Você pode usar o Adabbost aumentado com a seleção de recursos (considere recursos esparsos e densos) ou com base em empilhamento (recurso aleatório - subespaço aleatório). Prefiro a segunda opção: você pode treinar um conjunto de alunos básicos (decisões. Árvores) usando aleatoriamente subconjuntos e recurso aleatório (mantenha os alunos da base de treinamento até cobrir todo o conjunto de recursos) O próximo passo é testar o conjunto de treinamento para gerar os metadados. Use esses metadados para treinar um meta classificador. O meta classificador descobrirá qual recurso é mais importante e que tipo de relacionamento deve ser utilizado

Bashar Haddad
fonte
Você pode compartilhar a documentação relevante? Não conseguiu exatamente o que você quis dizer?
Sagar Waghmode
Você pode ler um artigo sobre "problemas nas técnicas de empilhamento, 1999", sobre empilhamentoC. É muito importante saber que estou falando sobre o vetor inteiro (por exemplo, 1x36 no caso de Hog) como um recurso, mas não as dimensões nele contidas. Você precisa rastrear qual recurso usado com qual aluno base. Tenha cuidado sobre o problema overfitting
Bashar Haddad
Se você fornecer mais detalhes sobre o banco de dados, número de classes, número de amostras, código, o que você tentou, o que notou, há um problema de desequilíbrio de dados, amostras barulhentas, etc. Todos esses detalhes são importantes e podem ajudar na seleção do melhor método. Dá-me mais detalhes Se esta ok e eu posso ajudar de uma maneira melhor
Bashar Haddad
1

Os grupos de variáveis ​​podem ser multicolineares ou a conversão entre esparsos e densos pode dar errado. Você já pensou em usar um classificador / classificação de votação? http://scikit-learn.org/stable/modules/ensemble.html Dessa forma, você pode lidar com os dois problemas acima.

Diego
fonte
Eu já experimentei as técnicas do conjunto, bem como os classificadores de votação. Ainda sem sorte.
Sagar Waghmode
Então você vê muita sobreposição entre as previsões dos dois conjuntos de dados? Pode haver realmente nenhuma informação nova? Ou seja, os dados contam a mesma história.
Diego
sim, eu fiz exatamente isso. Embora as previsões não sejam totalmente diferentes, o número de amostras em que as previsões diferem é bastante alto (cerca de 15 a 20%) dos dados. Para essas amostras, o modelo com recursos esparsos executa melhor que o modelo com recursos densos. O que quero dizer é que, se os recursos esparsos tiverem um desempenho melhor, por que eles não são recursos importantes em nenhum dos modelos que eu tentei até agora.
Sagar Waghmode
Qual algoritmo preditivo você usa?
Diego
Eu experimentei alguns algoritmos e decidi usar o Gradient Boosted Model, também uso Random Forests bastante para o meu problema.
Sagar Waghmode
1

Além de algumas das sugestões acima, eu recomendaria o uso de uma abordagem de modelagem em duas etapas .

  1. Use os recursos esparsos primeiro e desenvolva o melhor modelo.
  2. Calcule a probabilidade prevista desse modelo.
  3. Alimente essa estimativa de probabilidade para o segundo modelo (como um recurso de entrada), que incorporaria os recursos densos. Em outras palavras, use todos os recursos densos e a estimativa de probabilidade para construir o segundo modelo.
  4. A classificação final será então baseada no segundo modelo.
Vishal
fonte
0

Experimente o PCA apenas em recursos esparsos e combine a saída PCA com recursos densos.

Assim, você terá um conjunto denso de recursos (originais) + conjunto denso de recursos (originalmente escassos).

+1 para a pergunta. Por favor, atualize-nos com os resultados.

Tagar
fonte
Uau, isso reduziu a AUC :( Não tenho certeza, o que isso significa, precisa verificar a importância do recurso e tudo mais. Mas minha filosofia é que, dentre cerca de 2,3 mil recursos esparsos, usei os recursos 1k que explicavam a taxa de variação de 0,97, esta perda de informação pode ter derrubado AUC.
Sagar Waghmode
Interessante. Obrigado por compartilhar. Temos um conjunto de dados muito semelhante ao seu (recursos esparsos de 1 a 2k). Por curiosidade, quantos componentes principais você gerou? Se esse número for muito baixo, isso pode explicar por que a AUC caiu.
Tagar 18/04
Como eu já disse, gerei 1k componentes principais que estavam explicando a variação de 0,97.
Sagar Waghmode