1
resposta

Dúvida/ Erro com FIT no LinearSVC

Boa tarde pessoal, tudo bem?

Estou fazendo o Challenge de DS daqui da Alura e estou tentando colocar em prática o que estou aprendendo nesse curso, mas cheguei num ponto que não sei se comi bola em algum ponto ou a "função" .fit() não é para usar como estou tentando. Abaixo a imagem da variável x: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Quando faço tudo exatamente como ensinado nesta aula, e chego nessa parte do código:

from sklearn.svm import LinearSVC
modelo = LinearSVC()
modelo.fit(treino_x, treino_y)

Aparece o seguinte erro:

ValueError: could not convert string to float: '0002-ORFBO'

Pesquisando nos fóruns e biblioteca, falam muito sobre o uso de virgula nessa conversão de strings, mas não falam de traço. Quando tiro a coluna 'customerID' onde se encontra esse '0002-ORFBO', ele dá o mesmo erro mas mostra o primeiro registro da coluna 'Genero', e assim por diante.

Pensando que no curso o Guilherme utiliza um exemplo com 0 e 1, pensei que utilizando o .fit() nessa circunstância ele aceitaria apenas 0 e 1. Sendo assim, retirei todas as colunas que tenham letras, e números que não sejam 0 e 1 como registro. Fazendo isso, e rodando o código recebemo o seguinte Warning:

DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().

Vi um post neste fórum que o rapaz faz uma pergunta sobre esse 'ravel()', mas de longe o resultado que meu código apresenta é igual ao do Guilherme na aula, ai minha dúvida é a seguinte:

O .fit() deve ser usado apenas com 0 e 1? --> Se sim, blz, vou arrumar a minha base para que ela tenha 0 e 1 de vez 'Yes' ou 'No' por exemplo; --> Se não, onde pode estar o meu erro?

Desde já muito obrigado pela atenção, Abraço a todos

1 resposta

Olá, Marcelo! Tudo bem com você?

O primeiro erro que você obteve "ValueError: could not convert string to float: '0002-ORFBO'" se deve porque você tentou ajustar o modelo com o método .fit() em um conjunto de dados que contém variáveis categóricas. Na semana 03 do challenger nós resolvemos esse problema por meio de um processo denominado OneHotEncoder que consiste em converter cada categoria em uma variável fictícia binária. Nessa aula "Classificação de variáveis categóricas" o instrutor explica como é esse processo.

A segunda mensagem encontrada por você: "DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel()." não é um erro mas sim um aviso (Warning) e aconteceu porque ao invés de você passar uma series do pandas para o train_test_split você está passando um DataFrame. Mas aí você pode se perguntar onde que foi feito isso.

Ao realizar o comando dados[['Churn']] você obtém um DataFrame, para eliminar esse DataConversionWarning basta passar da seguinte forma dados['Churn'], que aí você estará obtendo uma Series.

Como leitura complementar deixo esse artigo "Como melhor tratar variáveis categóricas para modelos de machine learning — Parte 1" como sugestão

Espero ter ajudado, mas se ainda persistir alguma dúvida estou sempre à disposição.

:)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!