¿El objeto pandas dataframe funcionará con sklearn kmeans clustering?


El conjunto de datos es pandas dataframe. Este es sklearn.Cluster.KMeans

 km = KMeans(n_clusters = n_Clusters)

 km.fit(dataset)

 prediction = km.predict(dataset)

Así es como decido qué entidad pertenece a qué grupo:

 for i in range(len(prediction)):
     cluster_fit_dict[dataset.index[i]] = prediction[i]

Así es como se ve el conjunto de datos:

 A 1 2 3 4 5 6
 B 2 3 4 5 6 7
 C 1 4 2 7 8 1
 ...

Donde A,B, C son índices

¿Es esta la forma correcta de usar k-means?

Author: Jason Sundram, 2015-01-19

2 answers

Para saber si su dataframe dataset tiene contenido adecuado, puede convertir explícitamente a una matriz numpy:

dataset_array = dataset.values
print(dataset_array.dtype)
print(dataset_array)

Si el array tiene un dtype numérico homogéneo (típicamente numpy.float64) entonces debería estar bien para scikit-learn 0.15.2 y posteriores. Es posible que aún necesite normalizar los datos con sklearn.preprocessing.StandardScaler, por ejemplo.

Si su marco de datos se escribe de forma heterogénea, el dtype del array numpy correspondiente será object que no es adecuado para scikit-learn. Necesitas extraer un representación numérica de todas las entidades relevantes (por ejemplo, extrayendo variables ficticias para entidades categóricas) y eliminar las columnas que no son entidades adecuadas (por ejemplo, identificadores de muestra).

 13
Author: ogrisel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-19 08:47:42

Asumiendo que todos los valores en el dataframe son numéricos,

# Convert DataFrame to matrix
mat = dataset.values
# Using sklearn
km = sklearn.cluster.KMeans(n_clusters=5)
km.fit(mat)
# Get cluster assignment labels
labels = km.labels_
# Format results as a DataFrame
results = pandas.DataFrame([dataset.index,labels]).T

Alternativamente, puedes probar KMeans++ para Pandas.

 21
Author: user666,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-26 17:02:36