Como definir os mesmos códigos categóricos para treinar e testar dados? Python-Pandas

Oct 13 2020

OBSERVAÇÃO: se outra pessoa está se perguntando sobre este tópico, entendo que você está se aprofundando no mundo da Análise de Dados, então fiz esta pergunta antes para aprender que:

Você codifica valores categóricos como INTEGERES apenas se estiver lidando com classes ordinais, ou seja, diploma universitário, pesquisas de satisfação do cliente como exemplo. Caso contrário, se você estiver lidando com classes nominais como gênero, cores ou nomes, você DEVE convertê-los com outros métodos, uma vez que eles não especificam nenhuma ordem numérica, os mais conhecidos são One-hot Encoding ou variáveis ​​fictícias. Encorajo você a ler mais sobre eles e espero que isso tenha sido útil.

Verifique o link abaixo para ver uma boa explicação: https://www.youtube.com/watch?v=9yl6-HEY7_s

Esta pode ser uma pergunta simples, mas acho que pode ser útil para iniciantes.

Preciso executar um modelo de predição em um conjunto de dados de teste, portanto, para converter as variáveis ​​categóricas em códigos categóricos que podem ser manipulados pelo modelo de florestas aleatórias, uso estas linhas com todos eles:

Train:

data_['Col1_CAT'] = data_['Col1'].astype('category')
data_['Col1_CAT'] = data_['Col1_CAT'].cat.codes

Portanto, antes de executar o modelo, devo aplicar o mesmo procedimento aos dados de Trem e Teste.

E como ambos os conjuntos de dados têm as mesmas variáveis ​​/ colunas categóricas, acho que será útil aplicar os mesmos códigos categóricos a cada coluna, respectivamente.

No entanto, embora esteja lidando com as mesmas variáveis ​​em cada conjunto de dados, obtenho códigos diferentes sempre que uso essas duas linhas.

Então, minha pergunta é, como posso fazer para obter os mesmos códigos sempre que converter os mesmos categóricos em cada conjunto de dados?

Obrigado por seus insights e comentários.

Respostas

1 BeamsAdept Oct 13 2020 at 14:59

Primeiro, observe que a Random Forests pode lidar com variáveis ​​categóricas (além disso, se você tiver muitas categorias, reduzir esse número é uma boa prática). Se você deseja aplicar um filtro aos seus dados, sugiro que use sklearntransformadores (como OneHot Encoder, Label Encoding, ... escolha o que você precisa de acordo com o que deseja fazer).

Nesse caso, você deve ajustar o codificador em seu conjunto de dados de trem e, em seguida, aplicá-lo em seu teste. Se você quiser aplicar isso em um caso real, terá que salvar seus codificadores treinados junto com seu modelo treinado, para que possa aplicar o codificador diretamente aos novos dados antes de fazer previsões sobre eles, para que tenha o mesmo padrão.

Aqui está um exemplo com Label Encoder

from sklearn import preprocessing
train, test = ... # SEPARATE YOUR DATA AS YOU WANT
le = preprocessing.LabelEncoder()
trained_le = le.fit(train)
train = trained_le.transform(train)
test = trained_le.transform(test)