Como executar a engenharia de recursos em recursos desconhecidos?


19

Estou participando de uma competição de kaggle. O conjunto de dados possui cerca de 100 recursos e todos são desconhecidos (em termos do que realmente representam). Basicamente, são apenas números.

As pessoas estão realizando muita engenharia de recursos nesses recursos. Eu estou querendo saber como exatamente um é capaz de executar a engenharia de recursos em recursos que são desconhecidos? Alguém pode me ajudar a entender isso e algumas dicas sobre como executar a engenharia de recursos em recursos desconhecidos?

Respostas:


19

Você não precisa de conhecimento de domínio (o conhecimento do que seus dados significam ) para realizar a engenharia de recursos (encontrando maneiras mais expressivas de enquadrar seus dados).


Como Tu N. explicou , você pode encontrar combinações "rápidas e sujas" de recursos que podem ser úteis com bastante facilidade. Dada uma saída e uma característica individuais x , você pode tomar as seguintes transformações, x '{ e x , log ( x ) , x 2 , x 3 , tanh ( x ) } . Uma verificação rápida da utilidade da transformação é se a correlação entre { y , x } for maior que a correlação entreyxx{ex,log(x),x2,x3,tanh(x)}{y,x} .{y,x}

Aviso sobre correlação: a correlação não mostra tudo e, dependendo do modelo que você está usando (altamente não linear, como NN ou RF) e interação com outras variáveis, uma alteração na correlação pode não significar nada.

No entanto, se você estiver usando um modelo linear simples como regressão logística, é um bom indicador de desempenho. A melhor maneira de avaliar essa transformação, no entanto, conforme observado por Fokhruz Zaman , seria construir um modelo com e sem o recurso transformado e ver como evolui o erro de validação (nas dobras de validação cruzada).

É bastante fácil identificar transformações de recurso único dessa maneira. Eles se aplicam a muitos dados, onde uma relação mais expressiva entre sua entrada e saída pode estar em uma escala diferente. Por exemplo, a relação entre Renda e "Felicidade" parece ser logarítmica, mas você nunca registraria diretamente o registro de uma renda participante.


DD2

Pode ser difícil interpretar a representação interna de um NN, ou mesmo interpretar a importância do recurso em uma Floresta Aleatória. Um método mais fácil e provavelmente mais adequado para essa finalidade, seria o Boosting com árvores de decisão. Existem muitas bibliotecas implementando o Boosting, e se você estiver na competição do Kaggle como sua publicação parece sugerir, o XGBoost parece ser usado por muitos participantes, então você pode encontrar alguma ajuda / tutoriais sobre o que vou descrever.

Primeiro, execute seu algoritmo de aumento usando apenas tocos , árvores de decisão de um nível. Os tocos são muito fracos, mas o Boosting o torna um modelo razoável. Isso atuará como sua linha de base. Dependendo da biblioteca que você está usando, você deve poder exibir com facilidade quais são os recursos mais utilizados e plotá-los contra a resposta (ou fazer um histograma se a resposta for categórica) para identificar algum padrão. Isso pode lhe dar uma intuição sobre o que seria uma boa transformação de recurso único.

Em seguida, execute o algoritmo Boosting com árvores de decisão de dois níveis. Este modelo é muito mais complexo que o anterior; se duas variáveis ​​juntas tiverem mais poder do que as tomadas individualmente, esse modelo deverá superar a anterior (novamente, não em termos de erro de treinamento, mas de erro de validação!). Com base nisso, você deve conseguir extrair qual variável é frequentemente usada em conjunto e isso leva a possíveis transformações de vários recursos.


Em material relacionado, eu recomendaria os seguintes vídeos, pois são fáceis de seguir


4

Você pode usar diferentes combinações de recursos, como soma de recursos: feat_1 + feat_2 + feat_3... ou produto deles. Ou você pode transformar recursos por log, ou exponencial, sigmóide ... ou até discretizar o recurso numérico em um categórico. É um espaço infinito para explorar.

Qualquer combinação ou transformação que aumente seu desempenho de Validação Cruzada ou Conjunto de Testes, você deve usá-lo.


2
Eu levaria um pouco de problema com "Qualquer combinação ou transformação que aumente o desempenho da Validação Cruzada ou do Conjunto de Testes, você deve usá-lo". Tentar coisas cegamente até que algo melhore sua métrica de desempenho pode resultar na descoberta de um relacionamento que não faz sentido e causa super ajuste. Isso poderia realmente prejudicar o desempenho em novas observações no caminho.
Hersheezy

1

Você poderia explicar mais com exemplos específicos sobre sua declaração a seguir?

The dataset has around 100 features and all are unknown (in terms of what actually they represent). Basically they are just numbers.

Não tenho certeza de como você pode fazer a Engenharia de recursos sem entender bem o seu conjunto de dados e os atributos fornecidos!

Os dados tabulares são descritos em termos de observações ou instâncias (linhas) compostas de variáveis ​​ou atributos (colunas). Um atributo pode ser um recurso.

"A idéia de um recurso, separada de um atributo, faz mais sentido no contexto de um problema. Um recurso é um atributo útil ou significativo para o seu problema. É uma parte importante de uma observação para aprender sobre a estrutura de um problema. o problema que está sendo modelado.

Na visão computacional, uma imagem é uma observação, mas um recurso pode ser uma linha na imagem.

No processamento de linguagem natural, um documento ou um tweet pode ser uma observação e uma contagem de frase ou palavra pode ser um recurso.

No reconhecimento de fala, um enunciado pode ser uma observação, mas um recurso pode ser uma única palavra ou fonema. "

Visite o seguinte URL para mais:

Descubra a engenharia de recursos, como projetar recursos e como se tornar bom nisso


Os atributos no caso do OP foram anonimizados até o ponto em que o conhecimento do domínio não pode ser usado. Isso é bastante comum nas competições do Kaggle, mas ainda são possíveis formas limitadas de engenharia de recursos. Normalmente, novos recursos são criados em massa e testados, em vez de usar o conhecimento do assunto para orientar sua geração. Um exemplo: kaggle.com/c/bnp-paribas-cardif-claims-management/data
Neil Slater

como Neil disse, os recursos são anonimizados, é o que quero dizer com essa afirmação.
user2409011
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.