Construção e normalização de recursos no aprendizado de máquina

13

Digamos que eu queira criar um Classificador Logístico para um filme M. Meus recursos seriam algo como idade da pessoa, gênero, ocupação, local. Portanto, o conjunto de treinamento seria algo como:

  • Idade Sexo Ocupação Localização Gosto (1) / Não gosto (0)
  • 23 M Software EUA 1
  • 24 M Médico Reino Unido 0

e assim por diante ... Agora, minha pergunta é como devo dimensionar e representar meus recursos. Uma maneira que pensei: Divida a idade como faixas etárias, então 18-25, 25-35, 35 anos acima, Sexo como M, F, Localização como EUA, Reino Unido, Outros. Agora crie um recurso binário para todos esses valores; portanto, a idade terá três recursos binários, cada um correspondente a um grupo etário e assim por diante. Portanto, um homem de 28 anos dos EUA seria representado como 010 10100 (010-> Faixa etária 25-35, 10 -> Masculino, 100 -> EUA)

Qual poderia ser a melhor maneira de representar recursos aqui? Além disso, notei em alguns exemplos: do sklearn que todos os recursos foram dimensionados / normalizados de alguma forma, por exemplo, o gênero é representado por dois valores, 0,0045 e -0,0045, para masculino e feminino. Eu não tenho idéia de como fazer escala / mormalização como esta?

leopardo da neve
fonte
Não está claro para mim por que você deseja dimensionar seus recursos? Geralmente, os recursos são normalizados para ter 0 unidade média std dev. Pode ser necessário definir o problema em termos das classes que você está tentando classificar; a regressão logística é útil para a classificação binária.
BGreene
Você certamente não deseja categorizar as idades. Como é medida a "classificação do filme"? É uma escala de 1 a 10, um "gostar / não gostar" ou o quê?
Peter Flom - Restabelece Monica
Para simplificar, vamos supor que haja apenas duas classes, Gosto e Não gosto. Como ser 1 e Não gostar de ser 0. Alterou a declaração do problema para refletir isso.
snow_leopard

Respostas:

15

Caso binário

Se você quer que seus recursos para ser binário, as boas representações para categórica (resp. Reais valores) são a uma quente (resp. Termômetro ) que codifica. Você não precisa normalizá-los.

Para a única codificação quente de um recurso categórico , você simplesmente reserva um bit para cada classe. O comprimento dessa codificação é, portanto, o número de classes do seu recurso. Vamos dar o seu exemplo de país,

  • 00001 para EUA
  • 00010 para o Reino Unido
  • 00100 para a Ásia
  • 01000 para a Europa
  • 10000 para outros

Para a codificação termométrica de um recurso real / inteiro , é necessário escolher um comprimento e os limites. Para o seu exemplo de idade, você optou por dividir a idade de acordo com os limites 18,25 e 35. A codificação será

  • 000 para 0-17
  • 001 para 18-25
  • 011 para 25-34
  • 111 para 35 acima

Juntando as duas, você obtém aqui uma codificação de tamanho 5 + 3 = 8 bits. Para um residente de 30 anos no Reino Unido, temos

00010UK01130yo

Caso contínuo

00010UK3030yo

Como BGreene disse, você deve normalizar esse valor para manter uma média de 0 e um desvio padrão de 1, o que garante a estabilidade de muitos modelos de regressão. Para fazer isso, basta subtrair a média empírica e dividir pelo desvio padrão empírico.

Y_normalized = ( Y - mean(Y) ) / std(Y)

Se a média de todas as idades de todas as pessoas em sua base de dados for 25 e seu desvio padrão for 10, o valor normalizado para 30 anos. a pessoa será , levando à representação (3025)/10=0.5

00010UK0.530yo
Emile
fonte
Legal ... então vamos dizer que temos uma pessoa de exemplo da seguinte forma: País: Reino Unido, Grupo de Idade: 25-34. Isso levará a valores como Country: 2 , Agegroup: 4 se usarmos uma codificação quente . Agora, ao criar um vetor de recurso, devemos normalizá-los. Então, digamos que eles venham como 0,4 e 0,6, então nosso vetor de recurso de entrada para modelar se torna essencialmente [0,4, 0,6], correto?
22412 snow_leopard
hmm.. if I use "one hot" encoding should I convert the encoding value to its Integer representation as a feature, e.g. 0010 becomes 2. OR should I treat this as a set of 4 features out of which only one will be ON ? In the former case does not it introduce a notion that 1000 is further to 0001 then 0100 which might not be the intention as we don't want US feature value to be closer to UK feature value then Asia value or something else ?
snow_leopard
I edited my answer to clarify these points. You don't need to normalize binary features, and you have to treat them as a vector, don't convert them into an integer.
Emile
Really helpful and crystal clear explanation. Thanks!
George Liu