Representação: limpeza de dados

As macieiras produzem uma mistura de frutas excelentes e messacas. No entanto, as maçãs em supermercados sofisticados exibem frutas 100% perfeitas. Entre o pomar e a mercearia, alguém passa um tempo significativo removendo as maçãs ruins ou jogando um pouco de cera nas que podem ser recuperadas. Como engenheiro de ML, você gasta muito tempo descartando exemplos ruins e limpando os recuperáveis. Mesmo algumas "maçãs ruins" podem estragar um grande conjunto de dados.

Como escalonar valores de atributos

Dimensionamento significa converter valores de atributos de ponto flutuante do intervalo natural (por exemplo, 100 a 900) em um intervalo padrão (por exemplo, 0 a 1 ou -1 a +1). Se um conjunto de recursos consistir em apenas um recurso, o escalonamento oferece pouco ou nenhum benefício prático. No entanto, se um conjunto de recursos consistir em vários recursos, o escalonamento de atributos oferecerá os seguintes benefícios:

  • Ajuda o gradiente descendente a convergir mais rapidamente.
  • Ajuda a evitar a "armadilha de NaN", em que um número no modelo se torna um NaN (por exemplo, quando um valor excede o limite de precisão de ponto flutuante durante o treinamento) e, devido a operações matemáticas, todos os outros números no modelo também se tornam um NaN.
  • Ajuda o modelo a aprender pesos apropriados para cada atributo. Sem o dimensionamento de atributos, o modelo prestará muita atenção aos recursos que têm um intervalo mais amplo.

Não é necessário dar a cada recurso de ponto flutuante exatamente a mesma escala. Nada terrível vai acontecer se o recurso A for dimensionado de -1 para +1 enquanto o recurso B for dimensionado de -3 para +3. No entanto, o modelo reagirá mal se o recurso B for dimensionado de 5.000 a 100.000.

Como lidar com outliers extremos

O gráfico a seguir representa um recurso chamado roomsPerPerson do conjunto de dados da California Housing. O valor de roomsPerPerson foi calculado dividindo o número total de quartos de uma área pela população dessa área. O enredo mostra que a vasta maioria das áreas da Califórnia tem um ou dois quartos por pessoa. Mas vejamos ao longo do eixo x.

Um gráfico de roomPerPerson em que quase todos os valores estão agrupados entre 0 e 4, mas há uma grande linha que atinge 55 quartos por pessoa

Figura 4. Muito bem!

Como poderíamos minimizar a influência dessas outliers extremos? Bem, uma maneira seria pegar o registro de cada valor:

Um gráfico de log(roomsPerPerson) em que 99% dos valores se agrupam entre cerca de 0,4 e 1,8, mas ainda há uma cauda longa que sobe aproximadamente 4,2.

Figura 5. O escalonamento logarítmico ainda deixa uma linha.

O escalonamento de registros faz um trabalho um pouco melhor, mas ainda há uma cauda significativa de valores atípicos. Vamos escolher outra abordagem. E se simplesmente "limitarmos" ou "recortarmos" o valor máximo de roomsPerPerson como um valor arbitrário, como 4,0?

Um gráfico de quartosPor pessoa em que todos os valores estão entre -0,3 e 4,0. O gráfico tem formato de sino, mas há um morro anômalo a 4,0

Figura 6. valores do recurso de recorte em 4.0

Cortar o valor do recurso em 4,0 não significa que todos os valores maiores que 4,0 serão ignorados. Na verdade, isso significa que todos os valores maiores que 4,0 agora se tornam 4,0. Isso explica o monte 4.0. Apesar desse acúmulo, o conjunto de atributos dimensionados agora é mais útil do que os dados originais.

Agrupamento por classes

O gráfico a seguir mostra a prevalência relativa de casas em diferentes latitudes da Califórnia. Observe o clustering: Los Angeles está na latitude 34 e São Francisco está aproximadamente na latitude 38.

Um lote de casas por latitude. O gráfico é altamente irregular, com pontos cilíndricos por volta da latitude 36 e grandes picos nas latitudes 34 e 38.

Figura 7. casas por latitude.

No conjunto de dados, latitude é um valor de ponto flutuante. No entanto, não faz sentido representar latitude como um recurso de ponto flutuante no nosso modelo. Isso ocorre porque não existe relação linear entre a latitude e os valores de habitação. Por exemplo, as casas na latitude 35 não são \(\frac{35}{34}\) mais caras (ou menos caras) que as casas na latitude 34. Ainda assim, as latitudes individuais são provavelmente um bom preditor de valores de casas.

Para tornar a latitude um preditor útil, vamos dividi-las em "caixas", conforme sugerido pela figura a seguir:

Um lote de casas por latitude. O gráfico é dividido em

Figura 8. Agrupamento de valores.

Em vez de ter um atributo de ponto flutuante, agora temos 11 atributos booleanos diferentes (LatitudeBin1, LatitudeBin2, ..., LatitudeBin11). Ter 11 atributos separados é um pouco desigual, então vamos reuni-los em um único vetor de 11 elementos. Isso nos permitirá representar a latitude 37.4 da seguinte maneira:

[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]

Graças ao agrupamento por classes, nosso modelo agora pode aprender pesos completamente diferentes para cada latitude.

Refinamento

Até agora, supomos que todos os dados usados para treinamento e teste eram confiáveis. Na vida real, muitos exemplos nos conjuntos de dados não são confiáveis devido a um ou mais dos itens a seguir:

  • Valores omitidos. Por exemplo, uma pessoa se esqueceu de inserir um valor para a idade de uma casa.
  • Exemplos duplicados. Por exemplo, um servidor fez upload dos mesmos registros duas vezes por engano.
  • Rótulos inválidos. Por exemplo, uma pessoa marcou incorretamente a imagem de um carvalho como um bordo.
  • Valores de atributos incorretos. Por exemplo, alguém digitou um dígito a mais ou um termômetro foi deixado de fora.

Depois de detectados, você geralmente "corrige" exemplos ruins removendo-os do conjunto de dados. Para detectar valores omitidos ou exemplos duplicados, escreva um programa simples. Detectar valores de atributos ou rótulos incorretos pode ser muito mais complicado.

Além de detectar exemplos individuais ruins, você também precisa detectar dados incorretos no conjunto. Os histogramas são um ótimo mecanismo para visualizar seus dados agregados. Além disso, receber estatísticas como as seguintes pode ajudar:

  • Máximo e mínimo
  • Média e mediana
  • Desvio padrão

Considere gerar listas dos valores mais comuns para atributos discretos. Por exemplo, faça o número de exemplos com country:uk corresponder ao número esperado. language:jp deve ser realmente a linguagem mais comum no seu conjunto de dados?

Conheça seus dados

Siga estas regras:

  • Tenha em mente como você acha que seus dados devem ser.
  • Verifique se os dados atendem a essas expectativas (ou se você pode explicar por que não).
  • Verifique se os dados de treinamento estão de acordo com outras fontes (por exemplo, painéis).

Trate seus dados com o cuidado que você trataria de qualquer código essencial. Um bom ML depende de bons dados.

Mais informações

Rules of Machine Learning, ML Phase II: Feature Engineering