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?
machine-learning
feature-engineering
Matthieu Veron
fonte
fonte
Respostas:
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 > 0x y z= x y z> 0
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.
fonte
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.
fonte
É 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.
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 2x1 x2 y=x0+c1x1+c2x2 y=x0+c1x21+c2x22
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.
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.
fonte