Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] sparse ou toarray()

Olá!

Na aula em que iniciamos o treinamento do algoritmo, há as seguintes linhas de código:

from sklearn.preprocessing import OneHotEncoder

colunas_categoricas = ['Migração', 'Sexo','Estrangeiro', 'Necessidades educacionais especiais', 'Devedor',
                     'Taxas de matrícula em dia', 'Bolsista', 'Período','Estado civil', 'Curso', 'Qualificação prévia']

df_categorico = df[colunas_categoricas]

encoder = OneHotEncoder(drop='if_binary')

df_encoded = pd.DataFrame(encoder.fit_transform(df_categorico).toarray(),
                          columns=encoder.get_feature_names_out(colunas_categoricas))

df_final = pd.concat([df.drop(colunas_categoricas, axis=1), df_encoded], axis=1)

No entanto, gostaria de saber o motivo de usar o "toarray()". Imagino que seja para transformar a matriz de esparsa para densa. Todavia, por quê não usar o parâmetro do OneHotEncoder como sparse = False? O resultado não seria o mesmo?

Desde já, obrigado

1 resposta
solução!

Olá, tudo bem??

Podemos fazer o processo das duas formas! O método toarray() é utilizado no código acima para converter a saída do objeto OneHotEncoder em uma matriz NumPy, o que é necessário para poder criar um DataFrame do pandas com os dados codificados. Isso seria necessário, pois quando você aplica o fit_transform() do OneHotEncoder ao conjunto de dados df_categorico, ele retorna uma matriz esparsa, que é uma estrutura de dados otimizada para armazenar matrizes grandes que têm uma grande quantidade de valores zero. Essa matriz esparsa é eficiente em termos de memória, mas pode não ser diretamente utilizável em todas as operações do pandas.

Se você não quiser utilizar o toarray() , pode adicionar o parâmetro sparse_output=False ao instanciar o OneHotEncoder.

Em resumo, ambas as abordagens são válidas e funcionam bem! Se tiver mais dúvidas ou questões, estou à disposição para ajudar.

Bons estudos!