Combinando modelos de aprendizado de máquina

20

Sou um pouco novo em datamining / machine learning / etc. e lemos algumas maneiras de combinar vários modelos e execuções do mesmo modelo para melhorar as previsões.

Minha impressão ao ler alguns artigos (que geralmente são interessantes e ótimos em teoria e letras gregas, mas com pouco código e exemplos reais) é que deveria ser assim:

Pego um modelo ( knn, RFetc) e obtenho uma lista de classificadores entre 0 e 1. Minha pergunta é como combinar cada uma dessas listas de classificadores? Executo os mesmos modelos no meu conjunto de treinamento para que o número de colunas que entram no modelo final seja o mesmo ou exista algum outro truque?

Seria ótimo se alguma sugestão / exemplo incluísse código R.

NOTA: Isto é para um conjunto de dados com 100k linhas no conjunto de treinamento e 70k no conjunto de teste e 10 colunas.

Coruja
fonte

Respostas:

21

Na verdade, tudo se resume a uma das técnicas "3B": ensacamento, reforço ou mistura.

No ensacamento, você treina muitos classificadores em diferentes subconjuntos de objetos e combina respostas, em média, para regressão e votação para classificação (existem outras opções para situações mais complexas, mas eu vou pular). A proporção / variação do voto pode ser interpretada como aproximação de erro, uma vez que os classificadores individuais são geralmente considerados independentes. RF é de fato um conjunto de ensacamento.

O impulso é uma família de métodos mais ampla, no entanto, o ponto principal é que você construa o próximo classificador nos resíduos do primeiro, dessa maneira (em teoria) aumentando gradualmente a precisão, destacando interações cada vez mais sutis. Assim, as previsões são geralmente combinadas somando-as, algo como calcular um valor de uma função em x somando valores dos elementos de suas séries de Taylor para x.
As versões mais populares são o aumento de gradiente (estocástico) (com boa base matemática) e o AdaBoost (bem conhecido, de fato, um caso específico de GB). De uma perspectiva holística, a árvore de decisão é um impulsionador de classificadores dinâmicos triviais.

Misturar é uma idéia de aninhar classificadores, ou seja, executar um classificador em um sistema de informações feito de previsões de outros classificadores. Sendo assim, é um método muito variável e certamente não um algoritmo definido; pode exigir muitos objetos (na maioria dos casos, o classificador "blender" deve ser treinado em um conjunto de objetos que não foram usados ​​para criar os classificadores parciais para evitar um super ajuste embaraçoso).
As previsões dos classificadores parciais são obviamente combinadas, combinando-as em um sistema de informação previsto pelo liquidificador.


fonte
7

A expressão "combinando modelos" é vaga, mas meu palpite é que você está perguntando sobre métodos de aprendizagem de conjuntos. A melhor referência para aprender sobre eles talvez seja os documentos de Rich Caruana:

http://www.cs.cornell.edu/~caruana/ctp/ct.papers/caruana.icml04.icdm06long.pdf

Não há código real neste artigo, mas o algoritmo está claramente descrito, portanto você não deve ter nenhum problema em codificá-lo no idioma que preferir.

user765195
fonte
2

Depois de procurar um pouco com as respostas acima, percebi qual era o meu problema. Eu estava tentando usar as previsões de outros modelos no mesmo modelo usado para prever. Em outras palavras, se eu tivesse 5 variáveis ​​ao executar o kNNmodelo, adicionaria uma nova variável às previsões do kNNmodelo e faria um modelo com 6 variáveis ​​ao executar o modelo aleatório da Floresta. Descobri que os resultados dos modelos deveriam ser segmentados e executados como um modelo separado. Então eu criar previsões de vários modelos ( knn, RF, svd, etc.), em seguida, executar a / mistura / modelo empilhamento combinando separado usando apenas as previsões como variáveis e as classificações como o de prever.

Eu acho que alguns dos meus problemas foram que, combinando as previsões com as outras variáveis, pode ter havido alguma adaptação excessiva ou multicolinearidade, mas não tenho certeza. Outra pessoa pode ser capaz de avaliar melhor o que eu estava fazendo de errado. De qualquer forma, obrigado a todos por sua ajuda.

Coruja
fonte