Utilitário de engenharia de recursos: Por que criar novos recursos com base nos recursos existentes?

30

Costumo ver pessoas criar novos recursos com base nos recursos existentes em um problema de aprendizado de máquina. Por exemplo, aqui: https://triangleinequality.wordpress.com/2013/09/08/basic-feature-engineering-with-the-titanic-data/ as pessoas consideram o tamanho da família de uma pessoa como um novo recurso, com base no número de irmãos, irmãs e pais, que eram características existentes.

Mas qual é o objetivo disso? Não entendo por que a criação de novos recursos correlatos é útil. Não é o trabalho do algoritmo fazer isso por conta própria?

Matthieu Veron
fonte
Relacionado: stats.stackexchange.com/questions/349155/…
Sycorax diz Restabelecer Monica

Respostas:

30

O exemplo mais simples usado para ilustrar isso é o problema do XOR (veja a imagem abaixo). Imagine que você é dado dados contendo de e coordenadas e a classe binário de prever. Você pode esperar que seu algoritmo de aprendizado de máquina descubra o limite de decisão correto por si só, mas se você gerou o recurso adicional , o problema se torna trivial, pois fornece um critério de decisão quase perfeito para a classificação e você usou apenas aritmética simples !y z = x y z > 0xyz=xyz>0

Problema XOR

Portanto, embora em muitos casos você possa esperar do algoritmo encontrar a solução, alternativamente, pela engenharia de recursos, você pode simplificar o problema. Problemas simples são mais fáceis e rápidos de resolver e precisam de algoritmos menos complicados. Algoritmos simples são geralmente mais robustos, os resultados são mais interpretáveis, são mais escaláveis ​​(menos recursos computacionais, tempo de treinamento etc.) e portáteis. Você pode encontrar mais exemplos e explicações na maravilhosa palestra de Vincent D. Warmerdam, apresentada na conferência da PyData em Londres .

Além disso, não acredite em tudo o que os profissionais de marketing de aprendizado de máquina lhe dizem. Na maioria dos casos, os algoritmos não "aprendem por si mesmos". Você geralmente tem tempo, recursos, poder computacional e os dados geralmente têm tamanho limitado e são barulhentos, nada disso ajuda.

Levando isso ao extremo, você pode fornecer seus dados como fotos de anotações manuscritas do resultado do experimento e passá-los para uma rede neural complicada. Primeiro aprenderia a reconhecer os dados nas imagens, depois aprenderia a entendê-los e faria previsões. Para fazer isso, você precisaria de um computador poderoso e de muito tempo para treinar e ajustar o modelo, além de precisar de grandes quantidades de dados devido ao uso de uma rede neural complicada. O fornecimento de dados em formato legível por computador (como tabelas de números) simplifica tremendamente o problema, pois você não precisa de todo o reconhecimento de caracteres. Você pode pensar na engenharia de recursos como um próximo passo, onde você transforma os dados de maneira a criar significantesrecursos, para que seu algoritmo tenha menos ainda que descobrir sozinho. Para fazer uma analogia, é como se você quisesse ler um livro em idioma estrangeiro, para que você precisasse aprender o idioma primeiro, em vez de lê-lo traduzido no idioma que você entende.

No exemplo de dados do Titanic, seu algoritmo precisaria descobrir que somar membros da família faz sentido para obter o recurso "tamanho da família" (sim, estou personalizando aqui). Esse é um recurso óbvio para um ser humano, mas não é óbvio se você vir os dados apenas como algumas colunas dos números. Se você não souber quais colunas são significativas quando consideradas em conjunto com outras colunas, o algoritmo pode descobrir isso tentando cada combinação possível dessas colunas. Claro, temos maneiras inteligentes de fazer isso, mas ainda assim, é muito mais fácil se as informações forem fornecidas ao algoritmo imediatamente.

Tim
fonte
Obrigado, é muito bem explicado e muito interessante!
Matthieu Veron
Acho sua resposta muito boa, mas acho que é melhor qualificá-la um pouco. Especificamente, acho que a engenharia de recursos em termos de termos de interação não simplifica muito os algoritmos, como RFs (embora ainda possa ajudar), uma vez que os RFs capturam os termos de interação até certo ponto por si mesmos. Deixe-me saber se estou faltando algo importante. Mas sim, em geral, a engenharia de recursos simplifica e ajuda bastante as coisas.
Poete Maudit 13/06
@PoeteMaudit, é verdade que a árvore de decisão (e assim a RF) modela uma grande interação, mas é um certo tipo de interação, e não toda interação possível. Além disso, a engenharia de recursos não se refere apenas a interações.
Tim
Certamente eu concordo com seus pontos. Primeiro, os RFs modelam um certo tipo de interação (você quer dizer principalmente x * y?). Em segundo lugar, essa engenharia de recursos certamente não é apenas sobre interações.
Poete Maudit 13/06
14

