Se você iniciou recentemente sua jornada no aprendizado de máquina, pode ficar confuso entre LabelEncoder e OneHotEncoder . Ambos os codificadores fazem parte da biblioteca SciKit Learn em Python e são usados para converter dados categóricos ou textuais em números que nossos modelos preditivos entendem melhor. Vamos descobrir as diferenças entre os codificadores em um exemplo simples.
Codificação de caracteres
Primeiro, a documentação do SciKit Learn para LabelEncoder pode ser encontrada aqui . Agora considere os seguintes dados:
Dados do SuperDataScienceNeste exemplo, a primeira coluna (país) é totalmente texto. Como você já deve saber, não podemos usar texto nos dados para treinar o modelo. Portanto, antes que possamos iniciar o processo, precisamos preparar esses dados.
E para converter essas categorias em modelos compreensíveis de dados numéricos, usamos a classe LabelEncoder . Assim, tudo o que precisamos fazer para obter o atributo para a primeira coluna é importar a classe da biblioteca sklearn , processar a coluna com a função fit_transform e substituir os dados de texto existentes pelo novo codificado. Vamos ver o código.
from sklearn.preprocessing import LabelEncoder labelencoder = LabelEncoder() x[:, 0] = labelencoder.fit_transform(x[:, 0])
Supõe-se que os dados estejam na variável x . Depois de executar o código acima, se você verificar o valor x , verá que os três países na primeira coluna foram substituídos pelos números 0, 1 e 2.
Em geral, essa é a codificação dos sinais. Mas, dependendo dos dados, essa conversão cria um novo problema. Convertemos um conjunto de países em um conjunto de números. Mas esses são apenas dados categóricos e, de fato, não há conexão entre os números.
O problema aqui é que, como existem números diferentes na mesma coluna, o modelo pensará incorretamente que os dados estão em alguma ordem especial - 0 <1 <2 Embora isso, é claro, não seja assim. Para resolver o problema, usamos o OneHotEncoder .
OneHotEncoder
Se você estiver interessado em ler a documentação, pode encontrá-la aqui . Agora, como já discutimos, dependendo dos dados que temos, podemos encontrar uma situação em que, após codificar os atributos, nosso modelo fica confuso, assumindo falsamente que os dados estão conectados por uma ordem ou hierarquia que não está realmente lá. Para evitar isso, usaremos o OneHotEncoder .
Esse codificador pega uma coluna com dados categóricos que foram codificados anteriormente em uma característica e cria várias novas colunas para ela. Os números são substituídos por uns e zeros, dependendo da coluna de qual valor é inerente. No nosso exemplo, temos três novas colunas, uma para cada país - França, Alemanha e Espanha.
Para linhas cuja primeira coluna é França, a coluna "França" será definida como "1" e as outras duas colunas como "0". Da mesma forma, para linhas cuja primeira coluna é Alemanha, a coluna Alemanha terá "1" e as outras duas colunas terão "0".
Isso é feito de maneira muito simples:
from sklearn.preprocessing import OneHotEncoder onehotencoder = OneHotEncoder(categorical_features = [0]) x = onehotencoder.fit_transform(x).toarray()
No construtor, indicamos qual coluna deve ser processada pelo OneHotEncoder , no nosso caso - [0] . Em seguida, transforme a matriz x usando a função fit_transform do objeto codificador que você acabou de criar. É isso, agora temos três novas colunas no conjunto de dados:
Como você pode ver, em vez de uma coluna com um país, temos três novas codificando esse país.
Essa é a diferença de LabelEncoder e OneHotEncoder .