As árvores de maçã produzem uma mistura de ótimas frutas de frutas e vermes. No entanto, as maçãs em supermercados sofisticados exibem 100% de frutas perfeitas. Entre pomar e mercearia, alguém passa um tempo significativo removendo as maçãs ruins ou jogando uma pequena cera nas que podem ser recuperadas. Como engenheiro de ML, você passará muito tempo dedicando exemplos ruins e limpando aqueles que podem ser resgatados. Mesmo algumas maçãs" podem estragar um grande conjunto de dados.
Como escalonar valores de atributos
Escalonamento significa converter valores de recursos de ponto flutuante do seu intervalo natural (por exemplo, 100 para 900) em um intervalo padrão (por exemplo, de 0 para 1 ou -1 para +1). Se um conjunto de atributos consistir em apenas um atributo, o escalonamento fornece pouco ou nenhum benefício prático. No entanto, se um conjunto de recursos consistir em vários atributos, o escalonamento de atributos fornecerá 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 os pesos apropriados para cada atributo. Sem o escalonamento de atributos, o modelo prestará muita atenção aos atributos que têm um intervalo maior.
Não é necessário atribuir a mesma escala a todos os recursos de pontos flutuantes. Nada muito ruim vai acontecer se o Recurso A for dimensionado de -1 a +1, enquanto o Recurso B for escalonado de -3 para +3. No entanto, o modelo reagirá mal se o Recurso B for escalonado de 5000 para 100000.
Como lidar com outliers extremos
O gráfico a seguir representa um recurso chamado roomsPerPerson
do conjunto de dados de imóveis da Califórnia.
O valor de roomsPerPerson
foi calculado dividindo o número total de salas de uma área pela população dessa área. O gráfico mostra que a grande maioria das áreas na Califórnia tem um ou dois quartos por pessoa. Veja o eixo X.
Figura 4. Uma cauda lorny lonnnnnnng.
Como podemos minimizar a influência desses outliers extremos? Uma maneira é usar o registro de cada valor:
Figura 5. O escalonamento logarítmico ainda deixa uma cauda.
O escalonamento de registros faz um trabalho um pouco melhor, mas ainda há uma cauda significativa
de valores outliers. Vamos escolher outra abordagem. E se nós simplesmente "quot;cap"
ou "clip" o valor máximo de roomsPerPerson
em um valor arbitrário, digamos 4,0?
Figura 6. Valores de recursos de corte em 4.0
Cortar o valor do recurso em 4.0 não significa que ignoramos todos os valores maiores que 4.0. Em vez disso, isso significa que todos os valores maiores que 4,0 agora se tornam 4,0. Isso explica o engraçado morro em 4.0. Apesar dessa montanha, o conjunto de atributos em escala agora é mais útil que os dados originais.
Agrupamento por classes
O gráfico a seguir mostra a prevalência relativa de casas em diferentes latitudes na Califórnia. Observe o clustering. Los Angeles está na latitude 34, e São Francisco está na latitude 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 atributo de ponto flutuante no nosso modelo.
Isso porque não há relação linear entre a latitude e os valores das casas. Por exemplo, as casas na latitude 35 não \(\frac{35}{34}\) são mais (ou menos) caras que as casas na latitude 34. Ainda assim, as latitudes individuais
provavelmente são um preditor muito bom de valores internos.
Para tornar a latitude um preditor útil, vamos dividir as latitudes em "bins" conforme sugerido pela figura a seguir:
Figura 8. Valores de agrupamento.
Em vez de ter um atributo de ponto flutuante, agora temos 11 atributos booleanos
diferentes (LatitudeBin1
, LatitudeBin2
, ..., LatitudeBin11
).
Ter 11 atributos separados é um pouco insignificante, então vamos unificá-los
em um único vetor de 11 elementos. Ao fazer isso, será possível representar a latitude 37.4 da seguinte forma:
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
Graças à vinculação, nosso modelo pode aprender pesos completamente diferentes para cada latitude.
Refinamento
Até agora, presumimos que todos os dados usados para treinamento e teste fossem confiáveis. Na vida real, muitos exemplos em conjuntos de dados não são confiáveis devido a um ou mais dos seguintes motivos:
- Valores omitidos. Por exemplo, uma pessoa se esqueceu de inserir um valor para a idade da casa.
- Exemplos duplicados. Por exemplo, um servidor fez upload dos mesmos registros duas vezes por engano.
- Ruim. Por exemplo, uma pessoa rotulou incorretamente uma foto de uma árvore de carvalho como um bordo.
- Valores de recurso inválidos. Por exemplo, alguém digitou um dígito extra ou um termômetro escondido no sol.
Após a detecção, você normalmente os "corrigir" maus exemplos os remove do conjunto de dados. Para detectar valores omitidos ou exemplos duplicados, escreva um programa simples. Detectar valores de recursos ou rótulos inadequados pode ser muito mais difícil.
Além de detectar exemplos individuais ruins, você também precisa detectar dados inválidos na agregação. Os histogramas são um ótimo mecanismo para visualizar seus dados de maneira agregada. Além disso, coletar 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 a correspondência entre o número de exemplos com country:uk
e o número
esperado. O language:jp
precisa ser a linguagem mais comum no
conjunto de dados?
Conheça seus dados
Siga estas regras:
- Lembre-se de como você acha que seus dados devem ser.
- Verifique se os dados atendem a essas expectativas ou se você pode explicar por que eles não atendem a essas expectativas.
- Verifique se os dados de treinamento estão de acordo com outras fontes (por exemplo, painéis).
Trate seus dados com todos os cuidados que você faria com qualquer código essencial. Um bom ML depende de bons dados.
Mais informações
Regras de machine learning, Fase 2 de ML: engenharia de atributos