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

Erro na função fit

Gostaria de saber porque, dependendo se eu uso o método fit ou fit_predict, o código dá erro nos exemplos abaixo. Seguem o primeiro código:

modelo = KMeans(n_clusters=3)
grupos = modelo.fit(dados)
plt.scatter(x=dados.coluna1, y=dados.coluna2, 
            c=grupos,
           cmap='viridis')

Se eu usar modelo.fit(generos_escalados) em vez de modelo.fit_predict(generos_escalados), a seguinte exceção é levantada:

TypeError                                 Traceback (most recent call last)
<ipython-input-67-e563491c5f68> in <module>()
      3 plt.scatter(x=dados.coluna1, y=dados.coluna2, 
      4             c=grupos,
----> 5            cmap='viridis')
      6 centroides = modelo.cluster_centers_
      7 plt.scatter(dados.coluna1, dados.coluna2,

5 frames
/usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asanyarray(a, dtype, order)
    136 
    137     """
--> 138     return array(a, dtype, copy=False, order=order, subok=True)
    139 
    140 

TypeError: float() argument must be a string or a number, not 'KMeans'

Por que isso ocorre? Imagino que seja algo relacionado a retorno de tipos com esta função, mas não sei ao certo o que está ocorrendo. Alguém poderia me explicar?

1 resposta
solução!

Olá Adriana.

Você está correta, o que está gerando esse erro é o retorno que cada método trás. Como pode ser visto na documentação, a função fit retorna o proprio modelo só que agora treinado, enquanto o fit_predict retorna um array que classifica cada valor em uma label.

Mas olhando com o código como um todo vemos que utilizar o fit não faz sentindo:

modelo = KMeans(n_clusters=3)

Primeiro criamos um modelo.

modelo = KMeans(n_clusters=3)
grupos = modelo.fit(dados)

Depois treinamos esse modelo

modelo = KMeans(n_clusters=3)
grupos = modelo.fit(dados)
plt.scatter(x=dados.coluna1, y=dados.coluna2, 
            c=grupos,
           cmap='viridis')

E finalmente criamos um gráfico com esses dados classificados, só que dessa maneira a nossa varável grupos contem o modelo, algo que não faz sentido.

modelo = KMeans(n_clusters=3)
grupos = modelo.fit_predict(dados)
plt.scatter(x=dados.coluna1,y=dados.coluna2,
            c=grupos,
            cmap='viridis')

Já quando usamos o fit_predict estamos alem de treinando o modelo, também pegando os dados classificados por esse modelo.

Espero ter te ajudado a entender melhor, mas qualquer duvida não hesite em perguntar.

Bons Estudos.