Codificando recursos categóricos em números para aprendizado de máquina

14

Muitos algoritmos de aprendizado de máquina, por exemplo, redes neurais, esperam lidar com números. Portanto, quando você tem dados categóricos, precisa convertê-los. Por categórico, quero dizer, por exemplo:

Marcas de automóveis: Audi, BMW, Chevrolet ... IDs de usuários: 1, 25, 26, 28 ...

Mesmo que os IDs de usuários sejam números, eles são apenas rótulos e não significam nada em termos de continuidade, como idade ou soma de dinheiro.

Portanto, a abordagem básica parece usar vetores binários para codificar categorias:

Audi: 1, 0, 0 ... BMW: 0, 1, 0 ... Chevrolet: 0, 0, 1 ...

Tudo bem quando existem poucas categorias, mas além disso parece um pouco ineficiente. Por exemplo, quando você tem 10.000 IDs de usuário para codificar, são 10.000 recursos.

A questão é: existe uma maneira melhor? Talvez um envolvendo probabilidades?

Nucular
fonte
3
Por que você deseja incluir um ID do usuário em um modelo preditivo? Quanto a outras variáveis ​​categóricas com cardinalidade maior do que você deseja ao usar a codificação de variáveis ​​fictícias conforme você descreve, primeiro as executo em uma árvore de decisão como o único preditor - a fim de reduzir os níveis. Também pode reorganizar agrupando níveis "raros" etc.
B_Miner
Isso parece interessante - como efeitos aleatórios em um modelo estatístico em que você está interessado em efeitos específicos para um indivíduo específico. Posso imaginar situações em que isso seria útil, por exemplo, se você vir os mesmos indivíduos repetidamente e desejar prever o que esse indivíduo em particular fará. Compartilhe mais sobre seus planos, se puder. Além disso, você pode observar a modelagem multinível, embora isso seja mais tradicionalmente usado em configurações inferenciais do que em aprendizado de máquina.
Anne Z.
Lembro-me de ler sobre um concurso de ML, onde alguns pesquisadores inteligentes detectaram que os IDs de usuário nos dados foram fornecidos no momento da criação da conta do usuário. Portanto, os carimbos de hora, que foram ofuscados, foram revelados (influenciando positivamente a previsão de resposta). Além desses casos e daqueles mencionados por Anne (sistemas de recomendação), eu não incluiria o ID do usuário.
Steffen
Anne - Um modelo de efeitos aleatórios não está realmente interessado nos indivíduos - portanto, eles são considerados uma amostra de uma população?
B_Miner 28/01
Eu não entendo, se o problema de aprendizagem é prever a categoria binária rico / não rico, por que não faria sentido ter um recurso para a marca de carro de um usuário em particular? Os IDs de usuário podem ser usados ​​se a rede social do indivíduo for conhecida: por exemplo, para demonstrar que os amigos do usuário X são mais propensos a serem ricos. Há algo de errado com essa linha de pensamento?
Vladtn 28/03

Respostas:

6

Você sempre pode tratar seus IDs de usuário como um conjunto de palavras: a maioria dos classificadores de texto pode lidar com centenas de milhares de dimensões quando os dados são escassos (muitos zeros que você não precisa armazenar explicitamente na memória, por exemplo, se você usar Linhas Escarpas Compactas representação para sua matriz de dados).

No entanto, a pergunta é: faz sentido algum problema específico tratar os IDs de usuários como recursos? Não faria mais sentido desnormalizar os dados de sua relação e usar os recursos do usuário (idade, localização, caracteres de apelido on-line, histórico de transações ...) em vez de seus IDs?

Você também pode executar o cluster de seus vetores de usuário brutos e usar os N principais IDs de centros mais próximos como recursos ativados, em vez dos IDs de usuário.

ogrisel
fonte
OK, embora essa seja uma pergunta mais geral, vejo a maioria de vocês concentrada na questão dos IDs de usuário, então aqui está o porquê de eu querer usá-los. Vejamos uma das competições da Kaggle, sobre a Grockit: kaggle.com/c/WhatDoYouKnow . O objetivo é prever se um usuário responderá a uma pergunta corretamente. É um problema semelhante na minha opinião aos sistemas de recomendação, você apenas recebe perguntas em vez de filmes e corrige / incorreta em vez de classificações, além de outros dados. Os carimbos de data e hora estão disponíveis :) #
11601
1
Nesse caso, você pode assumir que o usuário é independente e pode criar um classificador por usuário treinado apenas em seu próprio histórico.
ogrisel
1

A codificação equilateral é provavelmente o que você procura ao tentar codificar classes em uma rede neural. Ele tende a funcionar melhor que a codificação "1 de n" mencionada em outras postagens. Para referência, posso sugerir: http://www.heatonresearch.com/wiki/Equilateral

Espinho
fonte
Isso parece estar relacionado à codificação dos valores de saída, e não à codificação por categoria dos valores de entrada, que é o que o OP está solicitando.
Alex