Bem, se você planeja usar um classificador linear simples, faz todo o sentido gerar novos recursos que sejam uma função não linear dos existentes, especialmente se o conhecimento do seu domínio indicar que o recurso resultante será significativo e informativo. Observe que um classificador linear não pode considerar esses recursos complexos, a menos que você os forneça explicitamente.

Idealmente, se você usar um algoritmo de classificação não linear suficientemente poderoso, deverá poder criar um limite de decisão que considere transformações não lineares arbitrárias dos recursos de entrada, se forem informativos para classificação. No entanto, na prática, a maioria dos classificadores não lineares apenas olha para algum tipo de transformação. Por exemplo, um SVM de polinômio kernel considerará interações polinomiais entre recursos, mas talvez um recurso mais informativo possa ser criado aplicando outros tipos de transformações ...

Em resumo, se o conhecimento do domínio indicar que uma combinação não linear de recursos artesanal pode ser informativa, faz sentido adicionar isso ao conjunto de recursos existente.

Daniel López
fonte
Ok, eu entendo ! Mas como posso saber se meus recursos que criei são significativos e informativos? Quero dizer, os problemas podem ter explicações contra-intuitivas. Pelo que entendi, a criação de recursos é uma maneira de direcionar o algoritmo em uma direção, para economizar tempo em suas previsões. Então, de algumas maneiras, estamos influenciando o algoritmo. Como verificar se influenciamos corretamente?
Matthieu Veron
2
Bem, é aí que entra o conhecimento do domínio. Por exemplo, se você estiver projetando um sistema de diagnóstico médico, poderá conversar com os médicos e perguntar quais informações eles usam para diagnosticar um paciente. Por exemplo, se um médico disser "Se o paciente está com febre e dor de cabeça, é provável que tenha gripe". Essa frase pode indicar que incluir um novo recurso de sinalizador que indique a presença de febre e dores de cabeça pode ser uma boa ideia (especialmente se você usar um classificador linear, que não pode "ver" os recursos de interação polinomial por si só).
Daniel López
11
No entanto, isso é mais uma arte do que uma ciência. No final, você precisa validar a eficácia de suas características artesanais, testando seus modelos em um conjunto de teste com um protocolo experimental imparcial ...
Daniel López
3

É verdade que alguns dos modelos de aprendizado de máquina têm a capacidade de lidar com a não linearidade e a interação entre variáveis; no entanto, depende da situação, vejo três razões pelas quais isso se torna necessário.

  1. Alguns modelos, como a regressão linear, não lidam com a não linearidade automaticamente; nesse caso, você precisa criar recursos extras para ajudar. Por exemplo abaixo: se você tiver o seguinte conjunto de dados, todo o da variável de destino se agrupará no centro de uma área semelhante a um círculo.Y=1

Limite do círculo

Se você receber apenas dois recursos, e . Um modelo linear simples de não encontrará nenhuma maneira de classificar a variável de destino. Portanto, você precisa de novos recursos quárticos para capturar a não linearidade: .x 2 y = x 0 + c 1 x 1 + c 2 x 2 y = x 0 + c 1 x 2 1 + c 2 x 2 2x1x2y=x0+c1x1+c2x2y=x0+c1x12+c2x22

  1. Se você sabe com antecedência que alguns recursos (do conhecimento ou da experiência comercial), isso pode ajudar a criá-los para acelerar o tempo de execução do modelo e facilitar o seu modelo. Por exemplo, no seu exemplo dos dados do Titanic e se você estiver usando um modelo de classificação em árvore de decisão. Se você sabe que as velhinhas (idade e sexo) têm mais probabilidade de sobreviver, criando um único recurso que captura as informações, sua árvore pode fazer uma divisão na nova variável em vez de fazer duas nas duas variáveis. Pode acelerar o tempo de computação se você souber com antecedência que o recurso é significativo.

  2. No mundo real, você não receberá um único conjunto de dados como o Kaggle fornece. Em vez disso, você obtém informações de todo o lugar. Por exemplo, se você deseja prever o desgaste de clientes de uma empresa de varejo on-line como a Amazon, possui informações demográficas, informações de transação de compra. Você precisa gerar muitos recursos de fontes diferentes; nesse caso, você encontrará muitos recursos úteis que podem ser obtidos / agregados no nível da transação. Como Andrew Ng coloca: Muitas vezes, a capacidade de fazer engenharia de recursos define o sucesso ou o fracasso de um projeto de aprendizado de máquina.

Anthony Lei
fonte