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.
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_
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 ^^