What is One Hot Encoding and How to Do It

If you’re into machine learning, then you’ll inevitably meet hear this thing called “One Hot Encoding”. No entanto, é uma daquelas coisas que são difíceis de entender como um principiante para a aprendizagem de máquinas, uma vez que você meio que precisa saber algumas coisas sobre a aprendizagem de máquinas para entendê-la. Para ajudar, pensei em tentar dar uma explicação inicial.

a primeira coisa que você faz quando você está fazendo qualquer tipo de programa de aprendizagem de máquina é geralmente pré-processamento. Com isso, quero dizer preparar dados para serem analisados pelo seu programa. Afinal, você não pode simplesmente jogar uma planilha ou algumas fotos em seu programa e esperar que ele saiba o que fazer. Ainda não estamos a esse nível de IA.Uma grande parte do pré-processamento é algo codificante. Isto significa representar cada pedaço de dados de uma forma que o computador pode entender, daí o nome codificar, que significa literalmente “converter para código”. Há muitas maneiras diferentes de codificar, como a codificação Label, ou como você poderia adivinhar, uma Codificação Hot. Codificação de etiquetas é intuitiva e fácil de entender, então vou explicar isso primeiro. Espero que a partir daí você seja capaz de entender completamente uma codificação quente.Vamos assumir que estamos a trabalhar com dados categóricos, como gatos e cães. Olhando para o nome da codificação de etiquetas, você pode ser capaz de adivinhar que ela codifica etiquetas, onde a etiqueta é apenas uma categoria (ou seja, gato ou cão), e codificar apenas significa dar-lhes um número para representar essa categoria (1 para gato e 2 para cão). Ao dar a cada categoria um número, o computador agora sabe como representá-los, uma vez que o computador sabe como trabalhar com números. E agora já acabamos de explicar a codificação de etiquetas. Mas há um problema que muitas vezes não funciona para dados categóricos.

o problema é que com codificação label, as Categorias agora têm relações ordenadas naturais. O computador faz isso porque está programado para tratar números mais altos como números mais elevados; ele irá naturalmente dar aos números mais elevados pesos mais elevados. Podemos ver o problema com isso em um exemplo:

  • Imagine se você tivesse 3 categorias de alimentos: maçãs, frango e brócolos. Usando codificação label, você atribuiria a cada um destes um número para categorizá-los: maçãs = 1, frango = 2, e brócolos = 3. Mas agora, se seu modelo precisa calcular internamente a média entre Categorias, ele pode fazer 1+3 = 4/2 = 2. Isto significa que de acordo com o seu modelo, a média de maçãs e frango juntos é brócolos.

obviamente que essa linha de pensamento pelo seu modelo vai levá-lo a obter correlações completamente erradas, então precisamos introduzir codificação one-hot.

ao invés de rotular as coisas como um número a partir de 1 e, em seguida, aumentando para cada categoria, iremos para mais de um estilo binário de categorização. Você poderia estar pensando que se você soubesse o que é um one-hot (ele se relaciona com código binário, mas não se preocupe com isso). Deixe-me fornecer uma diferença visualizada entre a etiqueta e a codificação one-hot. Veja se você pode trabalhar a diferença:

Qual é a diferença? As nossas categorias eram filas, mas agora são colunas. A nossa variável numérica, calorias, manteve-se, no entanto, a mesma. Um 1 em uma coluna particular dirá ao computador a categoria correta para os dados dessa linha. Em outras palavras, criamos uma coluna binária adicional para cada categoria.

não é imediatamente claro por que isso é melhor (além do problema que mencionei anteriormente), e isso é porque não há uma razão clara. Como muitas coisas no aprendizado de máquinas, não vamos usar isso em todas as situações; não é totalmente melhor do que codificação de etiquetas. Ele apenas corrige um problema que você vai encontrar com codificação label ao trabalhar com dados categóricos

uma codificação quente em código (obtê-lo? É um trocadilho)

é sempre útil ver como isso é feito em código, então vamos fazer um exemplo. Normalmente acredito firmemente que devemos fazer algo sem bibliotecas para aprendê-lo, mas apenas para este entediante pré-processamento que realmente não precisamos. As bibliotecas podem tornar isto tão simples. Vamos utilizar o numpy, sklearn, e pandas, como você vai encontrar-se usando os 3 bibliotecas em muitos de seus projetos

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
import numpy as np
import pandas as pd

Agora que temos as ferramentas, vamos começar. Trabalharemos com um conjunto de dados inventado. Introduza o conjunto de dados com os pandas .característica do read_ CSV:

dataset = pd.read_csv('made_up_thing.csv')

Esperemos que isso seja auto-explicativo. A seguir é um pouco mais complicado. A coisa sobre planilhas é que você pode ou não se importar com algumas das colunas. Por uma questão de simplicidade, digamos que nos importamos com tudo menos com a última coluna. Vamos usar o recurso dos pandas .iloc, que obtém os dados na(s) coluna (S) A que você o diz para:

X = dataset.iloc.values

.o iloc aceita , por isso, entrámos . O : é porque queremos todas as linhas nessas colunas, e: é assim que você faz isso. Nós adicionamos o .valores para, bem, obter os valores em que segmentos selecionamos. Em outras palavras, a primeira parte seleciona os valores, a segunda parte recebe os valores.

Now let’s do the actual encoding. Sklearn torna tudo incrivelmente fácil, mas há um senão. Deve ter reparado que importámos tanto o labelencoder como o codificador. O único codificador quente do Sklearn não sabe converter categorias em números, só sabe converter números em binários. Temos de usar o labelencoder primeiro.Primeiro, vamos montar um labelencoder tal como qualquer objecto normal.:

le = LabelEncoder()

a seguir temos de usar o sklearn .função fit_transform. Digamos que precisamos codificar apenas a primeira coluna. Nós faríamos:

X = le.fit_transform(X)

esta função é apenas uma combinação do .em forma .transformar comandos. .fit toma X (neste caso a primeira coluna de X por causa de nosso X) e converte tudo em dados numéricos. .transforme então aplica essa conversão.

tudo o que resta é usar o único codificador quente. Felizmente, é quase igual ao que acabámos de fazer.:

ohe = OneHotEncoder(categorical_features = )
X = ohe.fit_transform(X).toarray()

Categorical_feartures é um parâmetro que especifica que a coluna queremos um quente codificar, e desde que nós queremos codificar a primeira coluna, colocamos . Finalmente, nós fit_transform em binário, e transformá-lo em um array para que possamos trabalhar com ele facilmente indo para a frente.E é isso! É muito simples. Uma última nota, no entanto, se você precisa fazer mais do que apenas a primeira coluna, você faz o que nós acabamos de fazer, mas em vez de 0 você coloca a coluna que quiser. Para muitas colunas, você pode colocá-lo em um loop for:

le = LabelEncoder()#for 10 columns
for i in range(10):
X = le.fit_transform(X)

boa sorte em suas aventuras de aprendizado de máquina!