1
resposta

Erro ao tentar usar a função fit

Meu código:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans


df = pd.read_csv('/content/drive/My Drive/Google-Colaboraty/iris.csv')

df.head()

agrupador = KMeans(n_clusters=4)
agrupador.fit(df)

O erro:

ValueError Traceback (most recent call last)

in () 10 11 agrupador = KMeans(n_clusters=4) ---> 12 agrupador.fit(df)

2 frames

/usr/local/lib/python3.6/dist-packages/numpy/core/_asarray.py in asarray(a, dtype, order) 83 84 """ ---> 85 return array(a, dtype, copy=False, order=order) 86 87

ValueError: could not convert string to float: 'virginica'

1 resposta

Oii Raiany, tudo certo por aí?

Peço desculpas pela demora em te dar um retorno, mas eu consegui resolver seu problema! Ali no ValueError ele diz que não pode fazer o treinamento basixamente porque não conseguiu converter uma string para um float, ou seja, a palavra 'virginica' e as outras que estão descritas em variety da sua tabela iris.csv precisam ser trocadas para um valor float. Para fazer isso podemos fazer um dicionário e substituir os nomes por números, como 0, 1 e 2 e depois disso renomear os campos e treinar a rede, dessa forma aqui:

• Observação: eu utilizei um iris.csv que encontrei na internet, que está naquele link do Github ali.

Primeiro eu faço o import das bibliotecas e do banco de dados

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans


df = pd.read_csv('https://gist.githubusercontent.com/netj/8836201/raw/6f9306ad21398ea43cba4f7d537619d0e07d5ae3/iris.csv')

df.head()

Agora antes de definirmos nosso KMeans, vamos trocar os dados da tabela, dessa forma:

nomes = {
    'Setosa' : '0',
    'Versicolor' : '1',
    'Virginica' : '2'
}

df['variety'] = df['variety'].map(nomes)

Se fizermos um df.head() podemos notar que ele trocou os valores que queríamos já, veja aqui, onde antes era Setosa, temos o valor 0.

imagem com o topo da tabela iris.csv e a coluna variety está com números 0, indicando que trocou realmente o valor 'Setosa' por 0, como queríamos

Depois disso, podemos fazer a definição do agrupador e o número de clusters que você fez e treinar a rede que ela terá o retorno esperado.

agrupador = KMeans(n_clusters=4)
agrupador.fit(df)
agrupador.labels_
Imagem com o cluster feito e retornando os valores de 4 clusters, que foi a delimitada pela aluna no problema

Note que nós temos clusters de 0 à 3, que são o total de clusters que você delimitou que queria, o melhor nesse caso são 3, já que tem apenas 3 tipos de variações. Se tiver mais alguma dúvida, é só me chamar, ok?

Bons estudos ^^