3
respostas

Invalid object type at position 0

Estou com esse erro no comando

sns.lineplot(x = "max_depth", y = "train", data = resultados)

3 respostas

Olá, Felipe! Tudo bem com você?

Somente com esse trecho de código não foi possível identificar o que pode estar causando o erro encontrado por você, visto que o seu comando está igual ao do instrutor.

import seaborn as sns

sns.lineplot(x = "max_depth", y = "train", data = resultados)
sns.lineplot(x = "max_depth", y = "test", data = resultados)

Para sermos mais assertivos na resposta, você poderia nos encaminhar seu notebook? Pode colocá-lo em um drive (deixar o link público) e nos encaminhar, ou caso esteja utilizando o colab poderia compartilhar o link do notebook também.

Aguardo retorno.

Abraços.

Olá Felipe!

Desculpa pela demora em dar um retorno.

O erro está acontecendo devido a essa função aqui:

def roda_arvore_de_decisao (max_depth):


  SEED = 301
  np.random.seed(SEED)

  cv = GroupKFold(n_splits = 10)
  modelo = DecisionTreeClassifier(max_depth=max_depth)
  results = cross_validate(modelo, x_azar, y_azar, cv = cv, groups = dados.modelo, return_train_score=True)
  train_score = results['train_score'].mean() * 100,
  test_score =  results['test_score'].mean() * 100

  print("max_depth = %d, treino = %2.f, teste = %.2f" % (max_depth, results['train_score'].mean() * 100, results['test_score'].mean() * 100))
  tabela = [max_depth, train_score,test_score]
  #imprime_resultados(results)
  return tabela

Ao olharmos para como você declarou a variável train_score percebemos que ao final você adicionou uma vírgula, ao fazer isso o Python irá interpretar que você está declarando uma tupla de valores e não somente um valor, e devido a isso quando você tenta plotar o lineplot acontece esse erro.

Para resolver isso basta retirar a vírgula que o problema estará solucionado.

Abaixo o código completo já plotando o gráfico:

import seaborn as sns

def roda_arvore_de_decisao (max_depth):


  SEED = 301
  np.random.seed(SEED)

  cv = GroupKFold(n_splits = 10)
  modelo = DecisionTreeClassifier(max_depth=max_depth)
  results = cross_validate(modelo, x_azar, y_azar, cv = cv, groups = dados.modelo, return_train_score=True)
  train_score = results['train_score'].mean() * 100
  test_score =  results['test_score'].mean() * 100

  print("max_depth = %d, treino = %.2f, teste = %.2f" % (max_depth, results['train_score'].mean() * 100, results['test_score'].mean() * 100))
  tabela = [max_depth, train_score,test_score]
  #imprime_resultados(results)
  return tabela


resultados = [roda_arvore_de_decisao(i) for i in range (1,33)]
resultados = pd.DataFrame(resultados, columns= ["max_depth","train","test"])
sns.lineplot(x = "max_depth", y = "train", data = resultados)
sns.lineplot(x = "max_depth", y = "test", data = resultados)
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!